@sula-tech/webcomponents 0.23.1 → 0.24.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/cjs/index.cjs.js +8 -7
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/sula-avatar_32.cjs.entry.js +24 -23
- package/dist/cjs/sula-avatar_32.cjs.entry.js.map +1 -1
- package/dist/cjs/sula-calendar.model-CxjS_EJv.js +10 -0
- package/dist/cjs/sula-calendar.model-CxjS_EJv.js.map +1 -0
- package/dist/cjs/{sula-calendar.model-BI5cNrUo.js → sula-menu.model-BDxbWyPG.js} +2 -8
- package/dist/cjs/sula-menu.model-BDxbWyPG.js.map +1 -0
- package/dist/cjs/sula-profile-menu.cjs.entry.js +55 -0
- package/dist/cjs/sula-profile-menu.cjs.entry.js.map +1 -0
- package/dist/cjs/sula-profile-menu.entry.cjs.js.map +1 -0
- package/dist/cjs/sula-workbench-menu.cjs.entry.js +578 -0
- package/dist/cjs/sula-workbench-menu.cjs.entry.js.map +1 -0
- package/dist/cjs/sula-workbench-menu.entry.cjs.js.map +1 -0
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +3 -1
- package/dist/collection/components/sula-icon/sula-icon.css +1 -1
- package/dist/collection/components/sula-menu/sula-menu.css +1 -1
- package/dist/collection/components/sula-menu/sula-menu.js +13 -13
- package/dist/collection/components/sula-menu/sula-menu.js.map +1 -1
- package/dist/collection/components/sula-profile-menu/model/sula-profile-menu.model.js +2 -0
- package/dist/collection/components/sula-profile-menu/model/sula-profile-menu.model.js.map +1 -0
- package/dist/collection/components/sula-profile-menu/sula-profile-menu.css +1 -0
- package/dist/collection/components/sula-profile-menu/sula-profile-menu.js +163 -0
- package/dist/collection/components/sula-profile-menu/sula-profile-menu.js.map +1 -0
- package/dist/collection/components/sula-profile-menu/sula-profile-menu.stories.js +74 -0
- package/dist/collection/components/sula-profile-menu/sula-profile-menu.stories.js.map +1 -0
- package/dist/collection/components/sula-switch/sula-switch.css +1 -1
- package/dist/collection/components/sula-workbench-menu/model/sula-workbench-menu.model.js +2 -0
- package/dist/collection/components/sula-workbench-menu/model/sula-workbench-menu.model.js.map +1 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.css +1 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js +996 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js.map +1 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js +450 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js.map +1 -0
- package/dist/collection/index.js.map +1 -1
- package/dist/components/{p-Dl7qXhBf.js → p-B_WIoxzn.js} +4 -4
- package/dist/components/{p-Dl7qXhBf.js.map → p-B_WIoxzn.js.map} +1 -1
- package/dist/components/{p-V9D4rqf7.js → p-BssyNhpP.js} +3 -3
- package/dist/components/{p-V9D4rqf7.js.map → p-BssyNhpP.js.map} +1 -1
- package/dist/components/{p-DzGiAQVF.js → p-CGpfhGAG.js} +3 -3
- package/dist/components/{p-DzGiAQVF.js.map → p-CGpfhGAG.js.map} +1 -1
- package/dist/components/{p-DRskhGOW.js → p-CWTfj4TV.js} +3 -3
- package/dist/components/{p-DRskhGOW.js.map → p-CWTfj4TV.js.map} +1 -1
- package/dist/components/p-DEhN6ZhJ.js +110 -0
- package/dist/components/p-DEhN6ZhJ.js.map +1 -0
- package/dist/components/{p-DjPqgTzy.js → p-DK8hW-Cd.js} +3 -3
- package/dist/components/{p-DjPqgTzy.js.map → p-DK8hW-Cd.js.map} +1 -1
- package/dist/components/{p-BhhQBGyJ.js → p-DwZCdDhF.js} +3 -3
- package/dist/components/{p-BhhQBGyJ.js.map → p-DwZCdDhF.js.map} +1 -1
- package/dist/components/{p-jsqtM3Ie.js → p-GEr9Dmhq.js} +3 -3
- package/dist/components/{p-jsqtM3Ie.js.map → p-GEr9Dmhq.js.map} +1 -1
- package/dist/components/p-KitH8bea.js +84 -0
- package/dist/components/p-KitH8bea.js.map +1 -0
- package/dist/components/sula-avatar.js +1 -1
- package/dist/components/sula-badge.js +1 -1
- package/dist/components/sula-breadcrumb.js +1 -1
- package/dist/components/sula-button.js +1 -1
- package/dist/components/sula-calendar.js +2 -2
- package/dist/components/sula-checkbox.js +1 -1
- package/dist/components/sula-chip.js +2 -2
- package/dist/components/sula-dropdown.js +1 -1
- package/dist/components/sula-icon-picker.js +4 -4
- package/dist/components/sula-icon.js +1 -1
- package/dist/components/sula-menu-select-list.js +1 -1
- package/dist/components/sula-menu.js +15 -15
- package/dist/components/sula-menu.js.map +1 -1
- package/dist/components/sula-modal.js +2 -2
- package/dist/components/sula-profile-menu.d.ts +11 -0
- package/dist/components/sula-profile-menu.js +9 -0
- package/dist/components/sula-profile-menu.js.map +1 -0
- package/dist/components/sula-progress-bar.js +1 -1
- package/dist/components/sula-search-bar.js +1 -1
- package/dist/components/sula-segmented-control.js +1 -1
- package/dist/components/sula-switch.js +1 -105
- package/dist/components/sula-switch.js.map +1 -1
- package/dist/components/sula-tag.js +1 -1
- package/dist/components/sula-textfield.js +1 -1
- package/dist/components/sula-tiles.js +1 -1
- package/dist/components/sula-timeline-list.js +1 -1
- package/dist/components/sula-toast-stack.js +2 -2
- package/dist/components/sula-toast.js +1 -1
- package/dist/components/sula-toggle.js +1 -1
- package/dist/components/sula-tooltip.js +1 -1
- package/dist/components/sula-workbench-menu.d.ts +11 -0
- package/dist/components/sula-workbench-menu.js +633 -0
- package/dist/components/sula-workbench-menu.js.map +1 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/sula-avatar_32.entry.js +18 -17
- package/dist/esm/sula-avatar_32.entry.js.map +1 -1
- package/dist/esm/sula-calendar.model-Cp_4qTxj.js +10 -0
- package/dist/esm/sula-calendar.model-Cp_4qTxj.js.map +1 -0
- package/dist/esm/{sula-calendar.model-BbsLJDfp.js → sula-menu.model-Cs9RR1ZV.js} +3 -9
- package/dist/esm/sula-menu.model-Cs9RR1ZV.js.map +1 -0
- package/dist/esm/sula-profile-menu.entry.js +53 -0
- package/dist/esm/sula-profile-menu.entry.js.map +1 -0
- package/dist/esm/sula-workbench-menu.entry.js +576 -0
- package/dist/esm/sula-workbench-menu.entry.js.map +1 -0
- package/dist/esm/webcomponents.js +1 -1
- package/dist/types/components/sula-profile-menu/model/sula-profile-menu.model.d.ts +22 -0
- package/dist/types/components/sula-profile-menu/sula-profile-menu.d.ts +35 -0
- package/dist/types/components/sula-profile-menu/sula-profile-menu.stories.d.ts +34 -0
- package/dist/types/components/sula-workbench-menu/model/sula-workbench-menu.model.d.ts +19 -0
- package/dist/types/components/sula-workbench-menu/sula-workbench-menu.d.ts +175 -0
- package/dist/types/components/sula-workbench-menu/sula-workbench-menu.stories.d.ts +145 -0
- package/dist/types/components.d.ts +267 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/webcomponents/index.esm.js +3 -1
- package/dist/webcomponents/index.esm.js.map +1 -1
- package/dist/webcomponents/p-68a6d489.entry.js +807 -0
- package/dist/webcomponents/p-68a6d489.entry.js.map +1 -0
- package/dist/webcomponents/p-88e5171a.entry.js +100 -0
- package/dist/webcomponents/p-88e5171a.entry.js.map +1 -0
- package/dist/webcomponents/{p-20b3135d.entry.js → p-907588e9.entry.js} +193 -191
- package/dist/webcomponents/{p-20b3135d.entry.js.map → p-907588e9.entry.js.map} +1 -1
- package/dist/webcomponents/p-Cp_4qTxj.js +10 -0
- package/dist/webcomponents/p-Cp_4qTxj.js.map +1 -0
- package/dist/webcomponents/{p-BbsLJDfp.js → p-Cs9RR1ZV.js} +4 -11
- package/dist/webcomponents/p-Cs9RR1ZV.js.map +1 -0
- package/dist/webcomponents/sula-profile-menu.entry.esm.js.map +1 -0
- package/dist/webcomponents/sula-workbench-menu.entry.esm.js.map +1 -0
- package/dist/webcomponents/webcomponents.esm.js +32 -9
- package/package.json +1 -1
- package/dist/cjs/sula-calendar.model-BI5cNrUo.js.map +0 -1
- package/dist/esm/sula-calendar.model-BbsLJDfp.js.map +0 -1
- package/dist/webcomponents/p-BbsLJDfp.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sula-workbench-menu.entry.js","sources":["src/components/sula-workbench-menu/sula-workbench-menu.scss?tag=sula-workbench-menu&encapsulation=shadow","src/components/sula-workbench-menu/sula-workbench-menu.tsx"],"sourcesContent":["$menu-ease-emphasized: cubic-bezier(0.22, 1, 0.36, 1);\n$menu-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);\n\n:host {\n --sula-menu-width: 280px;\n --sula-menu-collapsed-width: 88px;\n --sula-menu-main-item-font-size: 1rem;\n --sula-menu-main-item-line-height: 1.25rem;\n --sula-menu-sub-item-font-size: 0.9375rem;\n --sula-menu-main-item-max-lines: 2;\n --sula-menu-main-item-padding-block: 0.5rem;\n\n display: block;\n height: 100%;\n width: var(--sula-menu-width);\n position: relative;\n overflow: visible;\n transition: width 360ms $menu-ease-emphasized;\n}\n\n:host(.menu-host--density-compact) {\n --sula-menu-main-item-font-size: 0.875rem;\n --sula-menu-main-item-line-height: 1.125rem;\n --sula-menu-sub-item-font-size: 0.8125rem;\n --sula-menu-main-item-padding-block: 0.375rem;\n}\n\n:host(.menu-host--density-comfortable) {\n --sula-menu-main-item-font-size: 1.0625rem;\n --sula-menu-main-item-line-height: 1.5rem;\n --sula-menu-sub-item-font-size: 1rem;\n --sula-menu-main-item-padding-block: 0.625rem;\n}\n\n:host(.menu-host--collapsed) {\n width: var(--sula-menu-collapsed-width);\n}\n\n.menu-shell {\n position: relative;\n padding: 20px 0 12px;\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n transition:\n padding 360ms $menu-ease-emphasized,\n width 360ms $menu-ease-emphasized,\n transform 360ms $menu-ease-emphasized,\n box-shadow 360ms $menu-ease-emphasized,\n border-radius 280ms $menu-ease-standard,\n background-color 220ms $menu-ease-standard;\n}\n\n.menu-shell--expanded {\n width: var(--sula-menu-width);\n padding: 20px 20px 12px;\n box-shadow:\n 0 10px 24px rgba(15, 23, 42, 0.08),\n 0 2px 8px rgba(15, 23, 42, 0.06);\n}\n\n.menu-shell--collapsed {\n box-shadow:\n 0 8px 18px rgba(15, 23, 42, 0.06),\n 0 1px 4px rgba(15, 23, 42, 0.04);\n}\n\n.menu-shell--preview {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: var(--sula-menu-width);\n border-radius: 0 24px 24px 0;\n box-shadow:\n 0 28px 60px rgba(15, 23, 42, 0.18),\n 0 10px 24px rgba(15, 23, 42, 0.12);\n z-index: 2;\n}\n\n.menu-header {\n gap: 0;\n transition: padding 360ms $menu-ease-emphasized;\n}\n\n.menu-group + .menu-group {\n margin-top: 8px;\n}\n\n/* Orange segment on the tree line, next to the selected item. The line is the 1px left border of the\n parent list, so the 2px segment is centered over it. */\n.submenu > li.is-selected {\n position: relative;\n}\n\n.submenu > li.is-selected::before {\n content: '';\n position: absolute;\n top: 6px;\n bottom: 6px;\n left: -9.5px;\n width: 2px;\n border-radius: 2px;\n background: var(--color-brand-primary, #f05223);\n}\n\n/* ---------- collapse button (inside the header) ---------- */\n\n.menu-toggle {\n width: 32px;\n height: 32px;\n margin-left: auto;\n padding: 0;\n border: 1px solid var(--color-line-general, #e5e6e6);\n border-radius: 999px;\n background: var(--color-surface-body, #fff);\n color: var(--color-icon-primary, #6c6e6e);\n cursor: pointer;\n transition:\n color 160ms $menu-ease-standard,\n border-color 160ms $menu-ease-standard,\n background-color 160ms $menu-ease-standard;\n}\n\n.menu-toggle:hover {\n color: var(--color-brand-primary, #f05223);\n border-color: var(--color-brand-primary, #f05223);\n}\n\n.menu-toggle:focus-visible {\n outline: 2px solid var(--color-states-bg-focus, #1355b4);\n outline-offset: 2px;\n}\n\n.menu-shell--collapsed .menu-toggle {\n margin: 16px 0 0;\n}\n\n/* ---------- collapsed rail ---------- */\n\n.menu-shell--collapsed .menu-item {\n margin-inline: 0;\n padding-block: 10px;\n}\n\n.menu-shell--collapsed .item-icon {\n width: 20px;\n height: 20px;\n}\n\n.menu-shell--collapsed .item-icon i {\n font-size: 20px;\n}\n\n/* The profile button spans the same width as the footer divider and the item rows. */\n.menu-shell--expanded .user-info {\n margin-inline: 0;\n}\n\n.menu-shell--collapsed .menu-footer {\n padding-inline: 18px;\n}\n\n.menu-shell--collapsed .menu-nav {\n scrollbar-width: none;\n}\n\n.menu-shell--collapsed .menu-nav::-webkit-scrollbar {\n display: none;\n}\n\n/* A hidden wrapping label must not keep its height in the rail. */\n.menu-copy--hidden.menu-item-label--wrap {\n white-space: nowrap;\n}\n\n.menu-nav {\n transition: padding 360ms $menu-ease-emphasized;\n scrollbar-width: thin;\n scrollbar-color: var(--color-line-general-strong, #bfc0c0) transparent;\n padding-bottom: 16px;\n}\n\n/* The scroll area spans the full menu width so the scrollbar sits on the menu edge,\n not between the labels and the carets. The gutter keeps the right edge stable. */\n.menu-shell--expanded .menu-nav {\n margin-inline: -20px;\n padding-left: 20px;\n padding-right: 14px;\n scrollbar-gutter: stable;\n}\n\n.menu-nav::-webkit-scrollbar {\n width: 6px;\n}\n\n.menu-nav::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.menu-nav::-webkit-scrollbar-thumb {\n border-radius: 999px;\n background: var(--color-line-general-strong, #bfc0c0);\n}\n\n.menu-nav::-webkit-scrollbar-thumb:hover {\n background: var(--color-text-disabled, #949595);\n}\n\n.item-icon {\n width: 16px;\n height: 16px;\n}\n\n/* Long system names wrap; keep icon and caret on the first line. */\n.menu-nav .menu-item,\n.menu-nav .menu-item > div,\n.menu-nav .submenu-item,\n.menu-nav .submenu-item-branch-content,\n.menu-nav .submenu-item-branch-caret {\n align-items: flex-start;\n}\n\n\n.submenu-item .submenu-item-label {\n font-size: var(--sula-menu-sub-item-font-size);\n line-height: 1.25rem;\n}\n\n/* Icon and caret boxes match the first text line, so they stay aligned when labels wrap. */\n.menu-nav .item-icon,\n.menu-nav .menu-item-caret,\n.menu-nav .submenu-item-branch-caret {\n height: 1.25rem;\n}\n\n.menu-shell--expanded .menu-item .item-icon {\n width: 18px;\n}\n\n.menu-shell--expanded .menu-item .item-icon i {\n font-size: 18px;\n}\n\n\n\n.menu-footer {\n transition: padding 360ms $menu-ease-emphasized;\n}\n\n.menu-brand-image {\n flex: 0 0 auto;\n transition:\n margin 320ms $menu-ease-emphasized,\n transform 320ms $menu-ease-emphasized;\n}\n\n.menu-copy {\n display: block;\n min-width: 0;\n max-width: 220px;\n overflow: hidden;\n opacity: 1;\n white-space: nowrap;\n transform: translateX(0);\n transform-origin: left center;\n transition:\n max-width 320ms $menu-ease-emphasized,\n opacity 200ms $menu-ease-standard,\n transform 320ms $menu-ease-emphasized;\n}\n\n.menu-copy--visible {\n max-width: 100%;\n opacity: 1;\n transform: translateX(0);\n pointer-events: auto;\n}\n\n.menu-copy--hidden {\n max-width: 0;\n opacity: 0;\n transform: translateX(-10px);\n pointer-events: none;\n}\n\n.menu-title {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.menu-title.menu-copy--visible {\n max-width: 100%;\n}\n\n.menu-item-label {\n flex: 1 1 auto;\n font-size: var(--sula-menu-main-item-font-size);\n line-height: var(--sula-menu-main-item-line-height);\n}\n\n.menu-item-label--truncate {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.menu-item-label--wrap {\n display: -webkit-box;\n overflow: hidden;\n text-overflow: initial;\n white-space: normal;\n overflow-wrap: anywhere;\n word-break: break-word;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--sula-menu-main-item-max-lines);\n line-clamp: var(--sula-menu-main-item-max-lines);\n}\n\n.menu-item {\n margin-inline: -8px;\n padding-block: var(--sula-menu-main-item-padding-block);\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n border-color 240ms $menu-ease-emphasized,\n margin-left 240ms $menu-ease-emphasized,\n padding 320ms $menu-ease-emphasized;\n}\n\n.menu-item-caret {\n max-width: 16px;\n overflow: hidden;\n opacity: 1;\n transition:\n transform 280ms $menu-ease-emphasized,\n opacity 180ms $menu-ease-standard,\n max-width 280ms $menu-ease-emphasized,\n margin-left 280ms $menu-ease-emphasized;\n}\n\n.menu-item-caret--visible {\n opacity: 1;\n max-width: 16px;\n margin-left: 12px;\n}\n\n.menu-item-caret--hidden {\n opacity: 0;\n max-width: 0;\n margin-left: 0;\n transform: translateX(-8px);\n}\n\n.menu-item-caret--expanded {\n transform: rotate(180deg);\n}\n\n.submenu {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n will-change: max-height, opacity, transform;\n transform: translateY(-6px);\n transform-origin: top left;\n transition:\n max-height 260ms $menu-ease-emphasized,\n opacity 120ms $menu-ease-standard,\n transform 180ms $menu-ease-emphasized;\n}\n\n.submenu--expanded {\n max-height: 999px;\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.submenu-item {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n transform 240ms $menu-ease-emphasized;\n}\n\n.submenu-item--branch {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n border-color 240ms $menu-ease-emphasized,\n margin-left 240ms $menu-ease-emphasized;\n}\n\n.submenu-item-branch-content {\n min-width: 0;\n}\n\n.submenu-branch {\n transform-origin: top left;\n}\n\n.submenu-grandchild-item {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n transform 240ms $menu-ease-emphasized;\n}\n\n.submenu-grandchild-label {\n display: block;\n}\n\n/* ---------- drill-down header ---------- */\n\n.menu-header--drilldown {\n animation: drill-header-in 220ms $menu-ease-standard;\n}\n\n.identity-strip {\n display: flex;\n flex: 1 1 auto;\n min-width: 0;\n align-items: center;\n margin: 0 0 0 -8px;\n padding: 6px 8px;\n border: none;\n border-radius: 8px;\n background: transparent;\n color: inherit;\n font: inherit;\n text-align: left;\n cursor: pointer;\n transition: background-color 160ms $menu-ease-standard;\n}\n\n.identity-row {\n margin-bottom: 12px;\n}\n\n.identity-strip:hover {\n background: var(--color-surface-on-body, #f3f4f4);\n}\n\n.identity-image {\n flex: none;\n width: 20px;\n height: 20px;\n margin-right: 8px;\n border-radius: 5px;\n overflow: hidden;\n}\n\n.identity-image img {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.identity-label {\n min-width: 0;\n font-size: 13px;\n font-weight: 500;\n color: var(--color-text-secondary, #6c6e6e);\n}\n\n.breadcrumb-row {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 0;\n margin-bottom: 10px;\n}\n\n.back-btn {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n margin: 0 2px 0 -6px;\n padding: 0;\n border: none;\n border-radius: 8px;\n background: transparent;\n cursor: pointer;\n transition: background-color 160ms $menu-ease-standard;\n}\n\n.back-btn:hover {\n background: var(--color-surface-on-body, #f3f4f4);\n}\n\n.crumb-trail {\n flex: 1 1 auto;\n min-width: 0;\n gap: 2px;\n}\n\n.crumb-btn {\n flex: 0 1 auto;\n text-align: left;\n min-width: 28px;\n max-width: 120px;\n padding: 3px 4px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--color-text-secondary, #6c6e6e);\n font: inherit;\n font-size: 12px;\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background-color 160ms $menu-ease-standard, color 160ms $menu-ease-standard;\n}\n\n.crumb-btn:hover {\n background: var(--color-surface-on-body, #f3f4f4);\n color: var(--color-text-primary, #313333);\n}\n\n\n.crumb-btn--ellipsis {\n flex: none;\n max-width: none;\n display: flex;\n align-items: center;\n padding: 3px 5px;\n}\n\n.crumb-sep {\n flex: none;\n color: var(--color-text-disabled, #949595);\n}\n\n.crumb-dropdown {\n position: absolute;\n min-width: 172px;\n max-width: 230px;\n padding: 6px;\n display: flex;\n flex-direction: column;\n gap: 1px;\n border: 1px solid var(--color-line-general, #e5e6e6);\n border-radius: 10px;\n background: var(--color-surface-body, #fff);\n box-shadow: 0 14px 32px rgba(15, 23, 42, 0.16);\n z-index: 30;\n}\n\n.crumb-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 8px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--color-text-primary, #313333);\n font: inherit;\n font-size: 13px;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.crumb-dropdown-item:hover {\n background: var(--color-surface-on-body, #f3f4f4);\n}\n\n.context-row {\n min-width: 0;\n}\n\n.context-icon {\n width: 20px;\n height: 20px;\n margin-right: 8px;\n}\n\n.context-title {\n min-width: 0;\n}\n\n/* ---------- drill-down panel ---------- */\n\n.menu-panel--forward {\n animation: drill-slide-forward 260ms $menu-ease-emphasized;\n}\n\n.menu-panel--back {\n animation: drill-slide-back 260ms $menu-ease-emphasized;\n}\n\n@keyframes drill-header-in {\n from {\n opacity: 0;\n transform: translateY(-4px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes drill-slide-forward {\n from {\n opacity: 0;\n transform: translateX(20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes drill-slide-back {\n from {\n opacity: 0;\n transform: translateX(-20px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n\nsula-icon {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n line-height: 1;\n}\n\nsula-icon > i {\n display: block;\n line-height: 1;\n}\n\n.item-icon > sula-icon,\n.item-icon > .menu-item-image {\n flex: none;\n}\n\n.menu-item-image {\n flex: none;\n display: block;\n object-fit: contain;\n transition: opacity 200ms $menu-ease-standard;\n}\n\n.menu-item-image--sm {\n width: 0.875rem;\n height: 0.875rem;\n}\n\n.menu-item-image--md {\n width: 1rem;\n height: 1rem;\n}\n\n.menu-item-image--lg {\n width: 1.25rem;\n height: 1.25rem;\n}\n\n.menu-item-image.is-faded {\n opacity: 0.5;\n}\n\n/* Inside an icon slot the image follows the slot size (16px sub levels, 18px level 1, 20px rail). */\n.item-icon > .menu-item-image {\n width: 100%;\n height: auto;\n aspect-ratio: 1 / 1;\n}\n\n.menu-item-image--mask {\n background-color: currentColor;\n -webkit-mask: var(--menu-item-image) center / contain no-repeat;\n mask: var(--menu-item-image) center / contain no-repeat;\n}\n\n\n.user-copy {\n display: flex;\n flex-direction: column;\n min-width: 0;\n overflow: hidden;\n transition:\n max-width 320ms $menu-ease-emphasized,\n opacity 200ms $menu-ease-standard;\n}\n\n.user-copy--visible {\n max-width: 100%;\n opacity: 1;\n transition:\n max-width 320ms $menu-ease-emphasized,\n opacity 200ms $menu-ease-standard 120ms;\n}\n\n.user-copy--hidden {\n max-width: 0;\n opacity: 0;\n}\n\n.user-avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.profile-popover {\n position: fixed;\n z-index: 60;\n width: 256px;\n box-sizing: border-box;\n border: 1px solid var(--color-line-general);\n border-radius: 12px;\n background: var(--color-surface-body);\n box-shadow:\n 0 12px 32px rgba(15, 23, 42, 0.12),\n 0 2px 8px rgba(15, 23, 42, 0.06);\n outline: none;\n visibility: hidden;\n opacity: 0;\n transform: translateY(6px) scale(0.98);\n transform-origin: bottom left;\n transition:\n opacity 160ms $menu-ease-standard,\n transform 200ms $menu-ease-emphasized,\n visibility 0s linear 200ms;\n}\n\n.profile-popover--side {\n transform: translateX(-6px) scale(0.98);\n}\n\n.profile-popover--open {\n visibility: visible;\n opacity: 1;\n transform: none;\n transition:\n opacity 160ms $menu-ease-standard,\n transform 200ms $menu-ease-emphasized;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host,\n .menu-shell,\n .menu-header,\n .menu-nav,\n .menu-footer,\n .menu-brand-image,\n .menu-copy,\n .menu-item,\n .menu-item-caret,\n .submenu,\n .submenu-item,\n .menu-toggle,\n\n\n .menu-header--drilldown,\n .menu-panel--forward,\n .menu-panel--back {\n animation: none;\n }\n\n .menu-item-caret,\n .submenu-item,\n .submenu-grandchild-item,\n .profile-popover {\n transition: none;\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, JSX, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaMenuDensity, SulaMenuLabelOverflow } from '../sula-menu/model/sula-menu.model';\nimport { SulaProfileMenuItem, SulaProfileMenuSwitchChange } from '../sula-profile-menu/model/sula-profile-menu.model';\nimport { SulaWorkbenchMenuDirection, SulaWorkbenchMenuItem, SulaWorkbenchMenuPath, SulaWorkbenchMenuUser } from './model/sula-workbench-menu.model';\n\ntype CrumbMenuState = { open: boolean; left: number; top: number };\n\n/**\n * Navigation menu that combines an inline expandable tree with a drill-down panel.\n * Levels above `drilldownLevel` expand in place, as in `sula-menu`. Items at or below\n * that level with children open a single-level panel with a breadcrumb trail.\n *\n * @part shell - Main visual container of the menu.\n * @part title - Menu title, or the current level title while drilled in.\n * @part main-item-label - Label of each top-level item.\n * @part item-label - Label of each item inside the drill-down panel.\n * @part toggle-label - Label of the collapse/expand control.\n * @slot profile-content - Extra content rendered inside the profile popover.\n * @part profile-popover - Popover opened from the user area.\n * @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 256px.\n * @cssprop --sula-menu-collapsed-width - Width of the collapsed menu. Defaults to 88px.\n */\n@Component({\n tag: 'sula-workbench-menu',\n styleUrl: 'sula-workbench-menu.scss',\n shadow: true,\n})\nexport class SulaWorkbenchMenu {\n @Element() el: HTMLElement;\n\n /**\n * Menu title\n */\n @Prop()\n menuTitle: string = '';\n\n /**\n * Menu image\n */\n @Prop()\n image: string = '';\n\n /**\n * Menu width in expanded state. Use a CSS length that does not depend on the\n * host width, for example: 256px, 20rem or clamp(16rem, 25vw, 24rem).\n */\n @Prop()\n width: string = '';\n\n /**\n * Density applied to menu items.\n */\n @Prop()\n density: SulaMenuDensity = SulaMenuDensity.Default;\n\n /**\n * Overflow behavior for item labels.\n */\n @Prop()\n labelOverflow: SulaMenuLabelOverflow = SulaMenuLabelOverflow.Wrap;\n\n /**\n * Depth (1-based) from which items with children open a drill-down panel instead of expanding in place.\n * With the default of 3, the first two levels expand inline and deeper branches drill down.\n */\n @Prop()\n drilldownLevel: number = 3;\n\n /**\n * Menu items. Each item may use `icon` (icon font class) or `image` (URL or data URI of an image or SVG).\n */\n @Prop({ mutable: true, reflect: true })\n items: SulaWorkbenchMenuItem[] = [];\n\n /**\n * Logged user shown at the bottom of the menu. Without a photo, the initials are shown.\n */\n @Prop()\n user?: SulaWorkbenchMenuUser;\n\n /**\n * Icon used for items without `icon` or `image`. Use an empty string to show no icon.\n */\n @Prop()\n defaultIcon: string = 'ph ph-dot-outline';\n\n /**\n * Options of the profile popover. Use `divider` for a separator and `hasSwitch` + `active` for a toggle row.\n */\n @Prop({ mutable: true })\n profileItems: SulaProfileMenuItem[] = [];\n\n /**\n * Emitted when a leaf item is selected\n */\n @Event()\n itemSelected: EventEmitter<SulaWorkbenchMenuItem>;\n\n /**\n * Emitted when any item is clicked\n */\n @Event()\n itemClicked: EventEmitter<SulaWorkbenchMenuItem>;\n\n /**\n * Emitted when the drill-down level changes, with the ids from the root to the level shown (empty at the root)\n */\n @Event()\n levelChanged: EventEmitter<SulaWorkbenchMenuPath>;\n\n /**\n * Emitted when the user area is clicked. Call `preventDefault()` to keep the profile popover closed.\n */\n @Event({ cancelable: true })\n profileClicked: EventEmitter<SulaWorkbenchMenuUser>;\n\n /**\n * Emitted when a profile popover option without switch is clicked. The popover closes.\n */\n @Event()\n profileItemClicked: EventEmitter<SulaProfileMenuItem>;\n\n /**\n * Emitted when the switch of a profile popover option changes. The popover stays open.\n */\n @Event()\n profileSwitchChanged: EventEmitter<SulaProfileMenuSwitchChange>;\n\n /**\n * Emitted when the menu is toggled between collapsed and expanded states\n * True: Menu is expanded\n * False: Menu is collapsed\n */\n @Event()\n menuToggled: EventEmitter<boolean>;\n\n @State()\n collapsed: boolean = false;\n\n @State()\n previewExpanded: boolean = false;\n\n @State()\n stack: SulaWorkbenchMenuItem[] = [];\n\n @State()\n direction: SulaWorkbenchMenuDirection = 'forward';\n\n @State()\n selectedPath: SulaWorkbenchMenuPath = [];\n\n @State()\n crumbMenu: CrumbMenuState = { open: false, left: 0, top: 0 };\n\n @State()\n profileOpen: boolean = false;\n\n private crumbEllipsisEl?: HTMLElement;\n private crumbDropdownEl?: HTMLElement;\n private shellEl?: HTMLElement;\n private userInfoEl?: HTMLElement;\n private profileEl?: HTMLElement;\n private hovering = false;\n\n private get normalizedWidth() {\n const value = this.width?.trim();\n return value ? value : undefined;\n }\n\n private get hostStyleVariables() {\n return {\n ...(this.normalizedWidth ? { '--sula-menu-width': this.normalizedWidth } : {}),\n };\n }\n\n componentWillLoad() {\n this.syncWithItems(this.items);\n }\n\n @Watch('items')\n syncWithItems(items: SulaWorkbenchMenuItem[]) {\n const nextSelected = this.findSelectedIds(items);\n if (nextSelected) {\n this.selectedPath = nextSelected;\n } else if (!this.selectedPath.length || !this.isStillSelectable(items, this.selectedPath)) {\n this.selectedPath = [];\n }\n this.stack = this.rebuildStack(items, this.stack);\n }\n\n componentDidRender() {\n this.positionProfile();\n }\n\n @Listen('click', { target: 'document' })\n onDocumentClick(event: MouseEvent) {\n const path = event.composedPath();\n if (this.profileOpen && !path.includes(this.profileEl) && !path.includes(this.userInfoEl)) this.closeProfile();\n if (!this.crumbMenu.open) return;\n if (path.includes(this.crumbEllipsisEl) || path.includes(this.crumbDropdownEl)) return;\n this.closeCrumbMenu();\n }\n\n @Listen('keydown', { target: 'document' })\n onDocumentKeydown(event: KeyboardEvent) {\n if (event.key !== 'Escape') return;\n this.closeCrumbMenu();\n if (this.profileOpen) {\n this.closeProfile();\n this.userInfoEl?.focus();\n }\n }\n\n @Listen('resize', { target: 'window' })\n onWindowResize() {\n this.positionProfile();\n }\n\n private getVisibleItems(items?: SulaWorkbenchMenuItem[]) {\n return items?.filter(item => !item.hidden) ?? [];\n }\n\n private hasVisibleChildren(item: Pick<SulaWorkbenchMenuItem, 'children'>) {\n return this.getVisibleItems(item.children).length > 0;\n }\n\n private isDrilled() {\n return this.stack.length >= this.drilldownLevel;\n }\n\n private findSelectedIds(items: SulaWorkbenchMenuItem[], trail: string[] = []): string[] | undefined {\n for (const item of this.getVisibleItems(items)) {\n if (!this.hasVisibleChildren(item)) {\n if (item.selected) return [...trail, item.id];\n continue;\n }\n const nested = this.findSelectedIds(item.children, [...trail, item.id]);\n if (nested) return nested;\n }\n return undefined;\n }\n\n private isStillSelectable(items: SulaWorkbenchMenuItem[], path: string[]) {\n const found = this.findPath(items, path[path.length - 1]);\n return !!found && !this.hasVisibleChildren(found[found.length - 1]);\n }\n\n private toggleExpanded(items: SulaWorkbenchMenuItem[], id: string): SulaWorkbenchMenuItem[] {\n return items.map(item => {\n if (item.id === id) return { ...item, expanded: !item.expanded };\n if (!item.children) return item;\n return { ...item, children: this.toggleExpanded(item.children, id) };\n });\n }\n\n private findPath(items: SulaWorkbenchMenuItem[], id: string, trail: SulaWorkbenchMenuItem[] = []): SulaWorkbenchMenuItem[] | undefined {\n for (const item of this.getVisibleItems(items)) {\n const next = [...trail, item];\n if (item.id === id) return next;\n const nested = this.findPath(item.children ?? [], id, next);\n if (nested) return nested;\n }\n return undefined;\n }\n\n private rebuildStack(items: SulaWorkbenchMenuItem[], previous: SulaWorkbenchMenuItem[]) {\n const next: SulaWorkbenchMenuItem[] = [];\n let level = items;\n\n for (const ancestor of previous) {\n const match = this.getVisibleItems(level).find(item => item.id === ancestor.id);\n if (!match) break;\n next.push(match);\n level = match.children ?? [];\n }\n\n return next;\n }\n\n private isActive(item: SulaWorkbenchMenuItem, branch: boolean) {\n if (branch) return this.selectedPath.includes(item.id);\n return this.selectedPath.length > 0 && this.selectedPath[this.selectedPath.length - 1] === item.id;\n }\n\n private isFaded(item: SulaWorkbenchMenuItem, active: boolean) {\n return !!item.disabled && !active;\n }\n\n private emitLevel() {\n this.levelChanged.emit(this.stack.map(item => item.id));\n }\n\n private toggleInline(id: string) {\n this.items = this.toggleExpanded(this.items, id);\n }\n\n private enterDrill(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id) ?? [item];\n this.direction = 'forward';\n this.stack = path;\n this.closeCrumbMenu();\n this.emitLevel();\n }\n\n private markSelected(items: SulaWorkbenchMenuItem[], id: string): SulaWorkbenchMenuItem[] {\n return items.map(item => ({\n ...item,\n selected: item.id === id,\n ...(item.children ? { children: this.markSelected(item.children, id) } : {}),\n }));\n }\n\n // Selection lives on the items (like `expanded`), so re-assigning items when a branch is\n // toggled keeps the user's choice instead of falling back to the initially selected item.\n private selectItem(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id) ?? [item];\n this.items = this.markSelected(this.items, item.id);\n this.selectedPath = path.map(p => p.id);\n this.itemSelected.emit(item);\n }\n\n private handleRowClick(item: SulaWorkbenchMenuItem, depth: number) {\n if (item.disabled) return;\n\n this.itemClicked.emit(item);\n\n if (this.hasVisibleChildren(item)) {\n if (depth < this.drilldownLevel) {\n this.toggleInline(item.id);\n } else {\n this.enterDrill(item);\n }\n return;\n }\n\n this.selectItem(item);\n }\n\n private goToDepth(index: number) {\n this.direction = 'back';\n this.stack = index < 0 ? [] : this.stack.slice(0, index + 1);\n this.closeCrumbMenu();\n this.emitLevel();\n }\n\n private toggleCrumbMenu(event: MouseEvent) {\n if (this.crumbMenu.open) {\n this.closeCrumbMenu();\n return;\n }\n const button = event.currentTarget as HTMLElement;\n this.crumbMenu = {\n open: true,\n left: button.offsetLeft,\n top: button.offsetTop + button.offsetHeight + 6,\n };\n }\n\n private closeCrumbMenu() {\n if (this.crumbMenu.open) this.crumbMenu = { ...this.crumbMenu, open: false };\n }\n\n private toggleMenu() {\n this.closeProfile();\n if (this.collapsed) {\n this.collapsed = false;\n this.previewExpanded = false;\n this.menuToggled.emit(true);\n return;\n }\n\n this.collapsed = true;\n this.menuToggled.emit(false);\n this.previewExpanded = false;\n }\n\n private handleMenuMouseEnter() {\n this.hovering = true;\n if (this.collapsed) this.previewExpanded = true;\n }\n\n // While the popover is open the preview stays expanded, so the popover keeps its anchor.\n private handleMenuMouseLeave() {\n this.hovering = false;\n if (this.collapsed && !this.profileOpen) this.previewExpanded = false;\n }\n\n private toggleProfile() {\n if (this.profileOpen) {\n this.closeProfile();\n return;\n }\n if (this.profileClicked.emit(this.user).defaultPrevented) return;\n this.profileOpen = true;\n requestAnimationFrame(() => this.profileEl?.focus());\n }\n\n private closeProfile() {\n if (!this.profileOpen) return;\n this.profileOpen = false;\n if (this.collapsed && !this.hovering) this.previewExpanded = false;\n }\n\n // Fixed position, so ancestors with overflow hidden do not clip the popover.\n private positionProfile() {\n if (!this.profileOpen || !this.profileEl || !this.userInfoEl || !this.shellEl) return;\n const gap = 8;\n const inset = 12;\n const anchor = this.userInfoEl.getBoundingClientRect();\n const shell = this.shellEl.getBoundingClientRect();\n const style = this.profileEl.style;\n\n if (!this.collapsed || this.previewExpanded) {\n style.left = `${shell.left + inset}px`;\n style.width = `${shell.width - inset * 2}px`;\n style.bottom = `${window.innerHeight - anchor.top + gap}px`;\n return;\n }\n\n style.left = `${shell.right + gap}px`;\n style.width = '';\n style.bottom = `${window.innerHeight - anchor.bottom}px`;\n }\n\n // Inner events are composed; stopping them avoids clashing with this menu's own itemClicked.\n private handleProfileItemClicked(event: CustomEvent<SulaProfileMenuItem>) {\n event.stopPropagation();\n this.closeProfile();\n this.profileItemClicked.emit(event.detail);\n }\n\n private handleProfileSwitchChanged(event: CustomEvent<SulaProfileMenuSwitchChange>) {\n event.stopPropagation();\n const { item } = event.detail;\n this.profileItems = this.profileItems.map(current => (current.id === item.id ? item : current));\n this.profileSwitchChanged.emit(event.detail);\n }\n\n private renderProfilePopover(expandedView: boolean) {\n return (\n <div\n part=\"profile-popover\"\n role=\"dialog\"\n aria-label={`Perfil de ${this.user.name}`}\n aria-hidden={String(!this.profileOpen)}\n tabIndex={-1}\n ref={el => (this.profileEl = el)}\n class={{\n 'profile-popover': true,\n 'profile-popover--open': this.profileOpen,\n 'profile-popover--side': !expandedView,\n }}\n >\n <sula-profile-menu\n user={this.user}\n items={this.profileItems}\n onItemClicked={event => this.handleProfileItemClicked(event)}\n onSwitchChanged={event => this.handleProfileSwitchChanged(event)}\n >\n <slot name=\"profile-content\"></slot>\n </sula-profile-menu>\n </div>\n );\n }\n\n private isValidIcon(icon?: string) {\n return !!icon && /ph-[a-z]/.test(icon);\n }\n\n private isSvg(image: string) {\n return /^data:image\\/svg\\+xml/i.test(image) || /\\.svg(\\?|#|$)/i.test(image);\n }\n\n private iconOf(item: SulaWorkbenchMenuItem) {\n return this.isValidIcon(item.icon) ? item.icon : this.defaultIcon;\n }\n\n private hasIcon(item: SulaWorkbenchMenuItem) {\n return !!item.image || this.isValidIcon(this.iconOf(item));\n }\n\n private renderItemIcon(item: SulaWorkbenchMenuItem, customClass: string, size: 'sm' | 'md' | 'lg', faded = false) {\n if (!this.hasIcon(item)) return null;\n if (item.image && this.isSvg(item.image)) {\n // SVGs are painted with currentColor through a mask, so they follow the same state colors as the icon font.\n return (\n <span\n class={`menu-item-image menu-item-image--mask menu-item-image--${size} ${customClass}`}\n style={{ '--menu-item-image': `url(\"${item.image.replace(/\"/g, '%22')}\")` }}\n aria-hidden=\"true\"\n ></span>\n );\n }\n if (item.image) {\n return (\n <img\n class={{ 'menu-item-image': true, [`menu-item-image--${size}`]: true, 'is-faded': faded }}\n src={item.image}\n alt=\"\"\n />\n );\n }\n return <sula-icon icon={this.iconOf(item)} customClass={customClass}></sula-icon>;\n }\n\n private getInitials(name: string) {\n return name\n .split(' ')\n .filter(Boolean)\n .slice(0, 2)\n .map(part => part[0].toUpperCase())\n .join('');\n }\n\n private renderUserInfo(expandedView: boolean) {\n const user = this.user;\n return (\n <button\n type=\"button\"\n class={{\n 'user-info flex min-w-0 cursor-pointer items-center rounded-xs p-8 text-left hover:bg-states-empty-bg-hover': true,\n 'user-info--active bg-states-empty-bg-hover': this.profileOpen,\n 'w-full': expandedView,\n }}\n title={`Ver perfil de ${user.name}`}\n aria-label={`Ver perfil de ${user.name}`}\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.profileOpen)}\n ref={el => (this.userInfoEl = el)}\n onClick={() => this.toggleProfile()}\n >\n <span class=\"user-avatar flex h-9 w-9 flex-none items-center justify-center overflow-hidden rounded-full bg-brand-primary text-sm font-semibold text-negative-negative-1\">\n {user.photo ? <img src={user.photo} alt={user.name} /> : this.getInitials(user.name)}\n </span>\n <span\n aria-hidden={!expandedView}\n class={{\n 'user-copy': true,\n 'ml-8': true,\n 'user-copy--visible': expandedView,\n 'user-copy--hidden': !expandedView,\n }}\n >\n <span part=\"user-name\" class=\"user-name truncate text-sm font-semibold text-text-primary\">\n {user.name}\n </span>\n {user.email && <span part=\"user-email\" class=\"user-email truncate text-xs text-text-secondary\">{user.email}</span>}\n </span>\n </button>\n );\n }\n\n private getIconClass(active: boolean, faded: boolean, size: string) {\n if (faded) return `text-icon-disabled ${size}`;\n if (active) return `text-brand-primary ${size}`;\n return `text-icon-primary ${size}`;\n }\n\n private renderCollapseButton() {\n const label = this.collapsed ? 'Expandir menu' : 'Recolher menu';\n return (\n <button\n type=\"button\"\n class=\"menu-toggle flex flex-none items-center justify-center\"\n title={label}\n aria-label={label}\n aria-expanded={String(!this.collapsed)}\n onClick={() => this.toggleMenu()}\n >\n <sula-icon icon={`ph-bold ph-caret-${this.collapsed ? 'right' : 'left'}`} customClass=\"text-lg\"></sula-icon>\n </button>\n );\n }\n\n private renderRootHeader(expandedView: boolean) {\n return (\n <div\n class={{\n 'menu-header flex items-center': true,\n 'mb-40': expandedView,\n 'mb-24 flex-col justify-center px-0': !expandedView,\n }}\n >\n {this.image && (\n <div class={{ 'menu-brand-image max-h-10 max-w-10 overflow-hidden': true, 'mr-6': expandedView }}>\n <img src={this.image} alt={this.menuTitle} />\n </div>\n )}\n <div\n aria-hidden={!expandedView}\n title={expandedView ? this.menuTitle : undefined}\n class={{\n 'menu-title menu-copy': true,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n }}\n >\n <h1 part=\"title\" class=\"truncate text-2xl font-bold leading-7 text-text-secondary\">\n {this.menuTitle}\n </h1>\n </div>\n {this.renderCollapseButton()}\n </div>\n );\n }\n\n private renderTrail(ancestors: SulaWorkbenchMenuItem[]) {\n const hasHidden = ancestors.length > 2;\n const visible = hasHidden ? ancestors.slice(-2) : ancestors;\n const crumbs: JSX.Element[] = [];\n\n if (hasHidden) {\n crumbs.push(\n <button\n key=\"ellipsis\"\n type=\"button\"\n class=\"crumb-btn crumb-btn--ellipsis\"\n aria-haspopup=\"true\"\n aria-expanded={String(this.crumbMenu.open)}\n title={`${ancestors.length - 2} nível(is) anterior(es)`}\n ref={el => (this.crumbEllipsisEl = el)}\n onClick={event => this.toggleCrumbMenu(event)}\n >\n <sula-icon icon=\"ph-bold ph-dots-three\" customClass=\"text-base text-text-secondary\"></sula-icon>\n </button>,\n );\n }\n\n visible.forEach(ancestor => {\n crumbs.push(\n <button\n key={ancestor.id}\n type=\"button\"\n class=\"crumb-btn\"\n title={ancestor.label}\n onClick={() => this.goToDepth(this.stack.indexOf(ancestor))}\n >\n {ancestor.label}\n </button>,\n );\n });\n\n const nodes: JSX.Element[] = [];\n crumbs.forEach((crumb, index) => {\n if (index > 0) nodes.push(<sula-icon key={`sep-${index}`} icon=\"ph ph-caret-right\" customClass=\"crumb-sep text-xs\"></sula-icon>);\n nodes.push(crumb);\n });\n\n return (\n <nav class=\"crumb-trail flex min-w-0 items-center\" aria-label=\"Caminho de navegação\">\n {nodes}\n </nav>\n );\n }\n\n private renderCrumbDropdown(ancestors: SulaWorkbenchMenuItem[]) {\n if (!this.crumbMenu.open || ancestors.length <= 2) return null;\n const hidden = ancestors.slice(0, -2);\n\n return (\n <div\n class=\"crumb-dropdown\"\n role=\"menu\"\n ref={el => (this.crumbDropdownEl = el)}\n style={{ left: `${this.crumbMenu.left}px`, top: `${this.crumbMenu.top}px` }}\n >\n {hidden.map(ancestor => (\n <button\n key={ancestor.id}\n type=\"button\"\n role=\"menuitem\"\n class=\"crumb-dropdown-item\"\n onClick={() => this.goToDepth(this.stack.indexOf(ancestor))}\n >\n <span class=\"item-icon flex flex-none items-center justify-center\">{this.renderItemIcon(ancestor, 'text-sm text-icon-primary', 'sm')}</span>\n <span class=\"truncate\">{ancestor.label}</span>\n </button>\n ))}\n </div>\n );\n }\n\n private renderDrillHeader(activeParent: SulaWorkbenchMenuItem) {\n const ancestors = this.stack.slice(0, -1);\n const backLabel = ancestors.length ? ancestors[ancestors.length - 1].label : this.menuTitle || 'Início';\n const backButton = (\n <button\n type=\"button\"\n class=\"back-btn\"\n title={`Voltar para ${backLabel}`}\n aria-label={`Voltar para ${backLabel}`}\n onClick={() => this.goToDepth(this.stack.length - 2)}\n >\n <sula-icon icon=\"ph ph-arrow-left\" customClass=\"text-lg text-icon-primary\"></sula-icon>\n </button>\n );\n\n return (\n <div class=\"menu-header menu-header--drilldown mb-16 flex flex-col border-b border-line-general pb-24\">\n <div class=\"identity-row flex items-center\">\n <button type=\"button\" class=\"identity-strip\" title={`Ir para o início de ${this.menuTitle}`} onClick={() => this.goToDepth(-1)}>\n {this.image && (\n <span class=\"identity-image\">\n <img src={this.image} alt=\"\" />\n </span>\n )}\n <span class=\"identity-label truncate\">{this.menuTitle}</span>\n </button>\n {this.renderCollapseButton()}\n </div>\n\n {ancestors.length > 0 && (\n <div class=\"breadcrumb-row\">\n {backButton}\n {this.renderTrail(ancestors)}\n {this.renderCrumbDropdown(ancestors)}\n </div>\n )}\n\n <div class={{ 'context-row flex items-center min-w-0': true, 'mt-8': ancestors.length > 0 }}>\n {ancestors.length === 0 && backButton}\n {this.hasIcon(activeParent) && (\n <span class=\"context-icon flex flex-none items-center justify-center\">\n {this.renderItemIcon(activeParent, 'text-xl text-brand-primary', 'md')}\n </span>\n )}\n <h1 part=\"title\" class=\"context-title truncate text-xl font-semibold leading-tight text-text-primary\">\n {activeParent.label}\n </h1>\n </div>\n </div>\n );\n }\n\n private renderDrillRow(item: SulaWorkbenchMenuItem, reserve: boolean) {\n const branch = this.hasVisibleChildren(item);\n const active = this.isActive(item, branch);\n const faded = this.isFaded(item, active);\n\n return (\n <li class=\"list-none\" key={item.id}>\n <div\n class={{\n 'menu-item flex items-center justify-between rounded-xs px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled && !active,\n 'cursor-pointer': !item.disabled && active,\n 'cursor-not-allowed': !!item.disabled,\n }}\n aria-disabled={!!item.disabled}\n onClick={() => this.handleRowClick(item, this.stack.length + 1)}\n >\n <span class=\"flex min-w-0 flex-1 items-center gap-8\">\n {this.renderIconSlot(item, this.getIconClass(active, faded, 'text-base'), faded, reserve)}\n <span\n part=\"item-label\"\n class={{\n 'menu-item-label truncate': this.labelOverflow !== SulaMenuLabelOverflow.Wrap,\n 'menu-item-label menu-item-label--wrap': this.labelOverflow === SulaMenuLabelOverflow.Wrap,\n 'font-bold text-text-primary': active,\n 'text-text-disabled': faded,\n 'text-text-secondary': !active && !faded,\n }}\n >\n {item.label}\n </span>\n </span>\n {branch && <sula-icon icon=\"ph ph-caret-right\" customClass={faded ? 'text-text-disabled text-xs' : 'text-text-secondary text-xs'}></sula-icon>}\n </div>\n </li>\n );\n }\n\n private renderDrillPanel() {\n const activeParent = this.stack[this.stack.length - 1];\n const panelKey = this.stack.map(item => item.id).join('/');\n\n return (\n <ul\n key={panelKey}\n class={{\n 'menu-panel flex flex-col': true,\n 'menu-panel--forward': this.direction === 'forward',\n 'menu-panel--back': this.direction === 'back',\n }}\n >\n {this.getVisibleItems(activeParent.children).map(item => this.renderDrillRow(item, this.siblingsHaveIcon(activeParent.children)))}\n </ul>\n );\n }\n\n private getMainIconClass(active: boolean, faded: boolean) {\n if (faded) return 'text-icon-disabled text-base';\n if (active) return 'text-brand-primary text-base';\n return 'text-icon-primary text-base';\n }\n\n private getMainCaretClass(active: boolean, faded: boolean) {\n if (faded) return 'text-text-disabled text-xs';\n if (active) return 'text-text-primary text-xs';\n return 'text-text-secondary text-xs';\n }\n\n private getSubIconClass(faded: boolean, selected = false) {\n if (faded) return 'text-icon-disabled text-base';\n if (selected) return 'text-brand-primary text-base';\n return 'text-icon-primary text-base';\n }\n\n private getSubCaretClass(faded: boolean) {\n return faded ? 'text-icon-disabled text-xs' : 'text-icon-primary text-xs';\n }\n\n private siblingsHaveIcon(items: SulaWorkbenchMenuItem[]) {\n return this.getVisibleItems(items).some(sibling => this.hasIcon(sibling));\n }\n\n private renderIconSlot(item: SulaWorkbenchMenuItem, customClass: string, faded: boolean, reserve = true) {\n if (!reserve && !this.hasIcon(item)) return null;\n return <span class=\"item-icon flex flex-none items-center justify-center\">{this.renderItemIcon(item, customClass, 'lg', faded)}</span>;\n }\n\n private renderMainRow(item: SulaWorkbenchMenuItem, expandedView: boolean, branch: boolean, expanded: boolean, active: boolean, faded: boolean, reserve: boolean) {\n const labelOverflowTruncate = this.labelOverflow === SulaMenuLabelOverflow.Truncate;\n return (\n <div\n class={{\n 'menu-item flex items-center rounded-xs px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled,\n 'cursor-not-allowed': !!item.disabled,\n 'justify-between': expandedView,\n 'justify-center': !expandedView,\n }}\n title={!expandedView ? item.label : undefined}\n aria-disabled={!!item.disabled}\n onClick={() => this.handleRowClick(item, 1)}\n >\n <div class={{ 'flex items-center': true, 'flex-1 min-w-0 gap-8': expandedView, 'justify-center': !expandedView }}>\n {this.renderIconSlot(item, this.getMainIconClass(active, faded), faded, reserve)}\n <span\n part=\"main-item-label\"\n title={expandedView ? item.label : undefined}\n aria-hidden={!expandedView}\n class={{\n 'menu-item-label menu-copy': true,\n 'menu-item-label--truncate': labelOverflowTruncate,\n 'menu-item-label--wrap': !labelOverflowTruncate,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n 'font-bold text-text-primary': active,\n 'text-text-disabled': faded,\n 'text-text-secondary': !active && !faded,\n }}\n >\n {item.label}\n </span>\n </div>\n {branch && (\n <sula-icon\n aria-hidden={!expandedView}\n class={{\n 'menu-item-caret flex items-center justify-center': true,\n 'menu-item-caret--expanded': expanded,\n 'menu-item-caret--visible': expandedView,\n 'menu-item-caret--hidden': !expandedView,\n }}\n icon=\"ph ph-caret-down\"\n customClass={this.getMainCaretClass(active, faded)}\n ></sula-icon>\n )}\n </div>\n );\n }\n\n private renderSubRow(item: SulaWorkbenchMenuItem, expandedView: boolean, branch: boolean, expanded: boolean, active: boolean, faded: boolean, drill: boolean, reserve: boolean) {\n const caretIcon = drill ? 'ph-bold ph-caret-right' : `ph-bold ph-caret-${expanded && expandedView ? 'up' : 'down'}`;\n const onClick = () => this.handleRowClick(item, this.depthOf(item));\n const rowClass = {\n 'submenu-item flex min-w-0 items-center rounded-xs py-8 pr-8 select-none': true,\n 'submenu-item--branch w-full': branch,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled,\n 'cursor-not-allowed': !!item.disabled,\n 'font-bold': active && branch,\n };\n const label = (\n <span\n class={{\n 'submenu-item-label min-w-0 flex-1': true,\n 'ml-8': reserve || this.hasIcon(item),\n 'menu-item-label--truncate': this.labelOverflow === SulaMenuLabelOverflow.Truncate,\n 'menu-item-label--wrap': this.labelOverflow !== SulaMenuLabelOverflow.Truncate,\n 'text-text-primary': !faded,\n 'text-text-disabled': faded,\n 'font-bold': active,\n }}\n >\n {item.label}\n </span>\n );\n\n if (!branch) {\n return (\n <a class={rowClass} style={{ paddingLeft: '8px' }} title={item.label} aria-disabled={!!item.disabled} onClick={onClick}>\n {this.renderIconSlot(item, this.getSubIconClass(faded, active && !branch), faded, reserve)}\n {label}\n </a>\n );\n }\n\n return (\n <a class={rowClass} style={{ paddingLeft: '8px' }} title={item.label} aria-disabled={!!item.disabled} onClick={onClick}>\n <div class=\"submenu-item-branch-content flex min-w-0 flex-1 items-center\">\n {this.renderIconSlot(item, this.getSubIconClass(faded, active && !branch), faded, reserve)}\n {label}\n </div>\n <div class=\"submenu-item-branch-caret flex flex-none items-center justify-end pl-8\">\n <sula-icon icon={caretIcon} customClass={this.getSubCaretClass(faded)}></sula-icon>\n </div>\n </a>\n );\n }\n\n private depthOf(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id);\n return path ? path.length : 1;\n }\n\n private renderInlineList(items: SulaWorkbenchMenuItem[], depth: number, expandedView: boolean) {\n const reserve = this.siblingsHaveIcon(items);\n return this.getVisibleItems(items).map(item => {\n const branch = this.hasVisibleChildren(item);\n const drill = branch && depth >= this.drilldownLevel;\n const inline = branch && !drill;\n const expanded = inline && !!item.expanded;\n const active = this.isActive(item, branch) || expanded;\n const faded = this.isFaded(item, active);\n\n const row =\n depth === 1\n ? this.renderMainRow(item, expandedView, branch, expanded, active, faded, reserve)\n : this.renderSubRow(item, expandedView, branch, expanded, active, faded, drill, reserve);\n\n return (\n <li class={{ 'decoration-none list-none': true, 'menu-group': depth === 1, 'is-selected': depth > 1 && active && !branch }} key={item.id}>\n {row}\n {inline && (\n <ul\n aria-hidden={!expandedView || !expanded}\n class={{\n submenu: true,\n 'submenu--expanded': expandedView && expanded,\n 'ml-[8px] border-l border-line-general pl-8': depth === 1,\n 'submenu-branch ml-[24px] border-l border-line-general pl-8': depth > 1,\n }}\n >\n {this.renderInlineList(item.children, depth + 1, expandedView)}\n </ul>\n )}\n </li>\n );\n });\n }\n\n render() {\n const expandedView = !this.collapsed || this.previewExpanded;\n const drilled = expandedView && this.isDrilled();\n const activeParent = this.stack[this.stack.length - 1];\n\n return (\n <Host\n class={{\n 'menu-host--collapsed': this.collapsed,\n 'menu-host--preview': this.collapsed && this.previewExpanded,\n 'menu-host--density-compact': this.density === SulaMenuDensity.Compact,\n 'menu-host--density-comfortable': this.density === SulaMenuDensity.Comfortable,\n }}\n style={this.hostStyleVariables}\n onMouseEnter={() => this.handleMenuMouseEnter()}\n onMouseLeave={() => this.handleMenuMouseLeave()}\n >\n <aside\n part=\"shell\"\n ref={el => (this.shellEl = el)}\n class={{\n 'menu-shell flex h-full flex-col bg-surface-body shadow-md z-50': true,\n 'menu-shell--collapsed': this.collapsed && !this.previewExpanded,\n 'menu-shell--expanded': expandedView,\n 'menu-shell--preview': this.collapsed && this.previewExpanded,\n }}\n >\n {drilled ? this.renderDrillHeader(activeParent) : this.renderRootHeader(expandedView)}\n\n <nav\n class={{\n 'menu-nav flex h-full flex-col overflow-y-auto overflow-x-hidden': true,\n 'px-12': !expandedView,\n }}\n >\n {drilled ? (\n this.renderDrillPanel()\n ) : (\n <ul class=\"flex flex-col\">{this.renderInlineList(this.items, 1, expandedView)}</ul>\n )}\n </nav>\n\n {this.user && (\n <div class=\"menu-footer border-t border-line-general pt-12\">\n {this.renderUserInfo(expandedView)}\n </div>\n )}\n </aside>\n\n {this.user && this.renderProfilePopover(expandedView)}\n </Host>\n );\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ var patchBrowser = () => {
|
|
|
16
16
|
|
|
17
17
|
patchBrowser().then(async (options) => {
|
|
18
18
|
await globalScripts();
|
|
19
|
-
return bootstrapLazy([["sula-avatar_32",[[1,"sula-icon-picker",{"label":[1025],"required":[1028],"disabled":[1028],"error":[1025],"value":[1025],"showSearch":[4,"show-search"],"searchPlaceholder":[1,"search-placeholder"],"icons":[1040],"maxVisibleIcons":[2,"max-visible-icons"],"menuMaxHeight":[2,"menu-max-height"],"selectedIcon":[32],"searchTerm":[32]},null,{"value":["handleValueChange"],"icons":["handleIconsChange"]}],[1,"sula-modal",{"opened":[1028],"blockBodyScroll":[1028,"block-body-scroll"],"closeOnClickOutside":[1028,"close-on-click-outside"],"type":[1],"headerIcon":[1,"header-icon"],"modalTitle":[1,"modal-title"],"promoImage":[1,"promo-image"],"subTitle":[1,"sub-title"],"primaryButtonText":[1,"primary-button-text"],"secondaryButtonText":[1,"secondary-button-text"],"slotOverflow":[1,"slot-overflow"],"isAnimating":[32],"shouldRender":[32]},null,{"opened":["handleOpenedChange"]}],[1,"sula-calendar",{"label":[1],"value":[1025],"placeholder":[1],"disabled":[4],"helpText":[1,"help-text"],"status":[1],"locale":[1],"minDate":[1,"min-date"],"maxDate":[1,"max-date"],"range":[4],"allowTyping":[4,"allow-typing"],"inline":[4],"compact":[4],"firstDayOfWeek":[2,"first-day-of-week"],"closeOnSelect":[4,"close-on-select"],"showCalendar":[32],"openUpward":[32],"viewMonth":[32],"viewYear":[32],"hoverDate":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"value":["handleValueChange"]}],[1,"sula-chip",{"text":[1025],"appearance":[1025],"disabled":[1028],"icon":[1],"items":[1040],"itemsPlacement":[1025,"items-placement"],"selected":[1028],"isFocused":[32],"showItems":[32]},[[4,"click","handleDocumentClick"]]],[1,"sula-avatar",{"size":[1],"imageUrl":[1,"image-url"],"text":[1],"icon":[1]}],[1,"sula-badge",{"status":[1025],"size":[1025],"type":[1025],"text":[1025],"icon":[1025],"hasSlotContent":[32]}],[1,"sula-breadcrumb",{"items":[1040]}],[1,"sula-checkbox",{"type":[1025],"label":[1025],"subTitle":[1025,"sub-title"],"disabled":[1028],"checked":[1028],"isFocus":[32]}],[1,"sula-menu",{"menuTitle":[1,"menu-title"],"image":[1],"width":[1],"density":[1],"labelOverflow":[1,"label-overflow"],"items":[1040],"collapsed":[32],"previewExpanded":[32],"selectedItem":[32]},null,{"items":["syncSelectedItemFromItems"]}],[1,"sula-progress-bar",{"appearance":[1025],"state":[1025],"topLabel":[1025,"top-label"],"bottomLabel":[1025,"bottom-label"],"progress":[1026],"showProgress":[1028,"show-progress"]},null,{"progress":["validateProgress"]}],[1,"sula-segmented-control",{"items":[1040],"type":[1025],"size":[1025],"color":[1025]}],[1,"sula-tag",{"label":[1025],"icon":[1025],"iconStatus":[1025,"icon-status"],"size":[1025],"appearance":[1025],"fontWeight":[1025,"font-weight"]}],[1,"sula-tiles",{"type":[1],"size":[1],"ellipsis":[4],"icon":[1],"text":[1],"subText":[1,"sub-text"],"disabled":[4]}],[1,"sula-timeline-list",{"sulaTimelineList":[1040,"sula-timeline-list"]}],[1,"sula-toggle",{"selected":[1028],"buttonDisabled":[1028,"button-disabled"],"icon":[1]}],[1,"sula-tooltip",{"text":[1],"position":[1],"icon":[1],"iconClass":[1,"icon-class"],"focused":[4],"trigger":[1],"appendToBody":[4,"append-to-body"],"isVisible":[32]},null,{"text":["handleTextChange"]}],[1,"sula-radio-button",{"checked":[1028],"label":[1025],"disabled":[1028],"radioIsFocus":[32]}],[
|
|
19
|
+
return bootstrapLazy([["sula-avatar_32",[[1,"sula-icon-picker",{"label":[1025],"required":[1028],"disabled":[1028],"error":[1025],"value":[1025],"showSearch":[4,"show-search"],"searchPlaceholder":[1,"search-placeholder"],"icons":[1040],"maxVisibleIcons":[2,"max-visible-icons"],"menuMaxHeight":[2,"menu-max-height"],"selectedIcon":[32],"searchTerm":[32]},null,{"value":["handleValueChange"],"icons":["handleIconsChange"]}],[1,"sula-modal",{"opened":[1028],"blockBodyScroll":[1028,"block-body-scroll"],"closeOnClickOutside":[1028,"close-on-click-outside"],"type":[1],"headerIcon":[1,"header-icon"],"modalTitle":[1,"modal-title"],"promoImage":[1,"promo-image"],"subTitle":[1,"sub-title"],"primaryButtonText":[1,"primary-button-text"],"secondaryButtonText":[1,"secondary-button-text"],"slotOverflow":[1,"slot-overflow"],"isAnimating":[32],"shouldRender":[32]},null,{"opened":["handleOpenedChange"]}],[1,"sula-calendar",{"label":[1],"value":[1025],"placeholder":[1],"disabled":[4],"helpText":[1,"help-text"],"status":[1],"locale":[1],"minDate":[1,"min-date"],"maxDate":[1,"max-date"],"range":[4],"allowTyping":[4,"allow-typing"],"inline":[4],"compact":[4],"firstDayOfWeek":[2,"first-day-of-week"],"closeOnSelect":[4,"close-on-select"],"showCalendar":[32],"openUpward":[32],"viewMonth":[32],"viewYear":[32],"hoverDate":[32]},[[4,"click","handleDocumentClick"],[4,"keydown","handleDocumentKeydown"]],{"value":["handleValueChange"]}],[1,"sula-chip",{"text":[1025],"appearance":[1025],"disabled":[1028],"icon":[1],"items":[1040],"itemsPlacement":[1025,"items-placement"],"selected":[1028],"isFocused":[32],"showItems":[32]},[[4,"click","handleDocumentClick"]]],[1,"sula-avatar",{"size":[1],"imageUrl":[1,"image-url"],"text":[1],"icon":[1]}],[1,"sula-badge",{"status":[1025],"size":[1025],"type":[1025],"text":[1025],"icon":[1025],"hasSlotContent":[32]}],[1,"sula-breadcrumb",{"items":[1040]}],[1,"sula-checkbox",{"type":[1025],"label":[1025],"subTitle":[1025,"sub-title"],"disabled":[1028],"checked":[1028],"isFocus":[32]}],[1,"sula-menu",{"menuTitle":[1,"menu-title"],"image":[1],"width":[1],"density":[1],"labelOverflow":[1,"label-overflow"],"items":[1040],"collapsed":[32],"previewExpanded":[32],"selectedItem":[32]},null,{"items":["syncSelectedItemFromItems"]}],[1,"sula-progress-bar",{"appearance":[1025],"state":[1025],"topLabel":[1025,"top-label"],"bottomLabel":[1025,"bottom-label"],"progress":[1026],"showProgress":[1028,"show-progress"]},null,{"progress":["validateProgress"]}],[1,"sula-segmented-control",{"items":[1040],"type":[1025],"size":[1025],"color":[1025]}],[1,"sula-tag",{"label":[1025],"icon":[1025],"iconStatus":[1025,"icon-status"],"size":[1025],"appearance":[1025],"fontWeight":[1025,"font-weight"]}],[1,"sula-tiles",{"type":[1],"size":[1],"ellipsis":[4],"icon":[1],"text":[1],"subText":[1,"sub-text"],"disabled":[4]}],[1,"sula-timeline-list",{"sulaTimelineList":[1040,"sula-timeline-list"]}],[1,"sula-toggle",{"selected":[1028],"buttonDisabled":[1028,"button-disabled"],"icon":[1]}],[1,"sula-tooltip",{"text":[1],"position":[1],"icon":[1],"iconClass":[1,"icon-class"],"focused":[4],"trigger":[1],"appendToBody":[4,"append-to-body"],"isVisible":[32]},null,{"text":["handleTextChange"]}],[1,"sula-radio-button",{"checked":[1028],"label":[1025],"disabled":[1028],"radioIsFocus":[32]}],[4,"sula-table",{"density":[1],"equalWidth":[4,"equal-width"],"fullWidth":[4,"full-width"]}],[4,"sula-table-body"],[4,"sula-table-cell"],[4,"sula-table-head-cell"],[4,"sula-table-header"],[4,"sula-table-row"],[1,"sula-textarea",{"value":[1025],"status":[1025],"label":[1],"placeholder":[1],"disabled":[1028],"helpText":[1,"help-text"],"maxLength":[2,"max-length"],"rows":[2],"isActive":[32],"textValue":[32],"textareaIsFocused":[32],"labelPadding":[32]},[[4,"click","handleClick"]],{"value":["watchValueHandler"]}],[1,"sula-button",{"text":[1025],"icon":[1025],"leftIcon":[1025,"left-icon"],"rightIcon":[1025,"right-icon"],"appearance":[1025],"type":[1025],"size":[1025],"status":[1025],"loading":[1028],"buttonDisabled":[1028,"button-disabled"],"fullWidth":[1028,"full-width"]}],[1,"sula-dropdown",{"label":[1025],"disabled":[1028],"hasError":[1540,"has-error"],"items":[1040],"value":[1040],"searchable":[516],"menuMaxHeight":[2,"menu-max-height"],"contentMaxHeight":[2,"content-max-height"],"customContent":[516,"custom-content"],"closeOnSelect":[4,"close-on-select"],"showContent":[1540,"show-content"],"selectedItem":[32],"isFocused":[32],"searchTerm":[32],"filteredItems":[32],"openUpward":[32]},[[4,"click","handleDocumentClick"],[9,"resize","handleWindowResize"]],{"value":["handleValueChange"],"showContent":["handleShowContentChange"]}],[1,"sula-search-bar",{"value":[1025],"searchBarStyle":[1025,"search-bar-style"],"placeholder":[1025],"leftIcon":[1025,"left-icon"],"rightIcon":[1025,"right-icon"],"isFocused":[32],"textValue":[32]}],[1,"sula-textfield",{"value":[1025],"type":[1],"status":[1025],"label":[1],"placeholder":[1],"disabled":[1028],"readOnly":[4,"read-only"],"helpText":[1,"help-text"],"maxLength":[2,"max-length"],"icon":[1],"maskPattern":[1,"mask-pattern"],"maskPatternSwitchMaxLength":[2,"mask-pattern-switch-max-length"],"inputIsOpen":[32],"textValue":[32],"showPassword":[32],"inputIsFocused":[32]},[[4,"click","handleClick"]],{"value":["watchValueHandler"],"maskPattern":["watchMaskPatternHandler"],"maskPatternSwitchMaxLength":["watchMaskPatternSwitchMaxLengthHandler"]}],[1,"sula-loader",{"size":[1],"animationInstance":[32]}],[1,"sula-switch",{"type":[1025],"active":[1028],"disabled":[1028],"label":[1025],"subTitle":[1025,"sub-title"],"responsive":[4],"isFocus":[32]}],[1,"sula-menu-select-list",{"items":[1040],"fullWidth":[4,"full-width"],"maxHeight":[2,"max-height"],"selectedValue":[16,"selected-value"]}],[0,"sula-icon",{"icon":[1],"customClass":[1,"custom-class"]}]]],["sula-profile-menu",[[1,"sula-profile-menu",{"user":[16],"items":[1040]}]]],["sula-workbench-menu",[[1,"sula-workbench-menu",{"menuTitle":[1,"menu-title"],"image":[1],"width":[1],"density":[1],"labelOverflow":[1,"label-overflow"],"drilldownLevel":[2,"drilldown-level"],"items":[1040],"user":[16],"defaultIcon":[1,"default-icon"],"profileItems":[1040,"profile-items"],"collapsed":[32],"previewExpanded":[32],"stack":[32],"direction":[32],"selectedPath":[32],"crumbMenu":[32],"profileOpen":[32]},[[4,"click","onDocumentClick"],[4,"keydown","onDocumentKeydown"],[9,"resize","onWindowResize"]],{"items":["syncWithItems"]}]]],["sula-toast",[[1,"sula-toast",{"toastTitle":[1,"toast-title"],"message":[1],"type":[1],"icon":[1],"actionText":[1,"action-text"],"closable":[4],"duration":[2],"paused":[4],"animated":[4],"announcement":[1],"closeLabel":[1,"close-label"],"announcedText":[32]},[[4,"visibilitychange","updateTimeout"]],{"toastTitle":["handleContentChange"],"message":["handleContentChange"],"actionText":["handleContentChange"],"duration":["handleContentChange"],"announcement":["updateAnnouncement"],"paused":["updateTimeout"]}]]],["sula-toast-stack",[[1,"sula-toast-stack",{"items":[16],"hovering":[32],"focused":[32],"noHover":[32],"retainingPointerExpansion":[32],"announcements":[32]},null,{"items":["handleItemsChange"]}]]]], options);
|
|
20
20
|
});
|
|
21
21
|
//# sourceMappingURL=webcomponents.js.map
|
|
22
22
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface SulaProfileMenuUser {
|
|
2
|
+
name: string;
|
|
3
|
+
email?: string;
|
|
4
|
+
photo?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface SulaProfileMenuItem {
|
|
7
|
+
id: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
/** Icon font class, for example `ph ph-sign-out` */
|
|
10
|
+
icon?: string;
|
|
11
|
+
/** Renders a switch at the end of the row; `active` holds its state */
|
|
12
|
+
hasSwitch?: boolean;
|
|
13
|
+
active?: boolean;
|
|
14
|
+
/** Renders a separator line instead of a row */
|
|
15
|
+
divider?: boolean;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
hidden?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface SulaProfileMenuSwitchChange {
|
|
20
|
+
item: SulaProfileMenuItem;
|
|
21
|
+
active: boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
+
import { SulaProfileMenuItem, SulaProfileMenuSwitchChange, SulaProfileMenuUser } from './model/sula-profile-menu.model';
|
|
3
|
+
/**
|
|
4
|
+
* Profile card with the logged user and a configurable list of options.
|
|
5
|
+
* It has no positioning of its own: place it inside a popover, dropdown or panel.
|
|
6
|
+
* The component only emits events: what each option does is up to the host application.
|
|
7
|
+
*
|
|
8
|
+
* @slot - Extra content rendered after the options.
|
|
9
|
+
* @part card - Card container.
|
|
10
|
+
* @part name - User name.
|
|
11
|
+
* @part option - Each option row.
|
|
12
|
+
* @part divider - Each separator line.
|
|
13
|
+
*/
|
|
14
|
+
export declare class SulaProfileMenu {
|
|
15
|
+
/**
|
|
16
|
+
* Logged user. Without a photo, the initials are shown.
|
|
17
|
+
*/
|
|
18
|
+
user?: SulaProfileMenuUser;
|
|
19
|
+
/**
|
|
20
|
+
* Options of the list. Use `divider` for a separator and `hasSwitch` + `active` for a toggle row.
|
|
21
|
+
*/
|
|
22
|
+
items: SulaProfileMenuItem[];
|
|
23
|
+
/**
|
|
24
|
+
* Emitted when an option without switch is clicked
|
|
25
|
+
*/
|
|
26
|
+
itemClicked: EventEmitter<SulaProfileMenuItem>;
|
|
27
|
+
/**
|
|
28
|
+
* Emitted when the switch of an option changes
|
|
29
|
+
*/
|
|
30
|
+
switchChanged: EventEmitter<SulaProfileMenuSwitchChange>;
|
|
31
|
+
private handleClick;
|
|
32
|
+
private getInitials;
|
|
33
|
+
private renderItem;
|
|
34
|
+
render(): any;
|
|
35
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
title: string;
|
|
3
|
+
tags: string[];
|
|
4
|
+
argTypes: {
|
|
5
|
+
user: {
|
|
6
|
+
control: string;
|
|
7
|
+
description: string;
|
|
8
|
+
};
|
|
9
|
+
items: {
|
|
10
|
+
control: string;
|
|
11
|
+
description: string;
|
|
12
|
+
};
|
|
13
|
+
itemClicked: {
|
|
14
|
+
action: string;
|
|
15
|
+
description: string;
|
|
16
|
+
};
|
|
17
|
+
switchChanged: {
|
|
18
|
+
action: string;
|
|
19
|
+
description: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
parameters: {
|
|
23
|
+
docs: {
|
|
24
|
+
description: {
|
|
25
|
+
component: string;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export default _default;
|
|
31
|
+
export declare const Default: any;
|
|
32
|
+
export declare const CustomItems: any;
|
|
33
|
+
export declare const WithoutIcons: any;
|
|
34
|
+
export declare const WithExtraContent: any;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface SulaWorkbenchMenuItem {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
icon?: string;
|
|
5
|
+
image?: string;
|
|
6
|
+
hidden?: boolean;
|
|
7
|
+
route?: string;
|
|
8
|
+
expanded?: boolean;
|
|
9
|
+
selected?: boolean;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
children?: SulaWorkbenchMenuItem[];
|
|
12
|
+
}
|
|
13
|
+
export interface SulaWorkbenchMenuUser {
|
|
14
|
+
name: string;
|
|
15
|
+
email?: string;
|
|
16
|
+
photo?: string;
|
|
17
|
+
}
|
|
18
|
+
export type SulaWorkbenchMenuPath = string[];
|
|
19
|
+
export type SulaWorkbenchMenuDirection = 'forward' | 'back';
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
+
import { SulaMenuDensity, SulaMenuLabelOverflow } from '../sula-menu/model/sula-menu.model';
|
|
3
|
+
import { SulaProfileMenuItem, SulaProfileMenuSwitchChange } from '../sula-profile-menu/model/sula-profile-menu.model';
|
|
4
|
+
import { SulaWorkbenchMenuDirection, SulaWorkbenchMenuItem, SulaWorkbenchMenuPath, SulaWorkbenchMenuUser } from './model/sula-workbench-menu.model';
|
|
5
|
+
type CrumbMenuState = {
|
|
6
|
+
open: boolean;
|
|
7
|
+
left: number;
|
|
8
|
+
top: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Navigation menu that combines an inline expandable tree with a drill-down panel.
|
|
12
|
+
* Levels above `drilldownLevel` expand in place, as in `sula-menu`. Items at or below
|
|
13
|
+
* that level with children open a single-level panel with a breadcrumb trail.
|
|
14
|
+
*
|
|
15
|
+
* @part shell - Main visual container of the menu.
|
|
16
|
+
* @part title - Menu title, or the current level title while drilled in.
|
|
17
|
+
* @part main-item-label - Label of each top-level item.
|
|
18
|
+
* @part item-label - Label of each item inside the drill-down panel.
|
|
19
|
+
* @part toggle-label - Label of the collapse/expand control.
|
|
20
|
+
* @slot profile-content - Extra content rendered inside the profile popover.
|
|
21
|
+
* @part profile-popover - Popover opened from the user area.
|
|
22
|
+
* @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 256px.
|
|
23
|
+
* @cssprop --sula-menu-collapsed-width - Width of the collapsed menu. Defaults to 88px.
|
|
24
|
+
*/
|
|
25
|
+
export declare class SulaWorkbenchMenu {
|
|
26
|
+
el: HTMLElement;
|
|
27
|
+
/**
|
|
28
|
+
* Menu title
|
|
29
|
+
*/
|
|
30
|
+
menuTitle: string;
|
|
31
|
+
/**
|
|
32
|
+
* Menu image
|
|
33
|
+
*/
|
|
34
|
+
image: string;
|
|
35
|
+
/**
|
|
36
|
+
* Menu width in expanded state. Use a CSS length that does not depend on the
|
|
37
|
+
* host width, for example: 256px, 20rem or clamp(16rem, 25vw, 24rem).
|
|
38
|
+
*/
|
|
39
|
+
width: string;
|
|
40
|
+
/**
|
|
41
|
+
* Density applied to menu items.
|
|
42
|
+
*/
|
|
43
|
+
density: SulaMenuDensity;
|
|
44
|
+
/**
|
|
45
|
+
* Overflow behavior for item labels.
|
|
46
|
+
*/
|
|
47
|
+
labelOverflow: SulaMenuLabelOverflow;
|
|
48
|
+
/**
|
|
49
|
+
* Depth (1-based) from which items with children open a drill-down panel instead of expanding in place.
|
|
50
|
+
* With the default of 3, the first two levels expand inline and deeper branches drill down.
|
|
51
|
+
*/
|
|
52
|
+
drilldownLevel: number;
|
|
53
|
+
/**
|
|
54
|
+
* Menu items. Each item may use `icon` (icon font class) or `image` (URL or data URI of an image or SVG).
|
|
55
|
+
*/
|
|
56
|
+
items: SulaWorkbenchMenuItem[];
|
|
57
|
+
/**
|
|
58
|
+
* Logged user shown at the bottom of the menu. Without a photo, the initials are shown.
|
|
59
|
+
*/
|
|
60
|
+
user?: SulaWorkbenchMenuUser;
|
|
61
|
+
/**
|
|
62
|
+
* Icon used for items without `icon` or `image`. Use an empty string to show no icon.
|
|
63
|
+
*/
|
|
64
|
+
defaultIcon: string;
|
|
65
|
+
/**
|
|
66
|
+
* Options of the profile popover. Use `divider` for a separator and `hasSwitch` + `active` for a toggle row.
|
|
67
|
+
*/
|
|
68
|
+
profileItems: SulaProfileMenuItem[];
|
|
69
|
+
/**
|
|
70
|
+
* Emitted when a leaf item is selected
|
|
71
|
+
*/
|
|
72
|
+
itemSelected: EventEmitter<SulaWorkbenchMenuItem>;
|
|
73
|
+
/**
|
|
74
|
+
* Emitted when any item is clicked
|
|
75
|
+
*/
|
|
76
|
+
itemClicked: EventEmitter<SulaWorkbenchMenuItem>;
|
|
77
|
+
/**
|
|
78
|
+
* Emitted when the drill-down level changes, with the ids from the root to the level shown (empty at the root)
|
|
79
|
+
*/
|
|
80
|
+
levelChanged: EventEmitter<SulaWorkbenchMenuPath>;
|
|
81
|
+
/**
|
|
82
|
+
* Emitted when the user area is clicked. Call `preventDefault()` to keep the profile popover closed.
|
|
83
|
+
*/
|
|
84
|
+
profileClicked: EventEmitter<SulaWorkbenchMenuUser>;
|
|
85
|
+
/**
|
|
86
|
+
* Emitted when a profile popover option without switch is clicked. The popover closes.
|
|
87
|
+
*/
|
|
88
|
+
profileItemClicked: EventEmitter<SulaProfileMenuItem>;
|
|
89
|
+
/**
|
|
90
|
+
* Emitted when the switch of a profile popover option changes. The popover stays open.
|
|
91
|
+
*/
|
|
92
|
+
profileSwitchChanged: EventEmitter<SulaProfileMenuSwitchChange>;
|
|
93
|
+
/**
|
|
94
|
+
* Emitted when the menu is toggled between collapsed and expanded states
|
|
95
|
+
* True: Menu is expanded
|
|
96
|
+
* False: Menu is collapsed
|
|
97
|
+
*/
|
|
98
|
+
menuToggled: EventEmitter<boolean>;
|
|
99
|
+
collapsed: boolean;
|
|
100
|
+
previewExpanded: boolean;
|
|
101
|
+
stack: SulaWorkbenchMenuItem[];
|
|
102
|
+
direction: SulaWorkbenchMenuDirection;
|
|
103
|
+
selectedPath: SulaWorkbenchMenuPath;
|
|
104
|
+
crumbMenu: CrumbMenuState;
|
|
105
|
+
profileOpen: boolean;
|
|
106
|
+
private crumbEllipsisEl?;
|
|
107
|
+
private crumbDropdownEl?;
|
|
108
|
+
private shellEl?;
|
|
109
|
+
private userInfoEl?;
|
|
110
|
+
private profileEl?;
|
|
111
|
+
private hovering;
|
|
112
|
+
private get normalizedWidth();
|
|
113
|
+
private get hostStyleVariables();
|
|
114
|
+
componentWillLoad(): void;
|
|
115
|
+
syncWithItems(items: SulaWorkbenchMenuItem[]): void;
|
|
116
|
+
componentDidRender(): void;
|
|
117
|
+
onDocumentClick(event: MouseEvent): void;
|
|
118
|
+
onDocumentKeydown(event: KeyboardEvent): void;
|
|
119
|
+
onWindowResize(): void;
|
|
120
|
+
private getVisibleItems;
|
|
121
|
+
private hasVisibleChildren;
|
|
122
|
+
private isDrilled;
|
|
123
|
+
private findSelectedIds;
|
|
124
|
+
private isStillSelectable;
|
|
125
|
+
private toggleExpanded;
|
|
126
|
+
private findPath;
|
|
127
|
+
private rebuildStack;
|
|
128
|
+
private isActive;
|
|
129
|
+
private isFaded;
|
|
130
|
+
private emitLevel;
|
|
131
|
+
private toggleInline;
|
|
132
|
+
private enterDrill;
|
|
133
|
+
private markSelected;
|
|
134
|
+
private selectItem;
|
|
135
|
+
private handleRowClick;
|
|
136
|
+
private goToDepth;
|
|
137
|
+
private toggleCrumbMenu;
|
|
138
|
+
private closeCrumbMenu;
|
|
139
|
+
private toggleMenu;
|
|
140
|
+
private handleMenuMouseEnter;
|
|
141
|
+
private handleMenuMouseLeave;
|
|
142
|
+
private toggleProfile;
|
|
143
|
+
private closeProfile;
|
|
144
|
+
private positionProfile;
|
|
145
|
+
private handleProfileItemClicked;
|
|
146
|
+
private handleProfileSwitchChanged;
|
|
147
|
+
private renderProfilePopover;
|
|
148
|
+
private isValidIcon;
|
|
149
|
+
private isSvg;
|
|
150
|
+
private iconOf;
|
|
151
|
+
private hasIcon;
|
|
152
|
+
private renderItemIcon;
|
|
153
|
+
private getInitials;
|
|
154
|
+
private renderUserInfo;
|
|
155
|
+
private getIconClass;
|
|
156
|
+
private renderCollapseButton;
|
|
157
|
+
private renderRootHeader;
|
|
158
|
+
private renderTrail;
|
|
159
|
+
private renderCrumbDropdown;
|
|
160
|
+
private renderDrillHeader;
|
|
161
|
+
private renderDrillRow;
|
|
162
|
+
private renderDrillPanel;
|
|
163
|
+
private getMainIconClass;
|
|
164
|
+
private getMainCaretClass;
|
|
165
|
+
private getSubIconClass;
|
|
166
|
+
private getSubCaretClass;
|
|
167
|
+
private siblingsHaveIcon;
|
|
168
|
+
private renderIconSlot;
|
|
169
|
+
private renderMainRow;
|
|
170
|
+
private renderSubRow;
|
|
171
|
+
private depthOf;
|
|
172
|
+
private renderInlineList;
|
|
173
|
+
render(): any;
|
|
174
|
+
}
|
|
175
|
+
export {};
|