@sula-tech/webcomponents 0.24.0 → 0.25.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 (86) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/sula-avatar_32.cjs.entry.js +46 -15
  3. package/dist/cjs/sula-avatar_32.cjs.entry.js.map +1 -1
  4. package/dist/cjs/sula-workbench-menu.cjs.entry.js +29 -5
  5. package/dist/cjs/sula-workbench-menu.cjs.entry.js.map +1 -1
  6. package/dist/cjs/sula-workbench-menu.entry.cjs.js.map +1 -1
  7. package/dist/cjs/webcomponents.cjs.js +1 -1
  8. package/dist/collection/components/sula-button/sula-button.css +1 -1
  9. package/dist/collection/components/sula-icon/sula-icon.css +1 -1
  10. package/dist/collection/components/sula-loader/sula-loader.css +1 -1
  11. package/dist/collection/components/sula-modal/sula-modal.css +1 -1
  12. package/dist/collection/components/sula-modal/sula-modal.js +142 -11
  13. package/dist/collection/components/sula-modal/sula-modal.js.map +1 -1
  14. package/dist/collection/components/sula-modal/sula-modal.stories.js +48 -0
  15. package/dist/collection/components/sula-modal/sula-modal.stories.js.map +1 -1
  16. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js +48 -4
  17. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js.map +1 -1
  18. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js +40 -0
  19. package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js.map +1 -1
  20. package/dist/components/{p-KitH8bea.js → p-BSlKsiiN.js} +3 -3
  21. package/dist/components/{p-KitH8bea.js.map → p-BSlKsiiN.js.map} +1 -1
  22. package/dist/components/{p-BORy1230.js → p-BlRYoc3b.js} +3 -3
  23. package/dist/components/{p-BORy1230.js.map → p-BlRYoc3b.js.map} +1 -1
  24. package/dist/components/{p-DK8hW-Cd.js → p-CNJmyTBM.js} +3 -3
  25. package/dist/components/{p-DK8hW-Cd.js.map → p-CNJmyTBM.js.map} +1 -1
  26. package/dist/components/{p-B_WIoxzn.js → p-Chv1iPo7.js} +4 -4
  27. package/dist/components/{p-B_WIoxzn.js.map → p-Chv1iPo7.js.map} +1 -1
  28. package/dist/components/{p-CGpfhGAG.js → p-CkBDMANF.js} +3 -3
  29. package/dist/components/{p-CGpfhGAG.js.map → p-CkBDMANF.js.map} +1 -1
  30. package/dist/components/{p-CWTfj4TV.js → p-Ckrg2kct.js} +3 -3
  31. package/dist/components/{p-CWTfj4TV.js.map → p-Ckrg2kct.js.map} +1 -1
  32. package/dist/components/{p-GEr9Dmhq.js → p-CqrWuXvX.js} +3 -3
  33. package/dist/components/{p-GEr9Dmhq.js.map → p-CqrWuXvX.js.map} +1 -1
  34. package/dist/components/{p-DwZCdDhF.js → p-DOhCUb27.js} +3 -3
  35. package/dist/components/{p-DwZCdDhF.js.map → p-DOhCUb27.js.map} +1 -1
  36. package/dist/components/{p-BssyNhpP.js → p-ej3XWtzq.js} +5 -5
  37. package/dist/components/{p-BssyNhpP.js.map → p-ej3XWtzq.js.map} +1 -1
  38. package/dist/components/sula-avatar.js +1 -1
  39. package/dist/components/sula-badge.js +1 -1
  40. package/dist/components/sula-breadcrumb.js +1 -1
  41. package/dist/components/sula-button.js +1 -1
  42. package/dist/components/sula-calendar.js +2 -2
  43. package/dist/components/sula-checkbox.js +1 -1
  44. package/dist/components/sula-chip.js +2 -2
  45. package/dist/components/sula-dropdown.js +1 -1
  46. package/dist/components/sula-icon-picker.js +4 -4
  47. package/dist/components/sula-icon.js +1 -1
  48. package/dist/components/sula-loader.js +1 -1
  49. package/dist/components/sula-menu-select-list.js +1 -1
  50. package/dist/components/sula-menu.js +1 -1
  51. package/dist/components/sula-modal.js +51 -15
  52. package/dist/components/sula-modal.js.map +1 -1
  53. package/dist/components/sula-profile-menu.js +1 -1
  54. package/dist/components/sula-progress-bar.js +1 -1
  55. package/dist/components/sula-search-bar.js +1 -1
  56. package/dist/components/sula-segmented-control.js +1 -1
  57. package/dist/components/sula-tag.js +1 -1
  58. package/dist/components/sula-textfield.js +1 -1
  59. package/dist/components/sula-tiles.js +1 -1
  60. package/dist/components/sula-timeline-list.js +1 -1
  61. package/dist/components/sula-toast-stack.js +2 -2
  62. package/dist/components/sula-toast.js +1 -1
  63. package/dist/components/sula-toggle.js +1 -1
  64. package/dist/components/sula-tooltip.js +1 -1
  65. package/dist/components/sula-workbench-menu.js +34 -8
  66. package/dist/components/sula-workbench-menu.js.map +1 -1
  67. package/dist/esm/loader.js +1 -1
  68. package/dist/esm/sula-avatar_32.entry.js +46 -15
  69. package/dist/esm/sula-avatar_32.entry.js.map +1 -1
  70. package/dist/esm/sula-workbench-menu.entry.js +29 -5
  71. package/dist/esm/sula-workbench-menu.entry.js.map +1 -1
  72. package/dist/esm/webcomponents.js +1 -1
  73. package/dist/types/components/sula-modal/sula-modal.d.ts +21 -0
  74. package/dist/types/components/sula-modal/sula-modal.stories.d.ts +22 -0
  75. package/dist/types/components/sula-workbench-menu/sula-workbench-menu.d.ts +7 -0
  76. package/dist/types/components/sula-workbench-menu/sula-workbench-menu.stories.d.ts +23 -0
  77. package/dist/types/components.d.ts +58 -0
  78. package/dist/webcomponents/{p-907588e9.entry.js → p-28e25fac.entry.js} +52 -19
  79. package/dist/webcomponents/p-28e25fac.entry.js.map +1 -0
  80. package/dist/webcomponents/{p-68a6d489.entry.js → p-50ad82d0.entry.js} +26 -6
  81. package/dist/webcomponents/p-50ad82d0.entry.js.map +1 -0
  82. package/dist/webcomponents/sula-workbench-menu.entry.esm.js.map +1 -1
  83. package/dist/webcomponents/webcomponents.esm.js +10 -3
  84. package/package.json +1 -1
  85. package/dist/webcomponents/p-68a6d489.entry.js.map +0 -1
  86. package/dist/webcomponents/p-907588e9.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sula-modal.stories.js","sourceRoot":"","sources":["../../../src/components/sula-modal/sula-modal.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { SulaModalType, SulaModalSlotOverflow } from './model/sula-modal.model';\n\nexport default {\n title: 'Components/sula-modal',\n tags: ['autodocs'],\n argTypes: {\n opened: {\n control: 'boolean',\n description: 'Controla se a modal está aberta',\n },\n type: {\n control: { type: 'select' },\n options: Object.values(SulaModalType),\n },\n modalTitle: {\n control: 'text',\n description: 'Título da modal',\n },\n subTitle: {\n control: 'text',\n description: 'Subtítulo da modal',\n },\n headerIcon: {\n control: 'text',\n description: 'Ícone do header',\n },\n promoImage: {\n control: 'text',\n description: 'URL da imagem promocional (para modal promo)',\n },\n primaryButtonText: {\n control: 'text',\n description: 'Texto do botão primário',\n },\n secondaryButtonText: {\n control: 'text',\n description: 'Texto do botão secundário',\n },\n slotOverflow: {\n control: { type: 'select' },\n options: Object.values(SulaModalSlotOverflow),\n },\n blockBodyScroll: {\n control: 'boolean',\n description: 'Bloqueia o scroll do body',\n },\n closeOnClickOutside: {\n control: 'boolean',\n description: 'Fecha ao clicar fora',\n },\n modalClosed: {\n action: 'modalClosed',\n description: 'Evento emitido ao fechar a modal',\n },\n primaryButtonClicked: {\n action: 'primaryButtonClicked',\n description: 'Evento emitido ao clicar no botão primário',\n },\n secondaryButtonClicked: {\n action: 'secondaryButtonClicked',\n description: 'Evento emitido ao clicar no botão secundário',\n },\n },\n parameters: {\n docs: {\n description: {\n component: `\nO componente **Sula Modal** é utilizado para exibir conteúdos em destaque sobrepostos à interface principal.\n### Características principais:\n - Suporte a diferentes tipos de modal (alerta, custom, promo, side, etc)\n - Título, subtítulo, ícone e imagem promocional\n - Botões primário e secundário\n - Controle de overflow e scroll\n - Eventos de fechamento e clique nos botões\n\t\t\t\t`,\n },\n },\n },\n};\n\nconst Template = args => {\n const container = document.createElement('div');\n container.style.margin = '20px';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.minHeight = '80vh';\n const el = document.createElement('sula-modal');\n\n el.setAttribute('opened', args.opened ? 'true' : 'false');\n el.setAttribute('type', args.type);\n if (args.modalTitle) el.setAttribute('modal-title', args.modalTitle);\n if (args.subTitle) el.setAttribute('sub-title', args.subTitle);\n if (args.headerIcon) el.setAttribute('header-icon', args.headerIcon);\n if (args.promoImage) el.setAttribute('promo-image', args.promoImage);\n if (args.primaryButtonText) el.setAttribute('primary-button-text', args.primaryButtonText);\n if (args.secondaryButtonText) el.setAttribute('secondary-button-text', args.secondaryButtonText);\n el.setAttribute('slot-overflow', args.slotOverflow);\n el.setAttribute('block-body-scroll', args.blockBodyScroll ? 'true' : 'false');\n el.setAttribute('close-on-click-outside', args.closeOnClickOutside ? 'true' : 'false');\n\n el.addEventListener('modalClosed', args.modalClosed);\n el.addEventListener('primaryButtonClicked', args.primaryButtonClicked);\n el.addEventListener('secondaryButtonClicked', args.secondaryButtonClicked);\n\n // Conteúdo customizável para slot\n if (args.slotContent) {\n const slotDiv = document.createElement('div');\n slotDiv.innerHTML = args.slotContent;\n el.appendChild(slotDiv);\n }\n\n container.appendChild(el);\n return container;\n};\n\nexport const Playground = Template.bind({});\nPlayground.args = {\n opened: true,\n type: SulaModalType.Custom,\n modalTitle: 'Título da Modal',\n subTitle: 'Subtítulo explicativo',\n headerIcon: 'ph ph-info',\n primaryButtonText: 'Confirmar',\n secondaryButtonText: 'Cancelar',\n slotOverflow: SulaModalSlotOverflow.Auto,\n blockBodyScroll: true,\n closeOnClickOutside: true,\n slotContent: '<p>Conteúdo customizável da modal.</p>',\n};\nexport const AlertType = Template.bind({});\nAlertType.args = {\n ...Playground.args,\n type: SulaModalType.Alert,\n modalTitle: 'Atenção',\n subTitle: 'Esta é uma modal de alerta.',\n headerIcon: 'ph ph-warning',\n primaryButtonText: 'OK',\n secondaryButtonText: '',\n slotContent: '',\n};\nAlertType.parameters = {\n docs: {\n description: {\n story: 'Modal do tipo alerta, com ícone e botão primário.',\n },\n },\n};\nexport const PromoType = Template.bind({});\nPromoType.args = {\n ...Playground.args,\n type: SulaModalType.Promo,\n promoImage: 'https://picsum.photos/600/800',\n modalTitle: 'Promoção Especial',\n subTitle: 'Aproveite esta oferta!',\n slotContent: '<p>Conteúdo promocional.</p>',\n};\nPromoType.parameters = {\n docs: {\n description: {\n story: 'Modal promocional com imagem e conteúdo customizável.',\n },\n },\n};\nexport const SideType = Template.bind({});\nSideType.args = {\n ...Playground.args,\n type: SulaModalType.Side,\n modalTitle: 'Menu Lateral',\n subTitle: '',\n slotContent: '<ul><li>Item 1</li><li>Item 2</li></ul>',\n};\nSideType.parameters = {\n docs: {\n description: {\n story: 'Modal lateral (side modal) para navegação ou menus.',\n },\n },\n};\n\nexport const ListType = Template.bind({});\nListType.args = {\n ...Playground.args,\n type: SulaModalType.List,\n modalTitle: 'Lista de Itens',\n subTitle: 'Modal para exibir listas.',\n slotContent: '<ol><li>Primeiro item</li><li>Segundo item</li><li>Terceiro item</li></ol>',\n};\nListType.parameters = {\n docs: {\n description: {\n story: 'Modal do tipo lista, ideal para exibir listas de itens.',\n },\n },\n};\n\nexport const CustomFullType = Template.bind({});\nCustomFullType.args = {\n ...Playground.args,\n type: SulaModalType.CustomFull,\n modalTitle: 'Modal Custom Full',\n subTitle: 'Modal customizada em tela cheia.',\n slotContent: '<div style=\"height:300px;display:flex;align-items:center;justify-content:center\"><h2>Conteúdo Full</h2></div>',\n};\nCustomFullType.parameters = {\n docs: {\n description: {\n story: 'Modal customizada ocupando toda a tela.',\n },\n },\n};\n\nexport const SpecialSideType = Template.bind({});\nSpecialSideType.args = {\n ...Playground.args,\n type: SulaModalType.SpecialSide,\n modalTitle: 'Modal Lateral Especial',\n subTitle: 'Modal lateral com layout especial.',\n promoImage: 'https://picsum.photos/1920/1080',\n slotContent: '<div style=\"padding:24px\"><h3>Conteúdo Especial</h3><p>Layout diferenciado para casos especiais.</p></div>',\n};\nSpecialSideType.parameters = {\n docs: {\n description: {\n story: 'Modal lateral especial para layouts diferenciados.',\n },\n },\n};\nexport const WithCustomSlot = Template.bind({});\nWithCustomSlot.args = {\n ...Playground.args,\n type: SulaModalType.Custom,\n slotContent: '<div style=\"padding:16px\"><h3>Slot Customizado</h3><p>Qualquer conteúdo pode ser inserido aqui.</p></div>',\n};\nWithCustomSlot.parameters = {\n docs: {\n description: {\n story: 'Exemplo de modal custom com conteúdo via slot.',\n },\n },\n};\n"]}
1
+ {"version":3,"file":"sula-modal.stories.js","sourceRoot":"","sources":["../../../src/components/sula-modal/sula-modal.stories.tsx"],"names":[],"mappings":"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","sourcesContent":["import { SulaModalType, SulaModalSlotOverflow } from './model/sula-modal.model';\n\nexport default {\n title: 'Components/sula-modal',\n tags: ['autodocs'],\n argTypes: {\n opened: {\n control: 'boolean',\n description: 'Controla se a modal está aberta',\n },\n type: {\n control: { type: 'select' },\n options: Object.values(SulaModalType),\n },\n modalTitle: {\n control: 'text',\n description: 'Título da modal',\n },\n subTitle: {\n control: 'text',\n description: 'Subtítulo da modal',\n },\n headerIcon: {\n control: 'text',\n description: 'Ícone do header',\n },\n promoImage: {\n control: 'text',\n description: 'URL da imagem promocional (para modal promo)',\n },\n primaryButtonText: {\n control: 'text',\n description: 'Texto do botão primário',\n },\n secondaryButtonText: {\n control: 'text',\n description: 'Texto do botão secundário',\n },\n slotOverflow: {\n control: { type: 'select' },\n options: Object.values(SulaModalSlotOverflow),\n },\n modalWidth: {\n control: 'text',\n description: 'Largura da modal em telas md+ (qualquer valor CSS, ex.: 900px). Vazio mantém o padrão do tipo',\n },\n slotAutoHeight: {\n control: 'boolean',\n description: 'A modal cresce conforme o conteúdo, sem scroll no slot; o scroll passa a ser da página/overlay',\n },\n slotMaxHeight: {\n control: 'text',\n description: 'Altura máxima da área do slot (qualquer valor CSS, ex.: 60vh). Vazio mantém o padrão do tipo',\n },\n primaryButtonDisabled: {\n control: 'boolean',\n description: 'Desabilita o botão primário',\n },\n secondaryButtonDisabled: {\n control: 'boolean',\n description: 'Desabilita o botão secundário',\n },\n blockBodyScroll: {\n control: 'boolean',\n description: 'Bloqueia o scroll do body',\n },\n closeOnClickOutside: {\n control: 'boolean',\n description: 'Fecha ao clicar fora',\n },\n modalClosed: {\n action: 'modalClosed',\n description: 'Evento emitido ao fechar a modal',\n },\n primaryButtonClicked: {\n action: 'primaryButtonClicked',\n description: 'Evento emitido ao clicar no botão primário',\n },\n secondaryButtonClicked: {\n action: 'secondaryButtonClicked',\n description: 'Evento emitido ao clicar no botão secundário',\n },\n },\n parameters: {\n docs: {\n description: {\n component: `\nO componente **Sula Modal** é utilizado para exibir conteúdos em destaque sobrepostos à interface principal.\n### Características principais:\n - Suporte a diferentes tipos de modal (alerta, custom, promo, side, etc)\n - Título, subtítulo, ícone e imagem promocional\n - Botões primário e secundário\n - Controle de overflow e scroll\n - Eventos de fechamento e clique nos botões\n\t\t\t\t`,\n },\n },\n },\n};\n\nconst Template = args => {\n const container = document.createElement('div');\n container.style.margin = '20px';\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.minHeight = '80vh';\n const el = document.createElement('sula-modal');\n\n el.setAttribute('opened', args.opened ? 'true' : 'false');\n el.setAttribute('type', args.type);\n if (args.modalTitle) el.setAttribute('modal-title', args.modalTitle);\n if (args.subTitle) el.setAttribute('sub-title', args.subTitle);\n if (args.headerIcon) el.setAttribute('header-icon', args.headerIcon);\n if (args.promoImage) el.setAttribute('promo-image', args.promoImage);\n if (args.primaryButtonText) el.setAttribute('primary-button-text', args.primaryButtonText);\n if (args.secondaryButtonText) el.setAttribute('secondary-button-text', args.secondaryButtonText);\n if (args.modalWidth) el.setAttribute('modal-width', args.modalWidth);\n if (args.slotAutoHeight) el.setAttribute('slot-auto-height', 'true');\n if (args.slotMaxHeight) el.setAttribute('slot-max-height', args.slotMaxHeight);\n if (args.primaryButtonDisabled) el.setAttribute('primary-button-disabled', 'true');\n if (args.secondaryButtonDisabled) el.setAttribute('secondary-button-disabled', 'true');\n el.setAttribute('slot-overflow', args.slotOverflow);\n el.setAttribute('block-body-scroll', args.blockBodyScroll ? 'true' : 'false');\n el.setAttribute('close-on-click-outside', args.closeOnClickOutside ? 'true' : 'false');\n\n el.addEventListener('modalClosed', args.modalClosed);\n el.addEventListener('primaryButtonClicked', args.primaryButtonClicked);\n el.addEventListener('secondaryButtonClicked', args.secondaryButtonClicked);\n\n // Conteúdo customizável para slot\n if (args.slotContent) {\n const slotDiv = document.createElement('div');\n slotDiv.innerHTML = args.slotContent;\n el.appendChild(slotDiv);\n }\n\n container.appendChild(el);\n return container;\n};\n\nexport const Playground = Template.bind({});\nPlayground.args = {\n opened: true,\n type: SulaModalType.Custom,\n modalTitle: 'Título da Modal',\n subTitle: 'Subtítulo explicativo',\n headerIcon: 'ph ph-info',\n primaryButtonText: 'Confirmar',\n secondaryButtonText: 'Cancelar',\n slotOverflow: SulaModalSlotOverflow.Auto,\n blockBodyScroll: true,\n closeOnClickOutside: true,\n slotContent: '<p>Conteúdo customizável da modal.</p>',\n};\nexport const AlertType = Template.bind({});\nAlertType.args = {\n ...Playground.args,\n type: SulaModalType.Alert,\n modalTitle: 'Atenção',\n subTitle: 'Esta é uma modal de alerta.',\n headerIcon: 'ph ph-warning',\n primaryButtonText: 'OK',\n secondaryButtonText: '',\n slotContent: '',\n};\nAlertType.parameters = {\n docs: {\n description: {\n story: 'Modal do tipo alerta, com ícone e botão primário.',\n },\n },\n};\nexport const PromoType = Template.bind({});\nPromoType.args = {\n ...Playground.args,\n type: SulaModalType.Promo,\n promoImage: 'https://picsum.photos/600/800',\n modalTitle: 'Promoção Especial',\n subTitle: 'Aproveite esta oferta!',\n slotContent: '<p>Conteúdo promocional.</p>',\n};\nPromoType.parameters = {\n docs: {\n description: {\n story: 'Modal promocional com imagem e conteúdo customizável.',\n },\n },\n};\nexport const SideType = Template.bind({});\nSideType.args = {\n ...Playground.args,\n type: SulaModalType.Side,\n modalTitle: 'Menu Lateral',\n subTitle: '',\n slotContent: '<ul><li>Item 1</li><li>Item 2</li></ul>',\n};\nSideType.parameters = {\n docs: {\n description: {\n story: 'Modal lateral (side modal) para navegação ou menus.',\n },\n },\n};\n\nexport const ListType = Template.bind({});\nListType.args = {\n ...Playground.args,\n type: SulaModalType.List,\n modalTitle: 'Lista de Itens',\n subTitle: 'Modal para exibir listas.',\n slotContent: '<ol><li>Primeiro item</li><li>Segundo item</li><li>Terceiro item</li></ol>',\n};\nListType.parameters = {\n docs: {\n description: {\n story: 'Modal do tipo lista, ideal para exibir listas de itens.',\n },\n },\n};\n\nexport const CustomFullType = Template.bind({});\nCustomFullType.args = {\n ...Playground.args,\n type: SulaModalType.CustomFull,\n modalTitle: 'Modal Custom Full',\n subTitle: 'Modal customizada em tela cheia.',\n slotContent: '<div style=\"height:300px;display:flex;align-items:center;justify-content:center\"><h2>Conteúdo Full</h2></div>',\n};\nCustomFullType.parameters = {\n docs: {\n description: {\n story: 'Modal customizada ocupando toda a tela.',\n },\n },\n};\n\nexport const SpecialSideType = Template.bind({});\nSpecialSideType.args = {\n ...Playground.args,\n type: SulaModalType.SpecialSide,\n modalTitle: 'Modal Lateral Especial',\n subTitle: 'Modal lateral com layout especial.',\n promoImage: 'https://picsum.photos/1920/1080',\n slotContent: '<div style=\"padding:24px\"><h3>Conteúdo Especial</h3><p>Layout diferenciado para casos especiais.</p></div>',\n};\nSpecialSideType.parameters = {\n docs: {\n description: {\n story: 'Modal lateral especial para layouts diferenciados.',\n },\n },\n};\nexport const WithCustomSlot = Template.bind({});\nWithCustomSlot.args = {\n ...Playground.args,\n type: SulaModalType.Custom,\n slotContent: '<div style=\"padding:16px\"><h3>Slot Customizado</h3><p>Qualquer conteúdo pode ser inserido aqui.</p></div>',\n};\nexport const WithCustomSlotMaxHeight = Template.bind({});\nWithCustomSlotMaxHeight.args = {\n ...Playground.args,\n type: SulaModalType.Custom,\n slotMaxHeight: '60vh',\n modalWidth: '960px',\n primaryButtonText: '',\n secondaryButtonText: '',\n slotContent: `<div style=\"height:480px\">Conteúdo alto com <sula-button text=\"Botão próprio\"></sula-button></div>`,\n};\nWithCustomSlotMaxHeight.parameters = {\n docs: {\n description: {\n story: 'Modal custom com `slot-max-height` e sem botões do componente (sem rodapé vazio).',\n },\n },\n};\n\nWithCustomSlot.parameters = {\n docs: {\n description: {\n story: 'Exemplo de modal custom com conteúdo via slot.',\n },\n },\n};\n\nexport const WithSlotAutoHeight = Template.bind({});\nWithSlotAutoHeight.args = {\n ...Playground.args,\n type: SulaModalType.Custom,\n slotAutoHeight: true,\n modalWidth: '960px',\n slotContent: `<div style=\"height:900px;background:linear-gradient(#f4f4f4,#e5e6e6);display:flex;align-items:flex-start;padding:16px\">Conteúdo alto: a modal cresce sem scroll no slot e, se passar da tela, o scroll é do overlay.</div>`,\n};\nWithSlotAutoHeight.parameters = {\n docs: {\n description: {\n story: 'Modal custom com `slot-auto-height`: sem limite de altura no slot, o scroll passa para o overlay quando o conteúdo excede a viewport.',\n },\n },\n};\n"]}
@@ -84,6 +84,29 @@ export class SulaWorkbenchMenu {
84
84
  this.selectedPath = [];
85
85
  }
86
86
  this.stack = this.rebuildStack(items, this.stack);
87
+ if (this.drillPath)
88
+ this.applyDrillPath(this.drillPath);
89
+ }
90
+ syncDrillPath(path) {
91
+ if (path)
92
+ this.applyDrillPath(path);
93
+ }
94
+ applyDrillPath(path) {
95
+ var _a;
96
+ const next = [];
97
+ let level = this.items;
98
+ for (const id of path) {
99
+ const match = this.getVisibleItems(level).find(item => item.id === id);
100
+ if (!match)
101
+ break;
102
+ next.push(match);
103
+ level = (_a = match.children) !== null && _a !== void 0 ? _a : [];
104
+ }
105
+ const same = next.length === this.stack.length && next.every((item, index) => item.id === this.stack[index].id);
106
+ if (same)
107
+ return;
108
+ this.direction = next.length < this.stack.length ? 'back' : 'forward';
109
+ this.stack = next;
87
110
  }
