@sula-tech/webcomponents 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/sula-avatar_32.cjs.entry.js +83 -67
  3. package/dist/cjs/sula-avatar_32.cjs.entry.js.map +1 -1
  4. package/dist/cjs/sula-profile-menu.cjs.entry.js +1 -1
  5. package/dist/cjs/sula-profile-menu.cjs.entry.js.map +1 -1
  6. package/dist/cjs/sula-profile-menu.entry.cjs.js.map +1 -1
  7. package/dist/cjs/sula-toast-stack.cjs.entry.js +4 -4
  8. package/dist/cjs/sula-toast.cjs.entry.js +2 -2
  9. package/dist/cjs/sula-workbench-menu.cjs.entry.js +98 -59
  10. package/dist/cjs/sula-workbench-menu.cjs.entry.js.map +1 -1
  11. package/dist/cjs/sula-workbench-menu.entry.cjs.js.map +1 -1
  12. package/dist/cjs/webcomponents.cjs.js +1 -1
  13. package/dist/collection/components/sula-chip/sula-chip.css +1 -1
  14. package/dist/collection/components/sula-chip/sula-chip.js +50 -10
  15. package/dist/collection/components/sula-chip/sula-chip.js.map +1 -1
  16. package/dist/collection/components/sula-chip/sula-chip.stories.js +39 -0
  17. package/dist/collection/components/sula-chip/sula-chip.stories.js.map +1 -1
  18. package/dist/collection/components/sula-dropdown/sula-dropdown.js +3 -3
  19. package/dist/collection/components/sula-icon/sula-icon.css +1 -1
  20. package/dist/collection/components/sula-icon/sula-icon.js +1 -1
  21. package/dist/collection/components/sula-icon-picker/sula-icon-picker.js +2 -2
  22. package/dist/collection/components/sula-loader/sula-loader.css +1 -1
  23. package/dist/collection/components/sula-loader/sula-loader.js +1 -1
  24. package/dist/collection/components/sula-menu/sula-menu.js +8 -8
  25. package/dist/collection/components/sula-menu-select-list/sula-menu-select-list.css +1 -1
  26. package/dist/collection/components/sula-menu-select-list/sula-menu-select-list.js +1 -1
  27. package/dist/collection/components/sula-profile-menu/sula-profile-menu.css +1 -1
  28. package/dist/collection/components/sula-progress-bar/sula-progress-bar.js +2 -2
  29. package/dist/collection/components/sula-radio-button/sula-radio-button.js +2 -2
  30. package/dist/collection/components/sula-search-bar/sula-search-bar.js +2 -2
  31. package/dist/collection/components/sula-segmented-control/sula-segmented-control.js +1 -1
  32. package/dist/collection/components/sula-switch/sula-switch.css +1 -1
  33. package/dist/collection/components/sula-switch/sula-switch.js +4 -4
  34. package/dist/collection/components/sula-table/sula-table.js +3 -3
  35. package/dist/collection/components/sula-table-body/sula-table-body.js +1 -1
  36. package/dist/collection/components/sula-table-cell/sula-table-cell.js +2 -2
  37. package/dist/collection/components/sula-table-head-cell/sula-table-head-cell.js +2 -2
  38. package/dist/collection/components/sula-table-header/sula-table-header.js +1 -1
  39. package/dist/collection/components/sula-table-row/sula-table-row.js +1 -1
  40. package/dist/collection/components/sula-tag/sula-tag.js +3 -3
  41. package/dist/collection/components/sula-textarea/sula-textarea.js +6 -6
  42. package/dist/collection/components/sula-textfield/sula-textfield.js +2 -2
  43. package/dist/collection/components/sula-tiles/sula-tiles.js +1 -1
  44. package/dist/collection/components/sula-timeline-list/sula-timeline-list.js +1 -1
  45. package/dist/collection/components/sula-toast/sula-toast.js +2 -2
  46. package/dist/collection/components/sula-toast-stack/sula-toast-stack.js +4 -4
  47. package/dist/collection/components/sula-toggle/sula-toggle.js +1 -1
  48. package/dist/collection/components/sula-tooltip/sula-tooltip.js +1 -1
  49. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.css +1 -1
  50. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js +104 -84
  51. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js.map +1 -1
  52. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js +182 -103
  53. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js.map +1 -1
  54. package/dist/components/{p-Ckrg2kct.js → p-BNxL-ZjI.js} +5 -5
  55. package/dist/components/{p-Ckrg2kct.js.map → p-BNxL-ZjI.js.map} +1 -1
  56. package/dist/components/{p-BlRYoc3b.js → p-ByuiM_SX.js} +4 -4
  57. package/dist/components/{p-BlRYoc3b.js.map → p-ByuiM_SX.js.map} +1 -1
  58. package/dist/components/{p-DOhCUb27.js → p-CQQX0ZEo.js} +5 -5
  59. package/dist/components/{p-DOhCUb27.js.map → p-CQQX0ZEo.js.map} +1 -1
  60. package/dist/components/{p-DEhN6ZhJ.js → p-CTY6E4Qo.js} +7 -7
  61. package/dist/components/{p-DEhN6ZhJ.js.map → p-CTY6E4Qo.js.map} +1 -1
  62. package/dist/components/{p-CkBDMANF.js → p-CiJSp-1r.js} +5 -5
  63. package/dist/components/{p-CkBDMANF.js.map → p-CiJSp-1r.js.map} +1 -1
  64. package/dist/components/{p-ej3XWtzq.js → p-DImZWpEm.js} +4 -4
  65. package/dist/components/{p-ej3XWtzq.js.map → p-DImZWpEm.js.map} +1 -1
  66. package/dist/components/{p-CNJmyTBM.js → p-DQYdk1Hu.js} +4 -4
  67. package/dist/components/{p-CNJmyTBM.js.map → p-DQYdk1Hu.js.map} +1 -1
  68. package/dist/components/{p-Chv1iPo7.js → p-DcFem7BV.js} +7 -7
  69. package/dist/components/{p-Chv1iPo7.js.map → p-DcFem7BV.js.map} +1 -1
  70. package/dist/components/{p-BSlKsiiN.js → p-DotZeO3E.js} +5 -5
  71. package/dist/components/{p-BSlKsiiN.js.map → p-DotZeO3E.js.map} +1 -1
  72. package/dist/components/{p-CqrWuXvX.js → p-L_u-y6EK.js} +5 -5
  73. package/dist/components/{p-CqrWuXvX.js.map → p-L_u-y6EK.js.map} +1 -1
  74. package/dist/components/sula-avatar.js +1 -1
  75. package/dist/components/sula-badge.js +1 -1
  76. package/dist/components/sula-breadcrumb.js +1 -1
  77. package/dist/components/sula-button.js +1 -1
  78. package/dist/components/sula-calendar.js +2 -2
  79. package/dist/components/sula-checkbox.js +1 -1
  80. package/dist/components/sula-chip.js +40 -15
  81. package/dist/components/sula-chip.js.map +1 -1
  82. package/dist/components/sula-dropdown.js +1 -1
  83. package/dist/components/sula-icon-picker.js +6 -6
  84. package/dist/components/sula-icon.js +1 -1
  85. package/dist/components/sula-loader.js +1 -1
  86. package/dist/components/sula-menu-select-list.js +1 -1
  87. package/dist/components/sula-menu.js +9 -9
  88. package/dist/components/sula-modal.js +3 -3
  89. package/dist/components/sula-profile-menu.js +1 -1
  90. package/dist/components/sula-progress-bar.js +3 -3
  91. package/dist/components/sula-radio-button.js +2 -2
  92. package/dist/components/sula-search-bar.js +1 -1
  93. package/dist/components/sula-segmented-control.js +2 -2
  94. package/dist/components/sula-switch.js +1 -1
  95. package/dist/components/sula-table-body.js +1 -1
  96. package/dist/components/sula-table-cell.js +2 -2
  97. package/dist/components/sula-table-head-cell.js +2 -2
  98. package/dist/components/sula-table-header.js +1 -1
  99. package/dist/components/sula-table-row.js +1 -1
  100. package/dist/components/sula-table.js +3 -3
  101. package/dist/components/sula-tag.js +4 -4
  102. package/dist/components/sula-textarea.js +6 -6
  103. package/dist/components/sula-textfield.js +1 -1
  104. package/dist/components/sula-tiles.js +2 -2
  105. package/dist/components/sula-timeline-list.js +2 -2
  106. package/dist/components/sula-toast-stack.js +6 -6
  107. package/dist/components/sula-toast.js +1 -1
  108. package/dist/components/sula-toggle.js +2 -2
  109. package/dist/components/sula-tooltip.js +2 -2
  110. package/dist/components/sula-workbench-menu.js +102 -63
  111. package/dist/components/sula-workbench-menu.js.map +1 -1
  112. package/dist/esm/loader.js +1 -1
  113. package/dist/esm/sula-avatar_32.entry.js +83 -67
  114. package/dist/esm/sula-avatar_32.entry.js.map +1 -1
  115. package/dist/esm/sula-profile-menu.entry.js +1 -1
  116. package/dist/esm/sula-profile-menu.entry.js.map +1 -1
  117. package/dist/esm/sula-toast-stack.entry.js +4 -4
  118. package/dist/esm/sula-toast.entry.js +2 -2
  119. package/dist/esm/sula-workbench-menu.entry.js +98 -59
  120. package/dist/esm/sula-workbench-menu.entry.js.map +1 -1
  121. package/dist/esm/webcomponents.js +1 -1
  122. package/dist/types/components/sula-chip/sula-chip.d.ts +5 -0
  123. package/dist/types/components/sula-chip/sula-chip.stories.d.ts +11 -0
  124. package/dist/types/components/sula-workbench-menu/sula-workbench-menu.d.ts +15 -13
  125. package/dist/types/components/sula-workbench-menu/sula-workbench-menu.stories.d.ts +14 -30
  126. package/dist/types/components.d.ts +29 -29
  127. package/dist/webcomponents/{p-18c84807.entry.js → p-4fa0213d.entry.js} +6 -6
  128. package/dist/webcomponents/{p-705e2424.entry.js → p-76884b75.entry.js} +16 -16
  129. package/dist/webcomponents/{p-88e5171a.entry.js → p-7e31b463.entry.js} +2 -2
  130. package/dist/webcomponents/p-86448fcf.entry.js +880 -0
  131. package/dist/webcomponents/p-86448fcf.entry.js.map +1 -0
  132. package/dist/webcomponents/{p-28e25fac.entry.js → p-d8d9b8e6.entry.js} +168 -143
  133. package/dist/webcomponents/p-d8d9b8e6.entry.js.map +1 -0
  134. package/dist/webcomponents/sula-profile-menu.entry.esm.js.map +1 -1
  135. package/dist/webcomponents/sula-workbench-menu.entry.esm.js.map +1 -1
  136. package/dist/webcomponents/webcomponents.esm.js +23 -20
  137. package/package.json +1 -1
  138. package/dist/webcomponents/p-28e25fac.entry.js.map +0 -1
  139. package/dist/webcomponents/p-50ad82d0.entry.js +0 -827
  140. package/dist/webcomponents/p-50ad82d0.entry.js.map +0 -1
  141. /package/dist/webcomponents/{p-18c84807.entry.js.map → p-4fa0213d.entry.js.map} +0 -0
  142. /package/dist/webcomponents/{p-705e2424.entry.js.map → p-76884b75.entry.js.map} +0 -0
  143. /package/dist/webcomponents/{p-88e5171a.entry.js.map → p-7e31b463.entry.js.map} +0 -0