88
111
  componentDidRender() {
89
112
  this.positionProfile();
@@ -552,20 +575,20 @@ export class SulaWorkbenchMenu {
552
575
  const expandedView = !this.collapsed || this.previewExpanded;
553
576
  const drilled = expandedView && this.isDrilled();
554
577
  const activeParent = this.stack[this.stack.length - 1];
555
- return (h(Host, { key: 'a5cb552fa5c922b9683e610ac82ffb831ccb5176', class: {
578
+ return (h(Host, { key: '12139fb88e9b991a07d0b29689133d6b76b66f5c', class: {
556
579
  'menu-host--collapsed': this.collapsed,
557
580
  'menu-host--preview': this.collapsed && this.previewExpanded,
558
581
  'menu-host--density-compact': this.density === SulaMenuDensity.Compact,
559
582
  'menu-host--density-comfortable': this.density === SulaMenuDensity.Comfortable,
560
- }, style: this.hostStyleVariables, onMouseEnter: () => this.handleMenuMouseEnter(), onMouseLeave: () => this.handleMenuMouseLeave() }, h("aside", { key: '8c016acb4548d7a0f1b5d406499a070c921579e6', part: "shell", ref: el => (this.shellEl = el), class: {
583
+ }, style: this.hostStyleVariables, onMouseEnter: () => this.handleMenuMouseEnter(), onMouseLeave: () => this.handleMenuMouseLeave() }, h("aside", { key: 'db4cb78b76e39572c4700a81c618bde1c6d00002', part: "shell", ref: el => (this.shellEl = el), class: {
561
584
  'menu-shell flex h-full flex-col bg-surface-body shadow-md z-50': true,
562
585
  'menu-shell--collapsed': this.collapsed && !this.previewExpanded,
563
586
  'menu-shell--expanded': expandedView,
564
587
  'menu-shell--preview': this.collapsed && this.previewExpanded,
565
- } }, drilled ? this.renderDrillHeader(activeParent) : this.renderRootHeader(expandedView), h("nav", { key: 'ff2dca54adc4803f67fc3a3f16ff7e884d42e1f6', class: {
588
+ } }, drilled ? this.renderDrillHeader(activeParent) : this.renderRootHeader(expandedView), h("nav", { key: 'cf399fa304cb289804790b729e45c1f5edc72876', class: {
566
589
  'menu-nav flex h-full flex-col overflow-y-auto overflow-x-hidden': true,
567
590
  'px-12': !expandedView,
568
- } }, drilled ? (this.renderDrillPanel()) : (h("ul", { class: "flex flex-col" }, this.renderInlineList(this.items, 1, expandedView)))), this.user && (h("div", { key: '26ef3d34d5a747a3f84b8fcf63d09feba2ff5668', class: "menu-footer border-t border-line-general pt-12" }, this.renderUserInfo(expandedView)))), this.user && this.renderProfilePopover(expandedView)));
591
+ } }, drilled ? (this.renderDrillPanel()) : (h("ul", { class: "flex flex-col" }, this.renderInlineList(this.items, 1, expandedView)))), this.user && (h("div", { key: '64ae669ebe5b7e0ac48e900bdce4b658cfbd91af', class: "menu-footer border-t border-line-general pt-12" }, this.renderUserInfo(expandedView)))), this.user && this.renderProfilePopover(expandedView)));
569
592
  }
570
593
  static get is() { return "sula-workbench-menu"; }
571
594
  static get encapsulation() { return "shadow"; }
@@ -713,6 +736,24 @@ export class SulaWorkbenchMenu {
713
736
  "reflect": false,
714
737
  "defaultValue": "3"
715
738
  },
739
+ "drillPath": {
740
+ "type": "unknown",
741
+ "attribute": "drill-path",
742
+ "mutable": false,
743
+ "complexType": {
744
+ "original": "string[]",
745
+ "resolved": "string[]",
746
+ "references": {}
747
+ },
748
+ "required": false,
749
+ "optional": true,
750
+ "docs": {
751
+ "tags": [],
752
+ "text": "Controls the drill-down from the host: ids from the root to the item whose children are shown.\nAn empty array shows the tree (leaves the drill-down). Leave it undefined to let only user clicks navigate."
753
+ },
754
+ "getter": false,
755
+ "setter": false
756
+ },
716
757
  "items": {
717
758
  "type": "unknown",
718
759
  "attribute": "items",
@@ -969,6 +1010,9 @@ export class SulaWorkbenchMenu {
969
1010
  return [{
970
1011
  "propName": "items",
971
1012
  "methodName": "syncWithItems"
1013
+ }, {
1014
+ "propName": "drillPath",
1015
+ "methodName": "syncDrillPath"
972
1016
  }];
973
1017
  }
974
1018
  static get listeners() {
@@ -1 +1 @@
1
- {"version":3,"file":"sula-workbench-menu.js","sourceRoot":"","sources":["../../../src/components/sula-workbench-menu/sula-workbench-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, JSX, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaMenuDensity, SulaMenuLabelOverflow } from '../sula-menu/model/sula-menu.model';\nimport { SulaProfileMenuItem, SulaProfileMenuSwitchChange } from '../sula-profile-menu/model/sula-profile-menu.model';\nimport { SulaWorkbenchMenuDirection, SulaWorkbenchMenuItem, SulaWorkbenchMenuPath, SulaWorkbenchMenuUser } from './model/sula-workbench-menu.model';\n\ntype CrumbMenuState = { open: boolean; left: number; top: number };\n\n/**\n * Navigation menu that combines an inline expandable tree with a drill-down panel.\n * Levels above `drilldownLevel` expand in place, as in `sula-menu`. Items at or below\n * that level with children open a single-level panel with a breadcrumb trail.\n *\n * @part shell - Main visual container of the menu.\n * @part title - Menu title, or the current level title while drilled in.\n * @part main-item-label - Label of each top-level item.\n * @part item-label - Label of each item inside the drill-down panel.\n * @part toggle-label - Label of the collapse/expand control.\n * @slot profile-content - Extra content rendered inside the profile popover.\n * @part profile-popover - Popover opened from the user area.\n * @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 256px.\n * @cssprop --sula-menu-collapsed-width - Width of the collapsed menu. Defaults to 88px.\n */\n@Component({\n tag: 'sula-workbench-menu',\n styleUrl: 'sula-workbench-menu.scss',\n shadow: true,\n})\nexport class SulaWorkbenchMenu {\n @Element() el: HTMLElement;\n\n /**\n * Menu title\n */\n @Prop()\n menuTitle: string = '';\n\n /**\n * Menu image\n */\n @Prop()\n image: string = '';\n\n /**\n * Menu width in expanded state. Use a CSS length that does not depend on the\n * host width, for example: 256px, 20rem or clamp(16rem, 25vw, 24rem).\n */\n @Prop()\n width: string = '';\n\n /**\n * Density applied to menu items.\n */\n @Prop()\n density: SulaMenuDensity = SulaMenuDensity.Default;\n\n /**\n * Overflow behavior for item labels.\n */\n @Prop()\n labelOverflow: SulaMenuLabelOverflow = SulaMenuLabelOverflow.Wrap;\n\n /**\n * Depth (1-based) from which items with children open a drill-down panel instead of expanding in place.\n * With the default of 3, the first two levels expand inline and deeper branches drill down.\n */\n @Prop()\n drilldownLevel: number = 3;\n\n /**\n * Menu items. Each item may use `icon` (icon font class) or `image` (URL or data URI of an image or SVG).\n */\n @Prop({ mutable: true, reflect: true })\n items: SulaWorkbenchMenuItem[] = [];\n\n /**\n * Logged user shown at the bottom of the menu. Without a photo, the initials are shown.\n */\n @Prop()\n user?: SulaWorkbenchMenuUser;\n\n /**\n * Icon used for items without `icon` or `image`. Use an empty string to show no icon.\n */\n @Prop()\n defaultIcon: string = 'ph ph-dot-outline';\n\n /**\n * Options of the profile popover. Use `divider` for a separator and `hasSwitch` + `active` for a toggle row.\n */\n @Prop({ mutable: true })\n profileItems: SulaProfileMenuItem[] = [];\n\n /**\n * Emitted when a leaf item is selected\n */\n @Event()\n itemSelected: EventEmitter<SulaWorkbenchMenuItem>;\n\n /**\n * Emitted when any item is clicked\n */\n @Event()\n itemClicked: EventEmitter<SulaWorkbenchMenuItem>;\n\n /**\n * Emitted when the drill-down level changes, with the ids from the root to the level shown (empty at the root)\n */\n @Event()\n levelChanged: EventEmitter<SulaWorkbenchMenuPath>;\n\n /**\n * Emitted when the user area is clicked. Call `preventDefault()` to keep the profile popover closed.\n */\n @Event({ cancelable: true })\n profileClicked: EventEmitter<SulaWorkbenchMenuUser>;\n\n /**\n * Emitted when a profile popover option without switch is clicked. The popover closes.\n */\n @Event()\n profileItemClicked: EventEmitter<SulaProfileMenuItem>;\n\n /**\n * Emitted when the switch of a profile popover option changes. The popover stays open.\n */\n @Event()\n profileSwitchChanged: EventEmitter<SulaProfileMenuSwitchChange>;\n\n /**\n * Emitted when the menu is toggled between collapsed and expanded states\n * True: Menu is expanded\n * False: Menu is collapsed\n */\n @Event()\n menuToggled: EventEmitter<boolean>;\n\n @State()\n collapsed: boolean = false;\n\n @State()\n previewExpanded: boolean = false;\n\n @State()\n stack: SulaWorkbenchMenuItem[] = [];\n\n @State()\n direction: SulaWorkbenchMenuDirection = 'forward';\n\n @State()\n selectedPath: SulaWorkbenchMenuPath = [];\n\n @State()\n crumbMenu: CrumbMenuState = { open: false, left: 0, top: 0 };\n\n @State()\n profileOpen: boolean = false;\n\n private crumbEllipsisEl?: HTMLElement;\n private crumbDropdownEl?: HTMLElement;\n private shellEl?: HTMLElement;\n private userInfoEl?: HTMLElement;\n private profileEl?: HTMLElement;\n private hovering = false;\n\n private get normalizedWidth() {\n const value = this.width?.trim();\n return value ? value : undefined;\n }\n\n private get hostStyleVariables() {\n return {\n ...(this.normalizedWidth ? { '--sula-menu-width': this.normalizedWidth } : {}),\n };\n }\n\n componentWillLoad() {\n this.syncWithItems(this.items);\n }\n\n @Watch('items')\n syncWithItems(items: SulaWorkbenchMenuItem[]) {\n const nextSelected = this.findSelectedIds(items);\n if (nextSelected) {\n this.selectedPath = nextSelected;\n } else if (!this.selectedPath.length || !this.isStillSelectable(items, this.selectedPath)) {\n this.selectedPath = [];\n }\n this.stack = this.rebuildStack(items, this.stack);\n }\n\n componentDidRender() {\n this.positionProfile();\n }\n\n @Listen('click', { target: 'document' })\n onDocumentClick(event: MouseEvent) {\n const path = event.composedPath();\n if (this.profileOpen && !path.includes(this.profileEl) && !path.includes(this.userInfoEl)) this.closeProfile();\n if (!this.crumbMenu.open) return;\n if (path.includes(this.crumbEllipsisEl) || path.includes(this.crumbDropdownEl)) return;\n this.closeCrumbMenu();\n }\n\n @Listen('keydown', { target: 'document' })\n onDocumentKeydown(event: KeyboardEvent) {\n if (event.key !== 'Escape') return;\n this.closeCrumbMenu();\n if (this.profileOpen) {\n this.closeProfile();\n this.userInfoEl?.focus();\n }\n }\n\n @Listen('resize', { target: 'window' })\n onWindowResize() {\n this.positionProfile();\n }\n\n private getVisibleItems(items?: SulaWorkbenchMenuItem[]) {\n return items?.filter(item => !item.hidden) ?? [];\n }\n\n private hasVisibleChildren(item: Pick<SulaWorkbenchMenuItem, 'children'>) {\n return this.getVisibleItems(item.children).length > 0;\n }\n\n private isDrilled() {\n return this.stack.length >= this.drilldownLevel;\n }\n\n private findSelectedIds(items: SulaWorkbenchMenuItem[], trail: string[] = []): string[] | undefined {\n for (const item of this.getVisibleItems(items)) {\n if (!this.hasVisibleChildren(item)) {\n if (item.selected) return [...trail, item.id];\n continue;\n }\n const nested = this.findSelectedIds(item.children, [...trail, item.id]);\n if (nested) return nested;\n }\n return undefined;\n }\n\n private isStillSelectable(items: SulaWorkbenchMenuItem[], path: string[]) {\n const found = this.findPath(items, path[path.length - 1]);\n return !!found && !this.hasVisibleChildren(found[found.length - 1]);\n }\n\n private toggleExpanded(items: SulaWorkbenchMenuItem[], id: string): SulaWorkbenchMenuItem[] {\n return items.map(item => {\n if (item.id === id) return { ...item, expanded: !item.expanded };\n if (!item.children) return item;\n return { ...item, children: this.toggleExpanded(item.children, id) };\n });\n }\n\n private findPath(items: SulaWorkbenchMenuItem[], id: string, trail: SulaWorkbenchMenuItem[] = []): SulaWorkbenchMenuItem[] | undefined {\n for (const item of this.getVisibleItems(items)) {\n const next = [...trail, item];\n if (item.id === id) return next;\n const nested = this.findPath(item.children ?? [], id, next);\n if (nested) return nested;\n }\n return undefined;\n }\n\n private rebuildStack(items: SulaWorkbenchMenuItem[], previous: SulaWorkbenchMenuItem[]) {\n const next: SulaWorkbenchMenuItem[] = [];\n let level = items;\n\n for (const ancestor of previous) {\n const match = this.getVisibleItems(level).find(item => item.id === ancestor.id);\n if (!match) break;\n next.push(match);\n level = match.children ?? [];\n }\n\n return next;\n }\n\n private isActive(item: SulaWorkbenchMenuItem, branch: boolean) {\n if (branch) return this.selectedPath.includes(item.id);\n return this.selectedPath.length > 0 && this.selectedPath[this.selectedPath.length - 1] === item.id;\n }\n\n private isFaded(item: SulaWorkbenchMenuItem, active: boolean) {\n return !!item.disabled && !active;\n }\n\n private emitLevel() {\n this.levelChanged.emit(this.stack.map(item => item.id));\n }\n\n private toggleInline(id: string) {\n this.items = this.toggleExpanded(this.items, id);\n }\n\n private enterDrill(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id) ?? [item];\n this.direction = 'forward';\n this.stack = path;\n this.closeCrumbMenu();\n this.emitLevel();\n }\n\n private markSelected(items: SulaWorkbenchMenuItem[], id: string): SulaWorkbenchMenuItem[] {\n return items.map(item => ({\n ...item,\n selected: item.id === id,\n ...(item.children ? { children: this.markSelected(item.children, id) } : {}),\n }));\n }\n\n // Selection lives on the items (like `expanded`), so re-assigning items when a branch is\n // toggled keeps the user's choice instead of falling back to the initially selected item.\n private selectItem(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id) ?? [item];\n this.items = this.markSelected(this.items, item.id);\n this.selectedPath = path.map(p => p.id);\n this.itemSelected.emit(item);\n }\n\n private handleRowClick(item: SulaWorkbenchMenuItem, depth: number) {\n if (item.disabled) return;\n\n this.itemClicked.emit(item);\n\n if (this.hasVisibleChildren(item)) {\n if (depth < this.drilldownLevel) {\n this.toggleInline(item.id);\n } else {\n this.enterDrill(item);\n }\n return;\n }\n\n this.selectItem(item);\n }\n\n private goToDepth(index: number) {\n this.direction = 'back';\n this.stack = index < 0 ? [] : this.stack.slice(0, index + 1);\n this.closeCrumbMenu();\n this.emitLevel();\n }\n\n private toggleCrumbMenu(event: MouseEvent) {\n if (this.crumbMenu.open) {\n this.closeCrumbMenu();\n return;\n }\n const button = event.currentTarget as HTMLElement;\n this.crumbMenu = {\n open: true,\n left: button.offsetLeft,\n top: button.offsetTop + button.offsetHeight + 6,\n };\n }\n\n private closeCrumbMenu() {\n if (this.crumbMenu.open) this.crumbMenu = { ...this.crumbMenu, open: false };\n }\n\n private toggleMenu() {\n this.closeProfile();\n if (this.collapsed) {\n this.collapsed = false;\n this.previewExpanded = false;\n this.menuToggled.emit(true);\n return;\n }\n\n this.collapsed = true;\n this.menuToggled.emit(false);\n this.previewExpanded = false;\n }\n\n private handleMenuMouseEnter() {\n this.hovering = true;\n if (this.collapsed) this.previewExpanded = true;\n }\n\n // While the popover is open the preview stays expanded, so the popover keeps its anchor.\n private handleMenuMouseLeave() {\n this.hovering = false;\n if (this.collapsed && !this.profileOpen) this.previewExpanded = false;\n }\n\n private toggleProfile() {\n if (this.profileOpen) {\n this.closeProfile();\n return;\n }\n if (this.profileClicked.emit(this.user).defaultPrevented) return;\n this.profileOpen = true;\n requestAnimationFrame(() => this.profileEl?.focus());\n }\n\n private closeProfile() {\n if (!this.profileOpen) return;\n this.profileOpen = false;\n if (this.collapsed && !this.hovering) this.previewExpanded = false;\n }\n\n // Fixed position, so ancestors with overflow hidden do not clip the popover.\n private positionProfile() {\n if (!this.profileOpen || !this.profileEl || !this.userInfoEl || !this.shellEl) return;\n const gap = 8;\n const inset = 12;\n const anchor = this.userInfoEl.getBoundingClientRect();\n const shell = this.shellEl.getBoundingClientRect();\n const style = this.profileEl.style;\n\n if (!this.collapsed || this.previewExpanded) {\n style.left = `${shell.left + inset}px`;\n style.width = `${shell.width - inset * 2}px`;\n style.bottom = `${window.innerHeight - anchor.top + gap}px`;\n return;\n }\n\n style.left = `${shell.right + gap}px`;\n style.width = '';\n style.bottom = `${window.innerHeight - anchor.bottom}px`;\n }\n\n // Inner events are composed; stopping them avoids clashing with this menu's own itemClicked.\n private handleProfileItemClicked(event: CustomEvent<SulaProfileMenuItem>) {\n event.stopPropagation();\n this.closeProfile();\n this.profileItemClicked.emit(event.detail);\n }\n\n private handleProfileSwitchChanged(event: CustomEvent<SulaProfileMenuSwitchChange>) {\n event.stopPropagation();\n const { item } = event.detail;\n this.profileItems = this.profileItems.map(current => (current.id === item.id ? item : current));\n this.profileSwitchChanged.emit(event.detail);\n }\n\n private renderProfilePopover(expandedView: boolean) {\n return (\n <div\n part=\"profile-popover\"\n role=\"dialog\"\n aria-label={`Perfil de ${this.user.name}`}\n aria-hidden={String(!this.profileOpen)}\n tabIndex={-1}\n ref={el => (this.profileEl = el)}\n class={{\n 'profile-popover': true,\n 'profile-popover--open': this.profileOpen,\n 'profile-popover--side': !expandedView,\n }}\n >\n <sula-profile-menu\n user={this.user}\n items={this.profileItems}\n onItemClicked={event => this.handleProfileItemClicked(event)}\n onSwitchChanged={event => this.handleProfileSwitchChanged(event)}\n >\n <slot name=\"profile-content\"></slot>\n </sula-profile-menu>\n </div>\n );\n }\n\n private isValidIcon(icon?: string) {\n return !!icon && /ph-[a-z]/.test(icon);\n }\n\n private isSvg(image: string) {\n return /^data:image\\/svg\\+xml/i.test(image) || /\\.svg(\\?|#|$)/i.test(image);\n }\n\n private iconOf(item: SulaWorkbenchMenuItem) {\n return this.isValidIcon(item.icon) ? item.icon : this.defaultIcon;\n }\n\n private hasIcon(item: SulaWorkbenchMenuItem) {\n return !!item.image || this.isValidIcon(this.iconOf(item));\n }\n\n private renderItemIcon(item: SulaWorkbenchMenuItem, customClass: string, size: 'sm' | 'md' | 'lg', faded = false) {\n if (!this.hasIcon(item)) return null;\n if (item.image && this.isSvg(item.image)) {\n // SVGs are painted with currentColor through a mask, so they follow the same state colors as the icon font.\n return (\n <span\n class={`menu-item-image menu-item-image--mask menu-item-image--${size} ${customClass}`}\n style={{ '--menu-item-image': `url(\"${item.image.replace(/\"/g, '%22')}\")` }}\n aria-hidden=\"true\"\n ></span>\n );\n }\n if (item.image) {\n return (\n <img\n class={{ 'menu-item-image': true, [`menu-item-image--${size}`]: true, 'is-faded': faded }}\n src={item.image}\n alt=\"\"\n />\n );\n }\n return <sula-icon icon={this.iconOf(item)} customClass={customClass}></sula-icon>;\n }\n\n private getInitials(name: string) {\n return name\n .split(' ')\n .filter(Boolean)\n .slice(0, 2)\n .map(part => part[0].toUpperCase())\n .join('');\n }\n\n private renderUserInfo(expandedView: boolean) {\n const user = this.user;\n return (\n <button\n type=\"button\"\n class={{\n 'user-info flex min-w-0 cursor-pointer items-center rounded-xs p-8 text-left hover:bg-states-empty-bg-hover': true,\n 'user-info--active bg-states-empty-bg-hover': this.profileOpen,\n 'w-full': expandedView,\n }}\n title={`Ver perfil de ${user.name}`}\n aria-label={`Ver perfil de ${user.name}`}\n aria-haspopup=\"dialog\"\n aria-expanded={String(this.profileOpen)}\n ref={el => (this.userInfoEl = el)}\n onClick={() => this.toggleProfile()}\n >\n <span class=\"user-avatar flex h-9 w-9 flex-none items-center justify-center overflow-hidden rounded-full bg-brand-primary text-sm font-semibold text-negative-negative-1\">\n {user.photo ? <img src={user.photo} alt={user.name} /> : this.getInitials(user.name)}\n </span>\n <span\n aria-hidden={!expandedView}\n class={{\n 'user-copy': true,\n 'ml-8': true,\n 'user-copy--visible': expandedView,\n 'user-copy--hidden': !expandedView,\n }}\n >\n <span part=\"user-name\" class=\"user-name truncate text-sm font-semibold text-text-primary\">\n {user.name}\n </span>\n {user.email && <span part=\"user-email\" class=\"user-email truncate text-xs text-text-secondary\">{user.email}</span>}\n </span>\n </button>\n );\n }\n\n private getIconClass(active: boolean, faded: boolean, size: string) {\n if (faded) return `text-icon-disabled ${size}`;\n if (active) return `text-brand-primary ${size}`;\n return `text-icon-primary ${size}`;\n }\n\n private renderCollapseButton() {\n const label = this.collapsed ? 'Expandir menu' : 'Recolher menu';\n return (\n <button\n type=\"button\"\n class=\"menu-toggle flex flex-none items-center justify-center\"\n title={label}\n aria-label={label}\n aria-expanded={String(!this.collapsed)}\n onClick={() => this.toggleMenu()}\n >\n <sula-icon icon={`ph-bold ph-caret-${this.collapsed ? 'right' : 'left'}`} customClass=\"text-lg\"></sula-icon>\n </button>\n );\n }\n\n private renderRootHeader(expandedView: boolean) {\n return (\n <div\n class={{\n 'menu-header flex items-center': true,\n 'mb-40': expandedView,\n 'mb-24 flex-col justify-center px-0': !expandedView,\n }}\n >\n {this.image && (\n <div class={{ 'menu-brand-image max-h-10 max-w-10 overflow-hidden': true, 'mr-6': expandedView }}>\n <img src={this.image} alt={this.menuTitle} />\n </div>\n )}\n <div\n aria-hidden={!expandedView}\n title={expandedView ? this.menuTitle : undefined}\n class={{\n 'menu-title menu-copy': true,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n }}\n >\n <h1 part=\"title\" class=\"truncate text-2xl font-bold leading-7 text-text-secondary\">\n {this.menuTitle}\n </h1>\n </div>\n {this.renderCollapseButton()}\n </div>\n );\n }\n\n private renderTrail(ancestors: SulaWorkbenchMenuItem[]) {\n const hasHidden = ancestors.length > 2;\n const visible = hasHidden ? ancestors.slice(-2) : ancestors;\n const crumbs: JSX.Element[] = [];\n\n if (hasHidden) {\n crumbs.push(\n <button\n key=\"ellipsis\"\n type=\"button\"\n class=\"crumb-btn crumb-btn--ellipsis\"\n aria-haspopup=\"true\"\n aria-expanded={String(this.crumbMenu.open)}\n title={`${ancestors.length - 2} nível(is) anterior(es)`}\n ref={el => (this.crumbEllipsisEl = el)}\n onClick={event => this.toggleCrumbMenu(event)}\n >\n <sula-icon icon=\"ph-bold ph-dots-three\" customClass=\"text-base text-text-secondary\"></sula-icon>\n </button>,\n );\n }\n\n visible.forEach(ancestor => {\n crumbs.push(\n <button\n key={ancestor.id}\n type=\"button\"\n class=\"crumb-btn\"\n title={ancestor.label}\n onClick={() => this.goToDepth(this.stack.indexOf(ancestor))}\n >\n {ancestor.label}\n </button>,\n );\n });\n\n const nodes: JSX.Element[] = [];\n crumbs.forEach((crumb, index) => {\n if (index > 0) nodes.push(<sula-icon key={`sep-${index}`} icon=\"ph ph-caret-right\" customClass=\"crumb-sep text-xs\"></sula-icon>);\n nodes.push(crumb);\n });\n\n return (\n <nav class=\"crumb-trail flex min-w-0 items-center\" aria-label=\"Caminho de navegação\">\n {nodes}\n </nav>\n );\n }\n\n private renderCrumbDropdown(ancestors: SulaWorkbenchMenuItem[]) {\n if (!this.crumbMenu.open || ancestors.length <= 2) return null;\n const hidden = ancestors.slice(0, -2);\n\n return (\n <div\n class=\"crumb-dropdown\"\n role=\"menu\"\n ref={el => (this.crumbDropdownEl = el)}\n style={{ left: `${this.crumbMenu.left}px`, top: `${this.crumbMenu.top}px` }}\n >\n {hidden.map(ancestor => (\n <button\n key={ancestor.id}\n type=\"button\"\n role=\"menuitem\"\n class=\"crumb-dropdown-item\"\n onClick={() => this.goToDepth(this.stack.indexOf(ancestor))}\n >\n <span class=\"item-icon flex flex-none items-center justify-center\">{this.renderItemIcon(ancestor, 'text-sm text-icon-primary', 'sm')}</span>\n <span class=\"truncate\">{ancestor.label}</span>\n </button>\n ))}\n </div>\n );\n }\n\n private renderDrillHeader(activeParent: SulaWorkbenchMenuItem) {\n const ancestors = this.stack.slice(0, -1);\n const backLabel = ancestors.length ? ancestors[ancestors.length - 1].label : this.menuTitle || 'Início';\n const backButton = (\n <button\n type=\"button\"\n class=\"back-btn\"\n title={`Voltar para ${backLabel}`}\n aria-label={`Voltar para ${backLabel}`}\n onClick={() => this.goToDepth(this.stack.length - 2)}\n >\n <sula-icon icon=\"ph ph-arrow-left\" customClass=\"text-lg text-icon-primary\"></sula-icon>\n </button>\n );\n\n return (\n <div class=\"menu-header menu-header--drilldown mb-16 flex flex-col border-b border-line-general pb-24\">\n <div class=\"identity-row flex items-center\">\n <button type=\"button\" class=\"identity-strip\" title={`Ir para o início de ${this.menuTitle}`} onClick={() => this.goToDepth(-1)}>\n {this.image && (\n <span class=\"identity-image\">\n <img src={this.image} alt=\"\" />\n </span>\n )}\n <span class=\"identity-label truncate\">{this.menuTitle}</span>\n </button>\n {this.renderCollapseButton()}\n </div>\n\n {ancestors.length > 0 && (\n <div class=\"breadcrumb-row\">\n {backButton}\n {this.renderTrail(ancestors)}\n {this.renderCrumbDropdown(ancestors)}\n </div>\n )}\n\n <div class={{ 'context-row flex items-center min-w-0': true, 'mt-8': ancestors.length > 0 }}>\n {ancestors.length === 0 && backButton}\n {this.hasIcon(activeParent) && (\n <span class=\"context-icon flex flex-none items-center justify-center\">\n {this.renderItemIcon(activeParent, 'text-xl text-brand-primary', 'md')}\n </span>\n )}\n <h1 part=\"title\" class=\"context-title truncate text-xl font-semibold leading-tight text-text-primary\">\n {activeParent.label}\n </h1>\n </div>\n </div>\n );\n }\n\n private renderDrillRow(item: SulaWorkbenchMenuItem, reserve: boolean) {\n const branch = this.hasVisibleChildren(item);\n const active = this.isActive(item, branch);\n const faded = this.isFaded(item, active);\n\n return (\n <li class=\"list-none\" key={item.id}>\n <div\n class={{\n 'menu-item flex items-center justify-between rounded-xs px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled && !active,\n 'cursor-pointer': !item.disabled && active,\n 'cursor-not-allowed': !!item.disabled,\n }}\n aria-disabled={!!item.disabled}\n onClick={() => this.handleRowClick(item, this.stack.length + 1)}\n >\n <span class=\"flex min-w-0 flex-1 items-center gap-8\">\n {this.renderIconSlot(item, this.getIconClass(active, faded, 'text-base'), faded, reserve)}\n <span\n part=\"item-label\"\n class={{\n 'menu-item-label truncate': this.labelOverflow !== SulaMenuLabelOverflow.Wrap,\n 'menu-item-label menu-item-label--wrap': this.labelOverflow === SulaMenuLabelOverflow.Wrap,\n 'font-bold text-text-primary': active,\n 'text-text-disabled': faded,\n 'text-text-secondary': !active && !faded,\n }}\n >\n {item.label}\n </span>\n </span>\n {branch && <sula-icon icon=\"ph ph-caret-right\" customClass={faded ? 'text-text-disabled text-xs' : 'text-text-secondary text-xs'}></sula-icon>}\n </div>\n </li>\n );\n }\n\n private renderDrillPanel() {\n const activeParent = this.stack[this.stack.length - 1];\n const panelKey = this.stack.map(item => item.id).join('/');\n\n return (\n <ul\n key={panelKey}\n class={{\n 'menu-panel flex flex-col': true,\n 'menu-panel--forward': this.direction === 'forward',\n 'menu-panel--back': this.direction === 'back',\n }}\n >\n {this.getVisibleItems(activeParent.children).map(item => this.renderDrillRow(item, this.siblingsHaveIcon(activeParent.children)))}\n </ul>\n );\n }\n\n private getMainIconClass(active: boolean, faded: boolean) {\n if (faded) return 'text-icon-disabled text-base';\n if (active) return 'text-brand-primary text-base';\n return 'text-icon-primary text-base';\n }\n\n private getMainCaretClass(active: boolean, faded: boolean) {\n if (faded) return 'text-text-disabled text-xs';\n if (active) return 'text-text-primary text-xs';\n return 'text-text-secondary text-xs';\n }\n\n private getSubIconClass(faded: boolean, selected = false) {\n if (faded) return 'text-icon-disabled text-base';\n if (selected) return 'text-brand-primary text-base';\n return 'text-icon-primary text-base';\n }\n\n private getSubCaretClass(faded: boolean) {\n return faded ? 'text-icon-disabled text-xs' : 'text-icon-primary text-xs';\n }\n\n private siblingsHaveIcon(items: SulaWorkbenchMenuItem[]) {\n return this.getVisibleItems(items).some(sibling => this.hasIcon(sibling));\n }\n\n private renderIconSlot(item: SulaWorkbenchMenuItem, customClass: string, faded: boolean, reserve = true) {\n if (!reserve && !this.hasIcon(item)) return null;\n return <span class=\"item-icon flex flex-none items-center justify-center\">{this.renderItemIcon(item, customClass, 'lg', faded)}</span>;\n }\n\n private renderMainRow(item: SulaWorkbenchMenuItem, expandedView: boolean, branch: boolean, expanded: boolean, active: boolean, faded: boolean, reserve: boolean) {\n const labelOverflowTruncate = this.labelOverflow === SulaMenuLabelOverflow.Truncate;\n return (\n <div\n class={{\n 'menu-item flex items-center rounded-xs px-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled,\n 'cursor-not-allowed': !!item.disabled,\n 'justify-between': expandedView,\n 'justify-center': !expandedView,\n }}\n title={!expandedView ? item.label : undefined}\n aria-disabled={!!item.disabled}\n onClick={() => this.handleRowClick(item, 1)}\n >\n <div class={{ 'flex items-center': true, 'flex-1 min-w-0 gap-8': expandedView, 'justify-center': !expandedView }}>\n {this.renderIconSlot(item, this.getMainIconClass(active, faded), faded, reserve)}\n <span\n part=\"main-item-label\"\n title={expandedView ? item.label : undefined}\n aria-hidden={!expandedView}\n class={{\n 'menu-item-label menu-copy': true,\n 'menu-item-label--truncate': labelOverflowTruncate,\n 'menu-item-label--wrap': !labelOverflowTruncate,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n 'font-bold text-text-primary': active,\n 'text-text-disabled': faded,\n 'text-text-secondary': !active && !faded,\n }}\n >\n {item.label}\n </span>\n </div>\n {branch && (\n <sula-icon\n aria-hidden={!expandedView}\n class={{\n 'menu-item-caret flex items-center justify-center': true,\n 'menu-item-caret--expanded': expanded,\n 'menu-item-caret--visible': expandedView,\n 'menu-item-caret--hidden': !expandedView,\n }}\n icon=\"ph ph-caret-down\"\n customClass={this.getMainCaretClass(active, faded)}\n ></sula-icon>\n )}\n </div>\n );\n }\n\n private renderSubRow(item: SulaWorkbenchMenuItem, expandedView: boolean, branch: boolean, expanded: boolean, active: boolean, faded: boolean, drill: boolean, reserve: boolean) {\n const caretIcon = drill ? 'ph-bold ph-caret-right' : `ph-bold ph-caret-${expanded && expandedView ? 'up' : 'down'}`;\n const onClick = () => this.handleRowClick(item, this.depthOf(item));\n const rowClass = {\n 'submenu-item flex min-w-0 items-center rounded-xs py-8 pr-8 select-none': true,\n 'submenu-item--branch w-full': branch,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled,\n 'cursor-not-allowed': !!item.disabled,\n 'font-bold': active && branch,\n };\n const label = (\n <span\n class={{\n 'submenu-item-label min-w-0 flex-1': true,\n 'ml-8': reserve || this.hasIcon(item),\n 'menu-item-label--truncate': this.labelOverflow === SulaMenuLabelOverflow.Truncate,\n 'menu-item-label--wrap': this.labelOverflow !== SulaMenuLabelOverflow.Truncate,\n 'text-text-primary': !faded,\n 'text-text-disabled': faded,\n 'font-bold': active,\n }}\n >\n {item.label}\n </span>\n );\n\n if (!branch) {\n return (\n <a class={rowClass} style={{ paddingLeft: '8px' }} title={item.label} aria-disabled={!!item.disabled} onClick={onClick}>\n {this.renderIconSlot(item, this.getSubIconClass(faded, active && !branch), faded, reserve)}\n {label}\n </a>\n );\n }\n\n return (\n <a class={rowClass} style={{ paddingLeft: '8px' }} title={item.label} aria-disabled={!!item.disabled} onClick={onClick}>\n <div class=\"submenu-item-branch-content flex min-w-0 flex-1 items-center\">\n {this.renderIconSlot(item, this.getSubIconClass(faded, active && !branch), faded, reserve)}\n {label}\n </div>\n <div class=\"submenu-item-branch-caret flex flex-none items-center justify-end pl-8\">\n <sula-icon icon={caretIcon} customClass={this.getSubCaretClass(faded)}></sula-icon>\n </div>\n </a>\n );\n }\n\n private depthOf(item: SulaWorkbenchMenuItem) {\n const path = this.findPath(this.items, item.id);\n return path ? path.length : 1;\n }\n\n private renderInlineList(items: SulaWorkbenchMenuItem[], depth: number, expandedView: boolean) {\n const reserve = this.siblingsHaveIcon(items);\n return this.getVisibleItems(items).map(item => {\n const branch = this.hasVisibleChildren(item);\n const drill = branch && depth >= this.drilldownLevel;\n const inline = branch && !drill;\n const expanded = inline && !!item.expanded;\n const active = this.isActive(item, branch) || expanded;\n const faded = this.isFaded(item, active);\n\n const row =\n depth === 1\n ? this.renderMainRow(item, expandedView, branch, expanded, active, faded, reserve)\n : this.renderSubRow(item, expandedView, branch, expanded, active, faded, drill, reserve);\n\n return (\n <li class={{ 'decoration-none list-none': true, 'menu-group': depth === 1, 'is-selected': depth > 1 && active && !branch }} key={item.id}>\n {row}\n {inline && (\n <ul\n aria-hidden={!expandedView || !expanded}\n class={{\n submenu: true,\n 'submenu--expanded': expandedView && expanded,\n 'ml-[8px] border-l border-line-general pl-8': depth === 1,\n 'submenu-branch ml-[24px] border-l border-line-general pl-8': depth > 1,\n }}\n >\n {this.renderInlineList(item.children, depth + 1, expandedView)}\n </ul>\n )}\n </li>\n );\n });\n }\n\n render() {\n const expandedView = !this.collapsed || this.previewExpanded;\n const drilled = expandedView && this.isDrilled();\n const activeParent = this.stack[this.stack.length - 1];\n\n return (\n <Host\n class={{\n 'menu-host--collapsed': this.collapsed,\n 'menu-host--preview': this.collapsed && this.previewExpanded,\n 'menu-host--density-compact': this.density === SulaMenuDensity.Compact,\n 'menu-host--density-comfortable': this.density === SulaMenuDensity.Comfortable,\n }}\n style={this.hostStyleVariables}\n onMouseEnter={() => this.handleMenuMouseEnter()}\n onMouseLeave={() => this.handleMenuMouseLeave()}\n >\n <aside\n part=\"shell\"\n ref={el => (this.shellEl = el)}\n class={{\n 'menu-shell flex h-full flex-col bg-surface-body shadow-md z-50': true,\n 'menu-shell--collapsed': this.collapsed && !this.previewExpanded,\n 'menu-shell--expanded': expandedView,\n 'menu-shell--preview': this.collapsed && this.previewExpanded,\n }}\n >\n {drilled ? this.renderDrillHeader(activeParent) : this.renderRootHeader(expandedView)}\n\n <nav\n class={{\n 'menu-nav flex h-full flex-col overflow-y-auto overflow-x-hidden': true,\n 'px-12': !expandedView,\n }}\n >\n {drilled ? (\n this.renderDrillPanel()\n ) : (\n <ul class=\"flex flex-col\">{this.renderInlineList(this.items, 1, expandedView)}</ul>\n )}\n </nav>\n\n {this.user && (\n <div class=\"menu-footer border-t border-line-general pt-12\">\n {this.renderUserInfo(expandedView)}\n </div>\n )}\n </aside>\n\n {this.user && this.renderProfilePopover(expandedView)}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"sula-workbench-menu.js","sourceRoot":"","sources":["../../../src/components/sula-workbench-menu/sula-workbench-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
@@ -213,6 +213,10 @@ export default {
213
213
  control: { type: 'number', min: 1 },
214
214
  description: 'Nível (1-based) a partir do qual itens com filhos abrem drill-down em vez de expandir em linha.',
215
215
  },
216
+ drillPath: {
217
+ control: 'object',
218
+ description: 'Controla o drill-down pelo host: ids da raiz até o item cujos filhos aparecem. Array vazio volta à árvore; undefined deixa só os cliques navegarem.',
219
+ },
216
220
  items: { control: 'object', description: 'Árvore de itens, recursiva.' },
217
221
  itemSelected: { action: 'itemSelected', description: 'Emitido ao selecionar um item folha.' },
218
222
  itemClicked: { action: 'itemClicked', description: 'Emitido a cada clique em um item.' },
@@ -240,6 +244,7 @@ const Template = (args) => {
240
244
  el.density = args.density;
241
245
  el.labelOverflow = args.labelOverflow;
242
246
  el.drilldownLevel = args.drilldownLevel;
247
+ el.drillPath = args.drillPath;
243
248
  el.items = cloneItems(args.items);
244
249
  el.user = args.user;
245
250
  el.profileItems = ((_a = args.profileItems) !== null && _a !== void 0 ? _a : hubProfileItems).map(item => (Object.assign({}, item)));
@@ -337,6 +342,41 @@ CustomProfileItems.parameters = {
337
342
  },
338
343
  },
339
344
  };
345
+ export const ControlledDrillPath = (args) => {
346
+ const container = Template(args);
347
+ const menu = container.querySelector('sula-workbench-menu');
348
+ const paths = {
349
+ Tree: [],
350
+ 'Cobertura': ['claims', 'claims-auto', 'claims-auto-coverage'],
351
+ 'Terceiros': ['claims', 'claims-auto', 'claims-auto-coverage', 'claims-auto-third'],
352
+ };
353
+ const toolbar = document.createElement('div');
354
+ toolbar.style.cssText = 'display:flex;gap:8px;margin:20px 20px 0';
355
+ Object.entries(paths).forEach(([label, path]) => {
356
+ const button = document.createElement('sula-button');
357
+ button.text = label;
358
+ button.addEventListener('click', () => (menu.drillPath = path));
359
+ toolbar.appendChild(button);
360
+ });
361
+ const wrapper = document.createElement('div');
362
+ wrapper.append(toolbar, container);
363
+ return wrapper;
364
+ };
365
+ ControlledDrillPath.args = {
366
+ menuTitle: 'Sula Hub',
367
+ density: SulaMenuDensity.Default,
368
+ labelOverflow: SulaMenuLabelOverflow.Wrap,
369
+ drilldownLevel: 3,
370
+ items: workbenchItems,
371
+ user: sampleUser,
372
+ };
373
+ ControlledDrillPath.parameters = {
374
+ docs: {
375
+ description: {
376
+ story: 'O host controla o drill-down pela propriedade drillPath: os botões acima entram em Cobertura, em Terceiros ou voltam para a árvore. Ids desconhecidos interrompem o caminho no último nível válido.',
377
+ },
378
+ },
379
+ };
340
380
  export const InlineOnly = Template.bind({});
341
381
  InlineOnly.args = {
342
382
  menuTitle: 'Sula Hub',