@@ -1 +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 * Controls the drill-down from the host: ids from the root to the item whose children are shown.\n * An empty array shows the tree (leaves the drill-down). Leave it undefined to let only user clicks navigate.\n */\n @Prop()\n drillPath?: string[];\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 if (this.drillPath) this.applyDrillPath(this.drillPath);\n }\n\n @Watch('drillPath')\n syncDrillPath(path?: string[]) {\n if (path) this.applyDrillPath(path);\n }\n\n private applyDrillPath(path: string[]) {\n const next: SulaWorkbenchMenuItem[] = [];\n let level = this.items;\n for (const id of path) {\n const match = this.getVisibleItems(level).find(item => item.id === id);\n if (!match) break;\n next.push(match);\n level = match.children ?? [];\n }\n\n const same = next.length === this.stack.length && next.every((item, index) => item.id === this.stack[index].id);\n if (same) return;\n\n this.direction = next.length < this.stack.length ? 'back' : 'forward';\n this.stack = next;\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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"}
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: 300px;\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.875rem;\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 24px 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 bar over the tree line next to the selected item. The line is the 1px left border of the\n level-2 list, so the 3px bar is centered over it; level 3 shares that line, 20px further left. */\n.submenu > li {\n padding-block: 4px;\n}\n\n.submenu > li.is-selected {\n position: relative;\n}\n\n.submenu > li.is-selected::before {\n content: '';\n position: absolute;\n top: 0;\n bottom: 0;\n left: -14px;\n width: 3px;\n border-radius: 8px;\n background: var(--color-brand-primary, #f05223);\n}\n\n.submenu-branch > li.is-selected::before {\n left: -34px;\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 card 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.user-info--card .user-avatar {\n width: 44px;\n height: 44px;\n}\n\n.user-info--card.user-info--active,\n.user-info--card:hover {\n box-shadow: inset 0 0 0 999px rgba(25, 29, 29, 0.05);\n}\n\n.user-info--card:active {\n box-shadow: inset 0 0 0 999px rgba(25, 29, 29, 0.11);\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: -24px;\n padding-left: 24px;\n padding-right: 18px;\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 gap: 24px;\n margin-bottom: 32px;\n}\n\n.drill-toolbar {\n padding: 0;\n}\n\n.menu-header--drilldown .menu-toggle {\n width: 24px;\n height: 24px;\n margin-left: 0;\n border: none;\n background: transparent;\n}\n\n.back-btn {\n flex: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\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.breadcrumb-row {\n position: relative;\n display: flex;\n align-items: center;\n min-width: 0;\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 box-sizing: border-box;\n min-width: 172px;\n max-width: min(230px, 100%);\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: 24px;\n height: 24px;\n margin-right: 8px;\n}\n\n.context-title {\n min-width: 0;\n font-size: 22px;\n font-weight: 700;\n line-height: 26px;\n display: -webkit-box;\n overflow: hidden;\n overflow-wrap: anywhere;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n}\n\n/* The caret sits on the first text line when a drill label wraps. */\n.menu-panel .menu-item > sula-icon {\n height: var(--sula-menu-main-item-line-height);\n margin-left: 8px;\n align-items: center;\n}\n\n/* ---------- drill-down panel ---------- */\n\n/* The left padding leaves room for the layer strips. */\n.menu-shell--drilled {\n padding-left: 48px;\n}\n\n.menu-shell--drilled .menu-nav {\n margin-left: -48px;\n padding-left: 48px;\n}\n\n.drill-layers {\n position: absolute;\n inset: 0 auto 0 0;\n pointer-events: none;\n}\n\n.drill-layer {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n background: var(--color-surface-body, #fff);\n box-shadow: 0 4px 20px var(--color-line-general, #e5e6e6);\n animation: drill-layer-in 480ms $menu-ease-emphasized;\n}\n\n@keyframes drill-layer-in {\n from {\n opacity: 0;\n transform: translateX(160px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n.menu-panel--forward > li {\n animation: drill-slide-forward 420ms $menu-ease-emphasized both;\n animation-delay: calc(var(--row-index, 0) * 35ms);\n}\n\n.menu-panel--back > li {\n animation: drill-slide-back 420ms $menu-ease-emphasized both;\n animation-delay: calc(var(--row-index, 0) * 35ms);\n}\n\n.menu-header--drilldown {\n animation: drill-header-forward 380ms $menu-ease-emphasized;\n}\n\n.menu-header--drilldown.menu-header--back {\n animation-name: drill-header-back;\n}\n\n@keyframes drill-header-forward {\n from {\n opacity: 0;\n transform: translateX(32px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes drill-header-back {\n from {\n opacity: 0;\n transform: translateX(-32px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n\n@keyframes drill-slide-forward {\n from {\n opacity: 0;\n transform: translateX(56px);\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(-56px);\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-origin {\n position: fixed;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n visibility: hidden;\n pointer-events: none;\n}\n\n.profile-popover {\n position: fixed;\n top: 0;\n left: 0;\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 .drill-layer,\n .menu-panel--forward > li,\n .menu-panel--back > li,\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 expands in place, as in `sula-menu`, while the tree has up to 3 levels.\n * When any visible item reaches a 4th level, every item with children opens a single-level\n * drill-down panel with a breadcrumb trail instead.\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 300px.\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 * Controls the navigation from the host: ids from the root to the item whose children are shown.\n * In drill-down mode an empty array goes back to the root; in inline mode the items on the path are expanded.\n * Leave it undefined to let only user clicks navigate.\n */\n @Prop()\n drillPath?: string[];\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 clickede\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 drillMode: 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 profileOriginEl?: HTMLElement;\n private hovering = false;\n // Inline mode applies a drillPath once, so later collapses by the user are kept.\n private expandedPath?: string[];\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 this.drillMode = this.maxDepth(items) > 3;\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.drillMode ? this.rebuildStack(items, this.stack) : [];\n if (this.drillPath && (this.drillMode || this.drillPath !== this.expandedPath)) this.applyDrillPath(this.drillPath);\n }\n\n @Watch('drillPath')\n syncDrillPath(path?: string[]) {\n if (path) this.applyDrillPath(path);\n }\n\n private applyDrillPath(path: string[]) {\n if (!this.drillMode) {\n this.expandInline(path);\n return;\n }\n\n const next: SulaWorkbenchMenuItem[] = [];\n let level = this.items;\n for (const id of path) {\n const match = this.getVisibleItems(level).find(item => item.id === id);\n if (!match) break;\n next.push(match);\n level = match.children ?? [];\n }\n\n const same = next.length === this.stack.length && next.every((item, index) => item.id === this.stack[index].id);\n if (same) return;\n\n this.direction = next.length < this.stack.length ? 'back' : 'forward';\n this.stack = next;\n }\n\n private expandInline(path: string[]) {\n if (!this.items.length) return;\n this.expandedPath = path;\n\n const ids: string[] = [];\n let level = this.items;\n for (const id of path) {\n const match = this.getVisibleItems(level).find(item => item.id === id);\n if (!match) break;\n if (!match.expanded && this.hasVisibleChildren(match)) ids.push(id);\n level = match.children ?? [];\n }\n\n if (ids.length) this.items = this.markExpanded(this.items, ids);\n }\n\n private markExpanded(items: SulaWorkbenchMenuItem[], ids: string[]): SulaWorkbenchMenuItem[] {\n return items.map(item => ({\n ...item,\n ...(ids.includes(item.id) ? { expanded: true } : {}),\n ...(item.children ? { children: this.markExpanded(item.children, ids) } : {}),\n }));\n }\n\n private maxDepth(items?: SulaWorkbenchMenuItem[]): number {\n const visible = this.getVisibleItems(items);\n if (!visible.length) return 0;\n return 1 + Math.max(...visible.map(item => this.maxDepth(item.children)));\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.drillMode && this.stack.length > 0;\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) {\n if (item.disabled) return;\n\n this.itemClicked.emit(item);\n\n if (this.hasVisibleChildren(item)) {\n if (this.drillMode) {\n this.enterDrill(item);\n } else {\n this.toggleInline(item.id);\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: 0,\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. A transformed ancestor\n // (e.g. the Storybook docs canvas) becomes the containing block, so coordinates are made relative to its origin.\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 origin = this.profileOriginEl?.getBoundingClientRect() ?? { left: 0, top: 0 };\n const style = this.profileEl.style;\n const expandedView = !this.collapsed || this.previewExpanded;\n\n style.width = expandedView ? `${shell.width - inset * 2}px` : '';\n const height = this.profileEl.offsetHeight;\n\n const left = expandedView ? shell.left + inset : shell.right + gap;\n const bottom = expandedView ? anchor.top - gap : anchor.bottom;\n\n style.bottom = 'auto';\n style.left = `${left - origin.left}px`;\n style.top = `${bottom - height - origin.top}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 text-left': true,\n 'user-info--card w-full gap-16 rounded-md bg-surface-on-body p-16': expandedView,\n 'rounded-xs p-8 hover:bg-states-empty-bg-hover': !expandedView,\n 'user-info--active bg-states-empty-bg-hover': this.profileOpen && !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': !expandedView,\n 'flex-1': expandedView,\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-sidebar\" 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 <button key=\"root\" type=\"button\" class=\"crumb-btn\" title={`Ir para o início de ${this.menuTitle}`} onClick={() => this.goToDepth(-1)}>\n {this.menuTitle || 'Início'}\n </button>,\n ];\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=\"min-w-0 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-xl text-icon-primary\"></sula-icon>\n </button>\n );\n\n return (\n <div\n key={this.stack.map(item => item.id).join('/')}\n class={{\n 'menu-header menu-header--drilldown flex flex-col': true,\n 'menu-header--back': this.direction === 'back',\n }}\n >\n <div class=\"drill-toolbar flex items-center justify-between\">\n {backButton}\n {this.renderCollapseButton()}\n </div>\n\n {ancestors.length > 0 && (\n <div class=\"breadcrumb-row\">\n {this.renderTrail(ancestors)}\n {this.renderCrumbDropdown(ancestors)}\n </div>\n )}\n\n <div class=\"context-row flex items-center min-w-0\">\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 text-text-primary\" title={activeParent.label}>\n {activeParent.label}\n </h1>\n </div>\n </div>\n );\n }\n\n private renderDrillRow(item: SulaWorkbenchMenuItem, reserve: boolean, index: number) {\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} style={{ '--row-index': String(Math.min(index, 8)) }}>\n <div\n class={{\n 'menu-item flex items-center justify-between rounded-md px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed': !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)}\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 // Strips on the left edge suggest the levels already navigated; the prototype shows at most two.\n private renderDrillLayers() {\n const count = Math.min(this.stack.length, 2);\n return (\n <div class=\"drill-layers\" aria-hidden=\"true\">\n {Array.from({ length: count }, (_, index) => (\n <span key={index} class=\"drill-layer\" style={{ width: `${12 * (index + 1)}px`, zIndex: String(count - index) }}></span>\n ))}\n </div>\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, index) => this.renderDrillRow(item, this.siblingsHaveIcon(activeParent.children), index))}\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, drill: boolean, reserve: boolean) {\n const labelOverflowTruncate = this.labelOverflow === SulaMenuLabelOverflow.Truncate;\n return (\n <div\n class={{\n 'menu-item flex items-center rounded-md px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed': !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)}\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={drill ? 'ph ph-caret-right' : '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);\n const rowClass = {\n 'submenu-item flex min-w-0 items-center rounded-md py-8 pr-8 select-none': true,\n 'submenu-item--branch w-full': branch,\n 'cursor-pointer hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed': !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 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 && this.drillMode;\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, drill, 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-12': depth === 1,\n 'submenu-branch ml-[20px]': 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 'menu-shell--drilled': drilled,\n }}\n >\n {drilled && this.renderDrillLayers()}\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 pt-12\">\n {this.renderUserInfo(expandedView)}\n </div>\n )}\n </aside>\n\n {this.user && <span class=\"profile-origin\" aria-hidden=\"true\" ref={el => (this.profileOriginEl = el)}></span>}\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"],"modalWidth":[1,"modal-width"],"slotMaxHeight":[1,"slot-max-height"],"slotAutoHeight":[4,"slot-auto-height"],"primaryButtonDisabled":[4,"primary-button-disabled"],"secondaryButtonDisabled":[4,"secondary-button-disabled"],"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"],"drillPath":[16,"drill-path"],"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"],"drillPath":["syncDrillPath"]}]]],["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);
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-chip",{"text":[1025],"appearance":[1025],"disabled":[1028],"icon":[1],"items":[1040],"itemsPlacement":[1025,"items-placement"],"selected":[1028],"loading":[1028],"isFocused":[32],"showItems":[32]},[[4,"click","handleDocumentClick"]],{"loading":["handleLoadingChange"]}],[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"],"modalWidth":[1,"modal-width"],"slotMaxHeight":[1,"slot-max-height"],"slotAutoHeight":[4,"slot-auto-height"],"primaryButtonDisabled":[4,"primary-button-disabled"],"secondaryButtonDisabled":[4,"secondary-button-disabled"],"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-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-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"]}],[1,"sula-loader",{"size":[1],"animationInstance":[32]}],[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"],"drillPath":[16,"drill-path"],"items":[1040],"user":[16],"defaultIcon":[1,"default-icon"],"profileItems":[1040,"profile-items"],"collapsed":[32],"previewExpanded":[32],"drillMode":[32],"stack":[32],"direction":[32],"selectedPath":[32],"crumbMenu":[32],"profileOpen":[32]},[[4,"click","onDocumentClick"],[4,"keydown","onDocumentKeydown"],[9,"resize","onWindowResize"]],{"items":["syncWithItems"],"drillPath":["syncDrillPath"]}]]],["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
 
@@ -31,6 +31,10 @@ export declare class SulaChip {
31
31
  * Chip is selected
32
32
  */
33
33
  selected: boolean;
34
+ /**
35
+ * Chip is loading: keeps the content and shows a loader on the right
36
+ */
37
+ loading: boolean;
34
38
  /**
35
39
  * Event emitted when chip is clicked
36
40
  */
@@ -42,6 +46,7 @@ export declare class SulaChip {
42
46
  isFocused: boolean;
43
47
  showItems: boolean;
44
48
  node?: HTMLElement;
49
+ handleLoadingChange(isLoading: boolean): void;
45
50
  handleDocumentClick(event: Event): void;
46
51
  handleFocus: () => void;
47
52
  handleBlur: () => void;
@@ -38,6 +38,14 @@ declare const _default: {
38
38
  required: boolean;
39
39
  };
40
40
  };
41
+ loading: {
42
+ control: string;
43
+ defaultValue: boolean;
44
+ description: string;
45
+ type: {
46
+ required: boolean;
47
+ };
48
+ };
41
49
  icon: {
42
50
  control: string;
43
51
  description: string;
@@ -94,3 +102,6 @@ export declare const WithIconAndDropdown: any;
94
102
  export declare const SelectedWithIcon: any;
95
103
  export declare const NegativeWithIcon: any;
96
104
  export declare const DisabledWithIcon: any;
105
+ export declare const Loading: any;
106
+ export declare const LoadingWithIcon: any;
107
+ export declare const LoadingWithItems: any;
@@ -8,9 +8,9 @@ type CrumbMenuState = {
8
8
  top: number;
9
9
  };
10
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.
11
+ * Navigation menu that expands in place, as in `sula-menu`, while the tree has up to 3 levels.
12
+ * When any visible item reaches a 4th level, every item with children opens a single-level
13
+ * drill-down panel with a breadcrumb trail instead.
14
14
  *
15
15
  * @part shell - Main visual container of the menu.
16
16
  * @part title - Menu title, or the current level title while drilled in.
@@ -19,7 +19,7 @@ type CrumbMenuState = {
19
19
  * @part toggle-label - Label of the collapse/expand control.
20
20
  * @slot profile-content - Extra content rendered inside the profile popover.
21
21
  * @part profile-popover - Popover opened from the user area.
22
- * @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 256px.
22
+ * @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 300px.
23
23
  * @cssprop --sula-menu-collapsed-width - Width of the collapsed menu. Defaults to 88px.
24
24
  */
25
25
  export declare class SulaWorkbenchMenu {
@@ -46,13 +46,9 @@ export declare class SulaWorkbenchMenu {
46
46
  */
47
47
  labelOverflow: SulaMenuLabelOverflow;
48
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
- * Controls the drill-down from the host: ids from the root to the item whose children are shown.
55
- * An empty array shows the tree (leaves the drill-down). Leave it undefined to let only user clicks navigate.
49
+ * Controls the navigation from the host: ids from the root to the item whose children are shown.
50
+ * In drill-down mode an empty array goes back to the root; in inline mode the items on the path are expanded.
51
+ * Leave it undefined to let only user clicks navigate.
56
52
  */
57
53
  drillPath?: string[];
58
54
  /**
@@ -76,7 +72,7 @@ export declare class SulaWorkbenchMenu {
76
72
  */
77
73
  itemSelected: EventEmitter<SulaWorkbenchMenuItem>;
78
74
  /**
79
- * Emitted when any item is clicked
75
+ * Emitted when any item is clickede
80
76
  */
81
77
  itemClicked: EventEmitter<SulaWorkbenchMenuItem>;
82
78
  /**
@@ -103,6 +99,7 @@ export declare class SulaWorkbenchMenu {
103
99
  menuToggled: EventEmitter<boolean>;
104
100
  collapsed: boolean;
105
101
  previewExpanded: boolean;
102
+ drillMode: boolean;
106
103
  stack: SulaWorkbenchMenuItem[];
107
104
  direction: SulaWorkbenchMenuDirection;
108
105
  selectedPath: SulaWorkbenchMenuPath;
@@ -113,13 +110,18 @@ export declare class SulaWorkbenchMenu {
113
110
  private shellEl?;
114
111
  private userInfoEl?;
115
112
  private profileEl?;
113
+ private profileOriginEl?;
116
114
  private hovering;
115
+ private expandedPath?;
117
116
  private get normalizedWidth();
118
117
  private get hostStyleVariables();
119
118
  componentWillLoad(): void;
120
119
  syncWithItems(items: SulaWorkbenchMenuItem[]): void;
121
120
  syncDrillPath(path?: string[]): void;
122
121
  private applyDrillPath;
122
+ private expandInline;
123
+ private markExpanded;
124
+ private maxDepth;
123
125
  componentDidRender(): void;
124
126
  onDocumentClick(event: MouseEvent): void;
125
127
  onDocumentKeydown(event: KeyboardEvent): void;
@@ -166,6 +168,7 @@ export declare class SulaWorkbenchMenu {
166
168
  private renderCrumbDropdown;
167
169
  private renderDrillHeader;
168
170
  private renderDrillRow;
171
+ private renderDrillLayers;
169
172
  private renderDrillPanel;
170
173
  private getMainIconClass;
171
174
  private getMainCaretClass;
@@ -175,7 +178,6 @@ export declare class SulaWorkbenchMenu {
175
178
  private renderIconSlot;
176
179
  private renderMainRow;
177
180
  private renderSubRow;
178
- private depthOf;
179
181
  private renderInlineList;
180
182
  render(): any;
181
183
  }