@kumori/aurora-wui-components 0.0.273-dev4131.2 → 0.0.273-dev4131.21

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 (59) hide show
  1. package/dist/components/axebow-actions-footer/axebow-actions-footer.d.ts.map +1 -1
  2. package/dist/components/axebow-box-form/axebow-box-form.d.ts +5 -1
  3. package/dist/components/axebow-box-form/axebow-box-form.d.ts.map +1 -1
  4. package/dist/components/axebow-collaborators-dialog/axebow-collaborators-dialog.d.ts.map +1 -1
  5. package/dist/components/axebow-deploy-summary/axebow-deploy-summary.d.ts.map +1 -1
  6. package/dist/components/axebow-divider/axebow-divider.d.ts +17 -0
  7. package/dist/components/axebow-divider/axebow-divider.d.ts.map +1 -0
  8. package/dist/components/axebow-expandable-header/axebow-expandable-header.d.ts.map +1 -1
  9. package/dist/components/axebow-form-panel-field/axebow-form-panel-field.d.ts +5 -0
  10. package/dist/components/axebow-form-panel-field/axebow-form-panel-field.d.ts.map +1 -1
  11. package/dist/components/axebow-getting-started-card/axebow-getting-started-card.d.ts.map +1 -1
  12. package/dist/components/axebow-input/axebow-input-base.d.ts +2 -0
  13. package/dist/components/axebow-input/axebow-input-base.d.ts.map +1 -1
  14. package/dist/components/axebow-input/axebow-input.d.ts +2 -0
  15. package/dist/components/axebow-input/axebow-input.d.ts.map +1 -1
  16. package/dist/components/axebow-input/axebow-providers-input.d.ts +1 -0
  17. package/dist/components/axebow-input/axebow-providers-input.d.ts.map +1 -1
  18. package/dist/components/axebow-input/axebow-switch-input.d.ts +1 -0
  19. package/dist/components/axebow-input/axebow-switch-input.d.ts.map +1 -1
  20. package/dist/components/axebow-input/axebow-text-input.d.ts.map +1 -1
  21. package/dist/components/axebow-mesh-node-renderer/axebow-mesh-node-renderer.d.ts +0 -9
  22. package/dist/components/axebow-mesh-node-renderer/axebow-mesh-node-renderer.d.ts.map +1 -1
  23. package/dist/components/axebow-modals-confirmation/axebow-modals-confirmation.d.ts.map +1 -1
  24. package/dist/components/axebow-observability-container/axebow-observability-container.d.ts.map +1 -1
  25. package/dist/components/axebow-refresh-period-panel/axebow-refresh-period-panel.d.ts.map +1 -1
  26. package/dist/components/axebow-registry-selector/axebow-registry-selector.d.ts.map +1 -1
  27. package/dist/components/axebow-resource-limits/axebow-resource-limits-panel.d.ts.map +1 -1
  28. package/dist/components/axebow-resource-limits/axebow-resource-limits.models.d.ts +1 -0
  29. package/dist/components/axebow-resource-limits/axebow-resource-limits.models.d.ts.map +1 -1
  30. package/dist/components/axebow-resource-limits/parts/axebow-resource-limit-input.d.ts.map +1 -1
  31. package/dist/components/axebow-role-card/axebow-role-card.d.ts.map +1 -1
  32. package/dist/components/axebow-runtime-zip-dialog/axebow-runtime-zip-dialog.d.ts.map +1 -1
  33. package/dist/components/axebow-selector-card/axebow-selector-card.d.ts +15 -0
  34. package/dist/components/axebow-selector-card/axebow-selector-card.d.ts.map +1 -0
  35. package/dist/components/axebow-sidebar/axebow-sidebar.d.ts.map +1 -1
  36. package/dist/components/axebow-status/axebow-status.d.ts +3 -0
  37. package/dist/components/axebow-status/axebow-status.d.ts.map +1 -1
  38. package/dist/components/axebow-summary/axebow-summary-card.d.ts.map +1 -1
  39. package/dist/components/axebow-summary/axebow-summary-flavors.d.ts +0 -3
  40. package/dist/components/axebow-summary/axebow-summary-flavors.d.ts.map +1 -1
  41. package/dist/components/axebow-summary/axebow-summary-limits.d.ts +1 -0
  42. package/dist/components/axebow-summary/axebow-summary-limits.d.ts.map +1 -1
  43. package/dist/components/axebow-summary/axebow-summary-step-header.d.ts +1 -0
  44. package/dist/components/axebow-summary/axebow-summary-step-header.d.ts.map +1 -1
  45. package/dist/components/axebow-summary/axebow-summary-step.d.ts +1 -0
  46. package/dist/components/axebow-summary/axebow-summary-step.d.ts.map +1 -1
  47. package/dist/components/axebow-tenant-card/axebow-tenant-card.d.ts.map +1 -1
  48. package/dist/components/axebow-usage-tooltip/axebow-usage-tooltip.d.ts.map +1 -1
  49. package/dist/index.d.ts +2 -0
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +534 -275
  52. package/dist/index.js.map +1 -1
  53. package/dist/playground/schemas/axebow-divider.schema.d.ts +9 -0
  54. package/dist/playground/schemas/axebow-divider.schema.d.ts.map +1 -0
  55. package/dist/playground/schemas/axebow-input.schema.d.ts.map +1 -1
  56. package/dist/playground/schemas/axebow-selector-card.schema.d.ts +8 -0
  57. package/dist/playground/schemas/axebow-selector-card.schema.d.ts.map +1 -0
  58. package/dist/playground/schemas/axebow-text-input.schema.d.ts.map +1 -1
  59. package/package.json +1 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/styles/axebow-theme.ts","../src/components/axebow-icon/axebow-icon.ts","../src/components/axebow-filter-bar/axebow-filter-bar.ts","../src/components/axebow-button/axebow-button.ts","../src/components/axebow-search/axebow-search.ts","../src/components/axebow-search-bar-filters/axebow-search-bar-filters.ts","../src/components/axebow-header/parts/axebow-quick-action-card.ts","../src/components/axebow-header/parts/axebow-quick-actions.ts","../src/components/axebow-header/parts/axebow-header-actions.ts","../src/components/axebow-header/axebow-header.ts","../src/components/axebow-sidebar/axebow-sidebar.ts","../src/components/axebow-footer/axebow-footer.ts","../src/components/axebow-breadcrumb-header/axebow-breadcrumb-header.ts","../src/components/axebow-input/axebow-input-base.ts","../src/components/axebow-input/axebow-text-input.ts","../src/components/axebow-input/axebow-numeric-input.ts","../src/components/axebow-input/axebow-checkbox-input.ts","../src/components/axebow-input/axebow-switch-input.ts","../src/components/axebow-input/axebow-carousel-input.ts","../src/components/axebow-input/axebow-providers-input.ts","../src/components/axebow-input/axebow-select-input.ts","../src/components/axebow-input/axebow-select-input-with-divider.ts","../src/components/axebow-input/axebow-input.ts","../src/components/axebow-input/axebow-plan-select-field.ts","../src/components/axebow-input/axebow-tags-input.ts","../src/components/axebow-tab-selector/axebow-tab-selector.ts","../src/components/axebow-registry-selector/axebow-registry-selector.ts","../src/components/axebow-dialog/axebow-dialog.ts","../src/components/axebow-collaborators-dialog/axebow-collaborators-dialog.ts","../src/components/axebow-modals-confirmation/axebow-modals-confirmation.ts","../src/components/axebow-limits-counter/axebow-limits-counter.ts","../src/components/axebow-resources-counter/axebow-resources-counter.ts","../src/components/axebow-tooltip/axebow-tooltip.ts","../src/components/axebow-adjustment-resources-counter/axebow-adjustment-resources-counter.ts","../src/components/axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.ts","../src/components/axebow-banner/axebow-banner.ts","../src/components/axebow-switch/axebow-switch.ts","../src/components/axebow-runtime-zip-dialog/axebow-runtime-zip-dialog.ts","../src/components/axebow-more-actions/axebow-more-actions.ts","../src/components/cards/parts/axebow-card-cloud-logo.ts","../src/components/cards/parts/axebow-card-version-selector.ts","../src/components/cards/parts/axebow-role-tooltip.ts","../src/components/cards/parts/axebow-card-header.ts","../src/components/cards/parts/axebow-card-stat-item.ts","../src/components/cards/parts/axebow-card-stats-row.ts","../src/components/cards/parts/axebow-card-filter-item.ts","../src/components/cards/parts/axebow-card-filter.ts","../src/components/cards/parts/axebow-card-table-header.ts","../src/components/cards/parts/axebow-card-resource-row.ts","../src/components/cards/parts/axebow-card-resource-table.ts","../src/components/cards/parts/axebow-card-attention-banner.ts","../src/components/cards/parts/axebow-card-action-banner.ts","../src/components/cards/parts/axebow-card-status.ts","../src/components/cards/parts/axebow-card-footer.ts","../src/components/cards/axebow-base-card.ts","../src/components/cards/parts/axebow-card-special-link.ts","../src/components/axebow-alert/axebow-alert.ts","../src/components/axebow-draggable-service/axebow-draggable-service.ts","../src/components/axebow-services-panel/axebow-services-panel.ts","../src/components/axebow-channel-config-panel/axebow-channel-config-panel.ts","../src/components/axebow-mesh-node-renderer/axebow-mesh-node-renderer.ts","../src/components/axebow-help-bubble/axebow-help-bubble.ts","../src/components/axebow-number-card/axebow-number-card.ts","../src/components/axebow-numbers-section/axebow-numbers-section.ts","../src/components/axebow-pill/axebow-pill.ts","../src/components/axebow-quick-tip-button/axebow-quick-tip-button.ts","../src/components/axebow-infrastructure-card/axebow-infrastructure-card.ts","../src/components/axebow-getting-started-card/axebow-getting-started-card.ts","../src/components/axebow-marketplace-card/axebow-marketplace-card.ts","../src/components/axebow-deploy-card/axebow-deploy-card.ts","../src/components/axebow-resource-card/axebow-resource-card.ts","../src/components/axebow-quick-tip-section/axebow-quick-tip-section.ts","../src/components/axebow-tenant-resource-table/axebow-tenant-resource-table.ts","../src/components/table-chart/table-chart.ts","../src/components/axebow-service-detail-header/axebow-service-detail-header.ts","../src/components/axebow-tenant-card/axebow-tenant-card.ts","../src/components/axebow-carousel-selector-tenant/parts/axebow-carousel-selector-item.ts","../src/components/axebow-carousel-selector-tenant/axebow-carousel-selector-tenant.ts","../src/components/axebow-expandable-header/axebow-expandable-header.ts","../src/components/axebow-actions-footer/axebow-actions-footer.ts","../src/components/axebow-step-header/axebow-step-header.ts","../src/components/axebow-underline-tab-selector/axebow-underline-tab-selector.ts","../src/components/axebow-role-card/axebow-role-card.ts","../src/components/axebow-time-range-panel/axebow-time-range-panel.ts","../src/components/axebow-role-container-dropdown/axebow-role-container-dropdown.ts","../src/components/axebow-refresh-period-panel/axebow-refresh-period-panel.ts","../src/components/axebow-resource-limits/parts/axebow-resource-limit-input.ts","../src/components/axebow-resource-limits/axebow-resource-limits-panel.ts","../src/components/axebow-selector-slider/axebow-selector-slider.ts","../src/components/axebow-deploy-summary/axebow-deploy-summary.ts","../src/components/axebow-summary/axebow-summary-key-value.ts","../src/components/axebow-summary/axebow-resource-bar.ts","../src/components/axebow-summary/axebow-summary-step-header.ts","../src/components/axebow-summary/axebow-summary-step.ts","../src/components/axebow-summary/axebow-summary-card.ts","../src/components/axebow-summary/axebow-summary-limits.ts","../src/components/axebow-summary/axebow-summary-flavors.ts","../src/components/deploy-modal-component/parts/deploy-modal-header.ts","../src/components/deploy-modal-component/parts/deploy-modal-footer.ts","../src/components/deploy-modal-component/deploy-modal-component.ts","../src/components/deploy-page-body/deploy-page-body.ts","../src/components/custom-home-page-body/custom-home-page-body.ts","../src/components/axebow-status/axebow-status.ts","../src/components/axebow-form-panel-field/axebow-form-panel-field.ts","../src/components/axebow-box-form/axebow-box-form.ts","../src/components/axebow-manage-hyperlinks/axebow-manage-hyperlinks.ts","../src/components/axebow-box-section/axebow-box-section.ts","../src/components/axebow-copy-box/axebow-copy-box.ts","../src/components/axebow-tabs-submenu/axebow-tabs-submenu.ts","../src/components/axebow-progress-bar/axebow-progress-bar.ts","../src/components/axebow-usage-tooltip/axebow-usage-tooltip.ts","../src/components/axebow-instances-table/axebow-instances-table.ts","../src/components/axebow-tenants-table/axebow-tenants-table.ts","../src/components/axebow-expandable-card/axebow-expandable-card.ts","../src/components/axebow-undeploy-card/axebow-undeploy-card.ts","../src/components/axebow-observability-container/axebow-observability-container.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const axebowTheme = css`\n :host, .theme {\n --axebow-primary: var(--color-primary, #34495e);\n --axebow-primary-light: var(--color-primary-light, #b4cded);\n --axebow-tertiary: var(--color-tertiary, #006bff);\n --axebow-success: var(--color-success, #0ecd9a);\n --axebow-secondary: var(--color-secondary, #78787a);\n --axebow-base: var(--color-base, #f0f1f5);\n --axebow-error: var(--color-error, #e93a3a);\n --axebow-white: var(--color-white, #ffffff);\n --axebow-black: var(--color-black, #000000);\n --axebow-warning: var(--color-warning, #f9cf6c);\n --axebow-warning-bg: var(--color-warning-bg, #fffbe6);\n --axebow-error-bg: var(--color-error-bg, #fff2f0);\n --axebow-error-border: var(--color-error-border, #ffccc7);\n --axebow-dark-yellow: var(--color-dark-yellow, #b9935a);\n --axebow-table-border: var(--color-table-border, #ddd);\n --axebow-table-header-border: var(--color-table-header-border, #dbdde4);\n --axebow-gray: var(--color-gray, #8a94ae);\n --axebow-light-gray: var(--color-light-gray, #d9d9d9);\n\n --axebow-clickable-blue: var(--color-clickable-blue, #006bff);\n --axebow-sky-gray: var(--color-sky-gray, #8a94ee);\n --axebow-rich-black: var(--color-rich-black, #0d1821);\n --axebow-anti-flash-white: var(--color-anti-flash-white, #f0f1f5);\n --axebow-strong-gray: var(--color-strong-gray, #78787a);\n\n --axebow-bg-primary: var(--color-bg-primary, #f0f1f5);\n\n --axebow-text-gray: var(--color-text-gray, #78787a);\n\n --axebow-premium-label: var(--color-premium-label, #b9935a33);\n --axebow-premium-text: var(--color-premium-text, #b9935a);\n --axebow-deleting-link: var(--color-deleting-link, #a0a0a0);\n --axebow-border-gray: var(--color-border-gray, #9ca3af);\n font-family: var(--font-sans, \"Open Sans\", sans-serif);\n font-size: var(--text-base, 0.75rem);\n line-height: var(--text-base--line-height, 1rem);\n }\n\n /** Axebow switch */\n sl-switch::part(control) {\n background-color: var(--axebow-light-gray);\n }\n sl-switch[checked]::part(control) {\n background-color: var(--axebow-tertiary);\n }\n sl-switch::part(thumb) {\n background-color: white;\n }\n\n /** Axebow checkbox */\n sl-checkbox[checked]::part(control) {\n background-color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n }\n\n /** Axebow select and input global focus */\n sl-input:focus-within::part(base),\n sl-select:focus-within::part(combobox) {\n border-color: var(--axebow-black) !important;\n border-width: 1px !important;\n box-shadow: none !important;\n }\n sl-select sl-option:hover::part(base) {\n background-color: #e9ecef;\n }\n sl-select {\n --sl-color-primary-50: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n }\n sl-select sl-option[checked]::part(base),\n sl-select sl-option[current]::part(base),\n sl-select sl-option[aria-selected='true']::part(base) {\n background-color: var(--axebow-tertiary) !important;\n color: white !important;\n }\n\n /** Axebow tab group */\n sl-tab-group {\n --indicator-color: var(--axebow-tertiary);\n }\n sl-tab {\n --sl-font-size-small: var(--text-base); /* 12px */\n }\n sl-tab::part(base) {\n font-size: var(--text-base); /* 12px */\n }\n sl-tab[active]::part(base) {\n color: var(--axebow-tertiary);\n }\n sl-tab:hover::part(base) {\n color: var(--axebow-tertiary);\n }\n\n /* Custom Scrollbar Styles for Shoelace Dropdown, Select, and Menu */\n :host, .theme {\n --axebow-scrollbar-line-color: var(--axebow-tertiary, #e51c8e);\n --axebow-scrollbar-track-color: #f0f1f5;\n --axebow-scrollbar-thumb-color: #cbd5e1;\n --axebow-scrollbar-thumb-hover-color: #94a3b8;\n }\n\n /* Webkit/Blink Scrollbars */\n sl-select::part(listbox)::-webkit-scrollbar,\n sl-dropdown::part(panel)::-webkit-scrollbar,\n sl-menu::part(base)::-webkit-scrollbar {\n width: 11px;\n height: 11px;\n border-left: 2px solid var(--axebow-scrollbar-line-color);\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-button,\n sl-dropdown::part(panel)::-webkit-scrollbar-button,\n sl-menu::part(base)::-webkit-scrollbar-button {\n display: none;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-track,\n sl-dropdown::part(panel)::-webkit-scrollbar-track,\n sl-menu::part(base)::-webkit-scrollbar-track {\n background-color: var(--axebow-scrollbar-track-color);\n background-clip: padding-box;\n border-left: 3px solid transparent; /* Gap between pink line and track */\n border-right: 2px solid transparent;\n border-top: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: 9999px;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-thumb,\n sl-dropdown::part(panel)::-webkit-scrollbar-thumb,\n sl-menu::part(base)::-webkit-scrollbar-thumb {\n background-color: var(--axebow-scrollbar-thumb-color);\n background-clip: padding-box;\n border-left: 3px solid transparent; /* Gap between pink line and thumb */\n border-right: 2px solid transparent;\n border-top: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: 9999px;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-thumb:hover,\n sl-dropdown::part(panel)::-webkit-scrollbar-thumb:hover,\n sl-menu::part(base)::-webkit-scrollbar-thumb:hover {\n background-color: var(--axebow-scrollbar-thumb-hover-color);\n }\n\n /* Firefox Scrollbars */\n sl-select::part(listbox),\n sl-dropdown::part(panel),\n sl-menu::part(base) {\n scrollbar-width: thin;\n scrollbar-color: var(--axebow-scrollbar-thumb-color) transparent;\n }\n\n sl-select::part(listbox),\n sl-select::part(menu) {\n min-width: 100% !important;\n width: max-content !important;\n max-width: 90vw !important;\n }\n`;\n\nexport const STATUS_COLORS = {\n HEALTHY: 'var(--axebow-success)',\n ERROR: 'var(--axebow-error)',\n WARNING: 'var(--axebow-warning)',\n DEFAULT: 'var(--axebow-gray)',\n} as const;\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, unsafeCSS, LitElement, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-icon')\nexport class AxebowIcon extends LitElement {\n @property({ type: String }) iconName = 'home';\n @property({ type: String }) iconColor = 'var(--axebow-primary)';\n @property({ type: Number }) rotate = 0;\n @property({ type: Boolean }) filled = false;\n @property({ type: String }) size: string = 'medium';\n @property({ type: Number }) marginBottom = 0;\n @property({ type: Boolean, reflect: true }) clickable = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n :host([clickable]),\n span.is-clickable {\n cursor: pointer;\n transition: opacity 0.15s ease, filter 0.15s ease;\n }\n :host([clickable]):hover,\n span.is-clickable:hover {\n opacity: 0.6;\n filter: grayscale(0.4);\n }\n `,\n ];\n\n private _getFontSize(): string {\n const s = this.size.replace(/^text-/, '');\n switch (s) {\n case 'xs':\n return 'var(--text-xs, 0.75rem)';\n case 'sm':\n case 'xx-small':\n return 'var(--text-sm, 0.875rem)';\n case 'base':\n case 'x-small':\n return 'var(--text-base, 1rem)';\n case 'md':\n case 'small':\n return 'var(--text-md, 0.875rem)';\n case 'lg':\n return 'var(--text-lg, 1.125rem)';\n case 'xl':\n case 'medium':\n return '18px';\n case '2xl':\n return '1.5rem';\n case '3xl':\n case 'large':\n return 'var(--text-3xl, 1.875rem)';\n case '4xl':\n return '2.25rem';\n case '5xl':\n case 'x-large':\n return 'var(--text-5xl, 3rem)';\n default:\n return this.size;\n }\n }\n\n render() {\n const filled = \"[font-variation-settings:'FILL'_1,'wght'_400,'GRAD'_0,'opsz'_24]\";\n const outlined = \"[font-variation-settings:'FILL'_0,'wght'_400,'GRAD'_0,'opsz'_24]\";\n const fontSize = this._getFontSize();\n return html`\n <span\n class=\"font-[Material_Symbols_Outlined] inline-block align-middle whitespace-nowrap ${this.clickable ? 'is-clickable' : ''} ${this.filled\n ? filled\n : outlined}\"\n style=\"color: var(--axebow-icon-color, ${this.iconColor}); transform: rotate(${this.rotate}deg); font-size: ${fontSize}; margin-bottom: ${this.size === 'large' || this.size === '3xl'\n ? '0.375rem'\n : this.size === 'x-large' || this.size === '5xl'\n ? '0.5rem'\n : `${this.marginBottom}px`};\"\n >\n ${this.iconName}\n </span>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\nexport interface AxebowFilterBarOption {\n label: string;\n value: string;\n}\n\nexport interface AxebowFilterBarItem {\n key: string;\n label: string;\n placeholder: string;\n value: string;\n options: AxebowFilterBarOption[];\n separate?: boolean;\n lockable?: boolean;\n}\n\n/**\n * Purely presentational row of dropdown filters. Receives fully-resolved\n * items to render and only emits `option-change`; it holds no business\n * state, that is the responsibility of the consumer.\n */\n@customElement('axebow-filter-bar')\nexport class AxebowFilterBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-select {\n --sl-color-primary-500: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n --sl-focus-ring-width: 0px;\n }\n sl-select::part(combobox) {\n min-height: 2.5rem;\n border: 1px solid #dbdde4;\n border-radius: 0.375rem;\n padding-inline: 0.75rem;\n padding-block: 0.5rem;\n gap: 0.5rem;\n box-shadow: none;\n background-color: var(--axebow-white, white);\n }\n sl-select:hover::part(combobox) {\n border-color: var(--axebow-gray);\n }\n sl-select[open]::part(combobox),\n sl-select:focus-within::part(combobox) {\n border-color: var(--axebow-black);\n }\n sl-select::part(display-input) {\n color: var(--axebow-secondary);\n font-size: 0.875rem;\n padding: 0;\n }\n sl-select::part(expand-icon) {\n width: 1rem;\n height: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n sl-option::part(checked-icon) {\n display: none;\n }\n sl-option::part(base) {\n font-size: 0.875rem;\n }\n sl-select[lockable][has-value]::part(expand-icon) {\n display: none !important;\n }\n sl-select[lockable][has-value]::part(combobox) {\n pointer-events: none;\n }\n sl-select[lockable][has-value]::part(clear-button),\n sl-select[lockable][has-value]::part(clear-icon) {\n pointer-events: auto;\n }\n sl-select:not([has-value])::part(clear-button) {\n display: none !important;\n }\n `,\n ];\n\n @property({ type: Array }) items: AxebowFilterBarItem[] = [];\n @property({ type: String }) clearFilterLabel = '';\n @property({ type: Boolean }) compact = false;\n\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this._updateSeparateLayout());\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n firstUpdated() {\n const container = this.shadowRoot?.querySelector<HTMLElement>('.filter-bar');\n if (container) this._resizeObserver?.observe(container);\n this._updateSeparateLayout();\n }\n\n updated(changedProperties: any) {\n super.updated(changedProperties);\n requestAnimationFrame(() => this._updateSeparateLayout());\n this._updateHasValueAttributes();\n }\n\n private _updateHasValueAttributes() {\n const selects = this.shadowRoot?.querySelectorAll('sl-select');\n selects?.forEach((select) => {\n const isLockable = select.hasAttribute('lockable');\n const val = (select as any).value;\n const hasValue = isLockable && val && val !== 'all' && val !== '';\n if (hasValue) {\n select.setAttribute('has-value', '');\n } else {\n select.removeAttribute('has-value');\n }\n });\n }\n\n private _onSelectShow(e: CustomEvent) {\n const target = e.target as any;\n if (target.hasAttribute('lockable') && target.hasAttribute('has-value')) {\n target.hide();\n }\n }\n\n private _updateSeparateLayout() {\n const container = this.shadowRoot?.querySelector<HTMLElement>('.filter-bar');\n if (!container) return;\n const items = Array.from(container.querySelectorAll<HTMLElement>('.filter-bar-item'));\n if (items.length < 2) return;\n const firstTop = items[0].offsetTop;\n const isSingleRow = items.every((item) => item.offsetTop === firstTop);\n const firstSeparate = container.querySelector<HTMLElement>('.filter-bar-item[data-separate]');\n if (firstSeparate) {\n firstSeparate.style.marginLeft = isSingleRow ? 'auto' : '';\n }\n }\n\n private _onChange(e: CustomEvent, key: string) {\n const target = e.target as any;\n const value = target.value;\n const isLockable = target.hasAttribute('lockable');\n const hasValue = isLockable && value && value !== 'all' && value !== '';\n if (hasValue) {\n target.setAttribute('has-value', '');\n } else {\n target.removeAttribute('has-value');\n }\n this.dispatchEvent(new CustomEvent('option-change', { detail: { key, value }, bubbles: true, composed: true }));\n }\n\n private _clearItem(key: string) {\n this.dispatchEvent(\n new CustomEvent('option-change', { detail: { key, value: 'all' }, bubbles: true, composed: true })\n );\n }\n\n private _renderItem(item: AxebowFilterBarItem) {\n const isLockable = item.lockable !== false;\n const hasValue = isLockable && item.value && item.value !== 'all' && item.value !== '';\n return html`\n <div\n class=\"filter-bar-item flex flex-col gap-2 flex-1 min-w-36 max-w-95\"\n ?data-separate=${item.separate}\n >\n <div class=\"flex items-center justify-between gap-2\">\n <h4 class=\"m-0 text-base font-semibold text-black\">${item.label}</h4>\n ${hasValue && this.clearFilterLabel\n ? html`\n <div class=\"w-17 h-4.25 shrink-0\">\n <button\n type=\"button\"\n class=\"w-full h-full p-0 border-0 bg-transparent cursor-pointer text-(--axebow-tertiary) text-base text-right hover:underline\"\n @click=${() => this._clearItem(item.key)}\n >\n ${this.clearFilterLabel}\n </button>\n </div>\n `\n : ''}\n </div>\n <sl-select\n class=\"w-full\"\n placeholder=${item.placeholder}\n .value=${item.value}\n ?lockable=${isLockable}\n ?has-value=${hasValue}\n ?clearable=${isLockable && !this.clearFilterLabel}\n data-key=${item.key}\n @sl-change=${(e: CustomEvent) => this._onChange(e, item.key)}\n @sl-show=${this._onSelectShow}\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n <axebow-icon\n slot=\"expand-icon\"\n iconName=\"chevron_right\"\n rotate=\"90\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${item.options.map((option) => html`<sl-option value=${option.value}>${option.label}</sl-option>`)}\n </sl-select>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"filter-bar flex items-end gap-4 flex-wrap ${this.compact ? '' : 'py-8'}\">\n ${this.items.map((item) => this._renderItem(item))}\n </div>\n `;\n }\n}\n","import { html, LitElement, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '@shoelace-style/shoelace/dist/components/button/button.js';\n\n@customElement('axebow-button')\nexport class AxebowButton extends LitElement {\n @property({ type: String, reflect: true }) variant:\n | 'default'\n | 'primary'\n | 'success'\n | 'neutral'\n | 'warning'\n | 'danger'\n | 'text'\n | 'tertiary' = 'default';\n\n @property({ type: String, reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: Boolean, reflect: true }) outline = false;\n @property({ type: Boolean, reflect: true }) pill = false;\n @property({ type: Boolean, reflect: true }) circle = false;\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Boolean, reflect: true }) loading = false;\n @property({ type: Boolean, reflect: true }) caret = false;\n @property({ type: String }) type: 'button' | 'submit' | 'reset' = 'button';\n @property({ type: String }) href?: string;\n @property({ type: String }) target?: string;\n @property({ type: String }) name?: string;\n @property({ type: String }) value?: string;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) iconGap?: string;\n @property({ type: String }) paddingTop?: string;\n @property({ type: String }) paddingRight?: string;\n @property({ type: String }) paddingBottom?: string;\n @property({ type: String }) paddingLeft?: string;\n\n /**\n * 'simple' keeps each variant's own hover treatment (the default,\n * unchanged). 'border' switches to the boxed hover look shared by\n * axebow-more-actions: an anti-flash-white background with rounded\n * corners, regardless of variant.\n */\n @property({ type: String }) hoverStyle: 'simple' | 'border' = 'simple';\n\n constructor() {\n super();\n this.addEventListener('click', this._guardDisabledClick, { capture: true });\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('fixedWidth')) {\n if (this.fixedWidth) this.style.setProperty('--axebow-button-width', this.fixedWidth);\n else this.style.removeProperty('--axebow-button-width');\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) this.style.setProperty('--axebow-button-height', this.fixedHeight);\n else this.style.removeProperty('--axebow-button-height');\n }\n if (changed.has('iconGap')) {\n if (this.iconGap) this.style.setProperty('--axebow-button-gap', this.iconGap);\n else this.style.removeProperty('--axebow-button-gap');\n }\n this._syncPaddingVar(changed, 'paddingTop', '--axebow-button-padding-top');\n this._syncPaddingVar(changed, 'paddingRight', '--axebow-button-padding-right');\n this._syncPaddingVar(changed, 'paddingBottom', '--axebow-button-padding-bottom');\n this._syncPaddingVar(changed, 'paddingLeft', '--axebow-button-padding-left');\n }\n\n private _syncPaddingVar(changed: Map<string, unknown>, prop: 'paddingTop' | 'paddingRight' | 'paddingBottom' | 'paddingLeft', cssVar: string) {\n if (!changed.has(prop)) return;\n const value = this[prop];\n if (value) this.style.setProperty(cssVar, value);\n else this.style.removeProperty(cssVar);\n }\n\n private _guardDisabledClick = (event: MouseEvent) => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n sl-button {\n width: 100%;\n }\n sl-button::part(base) {\n height: var(--axebow-button-height, 2.5rem);\n min-height: var(--axebow-button-height, 2.5rem);\n line-height: calc(var(--axebow-button-height, 2.5rem) - var(--sl-input-border-width) * 2);\n width: var(--axebow-button-width, auto);\n min-width: var(--axebow-button-width, 9.375rem);\n gap: var(--axebow-button-gap, 0.25rem);\n }\n\n /**\n * Hover is always a plain recolor to axebow-gray, no matter the\n * variant - nothing else about the button's structure changes.\n */\n\n /** Default / neutral button */\n sl-button[variant='default']:not([disabled]):hover::part(base),\n sl-button[variant='neutral']:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Primary button */\n sl-button[variant='primary']::part(base) {\n background: var(--axebow-tertiary);\n color: white;\n border-color: transparent;\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='primary']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Outlined primary button */\n sl-button[variant='primary'][outline]::part(base) {\n background: transparent;\n color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='primary'][outline]:not([disabled]):hover::part(base) {\n background: color-mix(in srgb, var(--axebow-gray) 15%, transparent);\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Text button */\n sl-button[variant='text']::part(base) {\n color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='text']:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n border-radius: 0.375rem;\n }\n\n /** Tertiary button */\n sl-button[variant='tertiary']::part(base) {\n background: transparent;\n border-color: transparent;\n color: var(--axebow-tertiary);\n outline-color: transparent;\n box-shadow: none;\n }\n sl-button[variant='tertiary']:not([disabled]):hover::part(base) {\n background-color: var(--axebow-anti-flash-white);\n color: var(--axebow-gray);\n border-radius: 0.375rem;\n border-color: transparent;\n outline-color: transparent;\n }\n\n /** Success button */\n sl-button[variant='success']::part(base) {\n background: var(--axebow-success);\n border-color: var(--axebow-success);\n color: white;\n border-radius: 0.375rem;\n outline-color: var(--axebow-success);\n }\n sl-button[variant='success']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger button */\n sl-button[variant='danger']::part(base) {\n background: var(--axebow-error);\n border-color: var(--axebow-error);\n color: white;\n outline-color: var(--axebow-error);\n }\n sl-button[variant='danger']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger outlined */\n sl-button[variant='danger'][outline]::part(base) {\n background: transparent;\n color: var(--axebow-error);\n border-color: var(--axebow-error);\n outline-color: var(--axebow-error);\n }\n sl-button[variant='danger'][outline]:not([disabled]):hover::part(base) {\n background: color-mix(in srgb, var(--axebow-gray) 15%, transparent);\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger text (host class) */\n :host(.axebow-red-button-text) sl-button::part(base) {\n color: var(--axebow-error);\n outline-color: var(--axebow-error);\n }\n :host(.axebow-red-button-text) sl-button:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Warning button (host class) */\n :host(.axebow-warning-button-bg) sl-button::part(base) {\n color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n :host(.axebow-warning-button-bg) sl-button:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /**\n * Boxed hover look shared with axebow-more-actions, opt-in via\n * hoverStyle=\"border\". Declared last so it wins over every\n * variant's own hover rule above, regardless of which variant\n * it's combined with.\n */\n sl-button[hoverstyle='border']:not([disabled]):hover::part(base) {\n background-color: var(--axebow-anti-flash-white) !important;\n color: var(--axebow-gray) !important;\n border-radius: 0.375rem !important;\n outline-color: transparent !important;\n border-color: transparent !important;\n }\n\n sl-button::part(label) {\n padding: 0 !important;\n color: inherit;\n }\n\n sl-button::part(prefix),\n sl-button::part(suffix) {\n display: none !important;\n color: inherit;\n }\n\n :host([has-prefix]) sl-button::part(prefix) {\n display: flex !important;\n }\n\n :host([has-suffix]) sl-button::part(suffix) {\n display: flex !important;\n }\n\n ::slotted(axebow-icon) {\n --axebow-icon-color: currentColor;\n }\n `,\n ];\n\n private _handlePrefixChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes().some(node => {\n return node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '');\n });\n if (hasContent) {\n this.setAttribute('has-prefix', '');\n } else {\n this.removeAttribute('has-prefix');\n }\n }\n\n private _handleSuffixChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes().some(node => {\n return node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '');\n });\n if (hasContent) {\n this.setAttribute('has-suffix', '');\n } else {\n this.removeAttribute('has-suffix');\n }\n }\n\n render() {\n return html`\n <sl-button\n exportparts=\"base, label, prefix, suffix, caret\"\n hoverstyle=${this.hoverStyle}\n variant=${this.variant}\n size=${this.size}\n ?outline=${this.outline}\n ?pill=${this.pill}\n ?circle=${this.circle}\n ?disabled=${this.disabled}\n ?loading=${this.loading}\n ?caret=${this.caret}\n type=${this.type}\n href=${ifDefined(this.href)}\n target=${ifDefined(this.target)}\n name=${ifDefined(this.name)}\n value=${ifDefined(this.value)}\n >\n <slot name=\"prefix\" slot=\"prefix\" @slotchange=${this._handlePrefixChange}></slot>\n <slot></slot>\n <slot name=\"suffix\" slot=\"suffix\" @slotchange=${this._handleSuffixChange}></slot>\n </sl-button>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\n\n@customElement('axebow-search')\nexport class AxebowSearch extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n sl-input {\n width: 20rem;\n --sl-focus-ring-width: 0px;\n }\n :host(.axebow-fixed-width) sl-input {\n width: var(--axebow-search-width);\n }\n sl-input::part(base) {\n height: var(--axebow-search-height, 2.5rem);\n border: 1px solid #dbdde4;\n border-radius: 0.375rem;\n box-shadow: none;\n }\n sl-input::part(input) {\n height: var(--axebow-search-height, 2.5rem) !important;\n }\n sl-input:focus-within::part(base) {\n border-color: var(--axebow-tertiary);\n }\n sl-input::part(input) {\n color: var(--axebow-rich-black, #0d1821);\n font-size: 0.875rem;\n }\n sl-input::part(prefix) {\n padding-inline-start: 0.75rem;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) width?: string;\n @property({ type: String }) height?: string;\n\n protected updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('width')) {\n if (this.width) {\n this.style.setProperty('--axebow-search-width', this.width);\n this.classList.add('axebow-fixed-width');\n } else {\n this.style.removeProperty('--axebow-search-width');\n this.classList.remove('axebow-fixed-width');\n }\n }\n if (changed.has('height')) {\n if (this.height) this.style.setProperty('--axebow-search-height', this.height);\n else this.style.removeProperty('--axebow-search-height');\n }\n }\n\n private _emitChange(value: string) {\n this.dispatchEvent(\n new CustomEvent('search-change', { detail: { value }, bubbles: true, composed: true })\n );\n }\n\n private _onInput(e: Event) {\n this._emitChange((e.target as HTMLInputElement).value);\n }\n\n private _onClear() {\n this._emitChange('');\n }\n\n render() {\n return html`\n <sl-input placeholder=${this.placeholder} .value=${this.value} clearable @sl-input=${this._onInput} @sl-clear=${this._onClear}>\n <axebow-icon slot=\"prefix\" iconName=\"search\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </sl-input>\n `;\n }\n}\n","import { LitElement, css, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-search/axebow-search.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface AxebowSearchBarFiltersValues {\n search: string;\n role: string;\n provider: string;\n plan: string;\n sortBy: string;\n lockable?: boolean;\n}\n\nexport interface AxebowSearchBarFiltersOption {\n label: string;\n value: string;\n logo?: string;\n}\n\n@customElement('axebow-search-bar-filters')\nexport class AxebowSearchBarFilters extends LitElement {\n @property({ type: Object })\n values: AxebowSearchBarFiltersValues = {\n search: '',\n role: 'all',\n provider: 'all',\n plan: 'all',\n sortBy: 'newToOlder',\n lockable: true\n };\n\n @property({ type: Array }) roleOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) providerOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) planOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) sortOptions: AxebowSearchBarFiltersOption[] = [];\n\n @property({ type: Boolean }) hideSearchAndCreate = false;\n\n @property({ type: String }) createTenantLabel = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) rolePlaceholder = '';\n @property({ type: String }) providerPlaceholder = '';\n @property({ type: String }) planPlaceholder = '';\n @property({ type: String }) clearAllLabel = '';\n\n private get _activeControlsCount() {\n const { search, role, provider, plan } = this.values;\n return [search !== '', role !== 'all', provider !== 'all', plan !== 'all'].filter(Boolean).length;\n }\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n width: 100%;\n }\n axebow-button:hover axebow-icon {\n --icon-btn-color: var(--axebow-gray);\n }\n sl-select::part(combobox):hover {\n border-color: black;\n }\n sl-input::part(base):hover {\n border-color: black;\n }\n .clear-all-link {\n cursor: pointer;\n color: var(--axebow-tertiary);\n font-size: 0.875rem;\n text-decoration: underline;\n }\n .clear-all-link:hover {\n opacity: 0.75;\n }\n .create-tenant-button::part(base) {\n font-size: 0.875rem !important;\n }\n .filter-select::part(combobox) {\n height: 2.5rem !important;\n min-height: 2.5rem !important;\n }\n .filter-select[lockable][has-value]::part(expand-icon) {\n display: none !important;\n }\n .filter-select[lockable][has-value]::part(combobox) {\n pointer-events: none;\n }\n .filter-select[lockable][has-value]::part(clear-button),\n .filter-select[lockable][has-value]::part(clear-icon) {\n pointer-events: auto;\n }\n .filter-select:not([has-value])::part(clear-button) {\n display: none !important;\n }\n `,\n ];\n\n private _dispatch(key: keyof AxebowSearchBarFiltersValues, value: string) {\n this.values = { ...this.values, [key]: value };\n this.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: { key, value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _onSearchChange(e: CustomEvent<{ value: string }>) {\n this._dispatch('search', e.detail.value);\n }\n\n updated(changedProperties: any) {\n super.updated(changedProperties);\n this._updateHasValueAttributes();\n }\n\n private _updateHasValueAttributes() {\n const selects = this.shadowRoot?.querySelectorAll('sl-select');\n selects?.forEach((select) => {\n const isLockable = select.hasAttribute('lockable');\n const val = (select as any).value;\n const hasValue = isLockable && val && val !== 'all' && val !== '';\n if (hasValue) {\n select.setAttribute('has-value', '');\n } else {\n select.removeAttribute('has-value');\n }\n });\n }\n\n private _onSelectShow(e: CustomEvent) {\n const target = e.target as any;\n if (target.hasAttribute('lockable') && target.hasAttribute('has-value')) {\n target.hide();\n }\n }\n\n private _onSelectChange(e: CustomEvent, key: keyof AxebowSearchBarFiltersValues) {\n const target = e.target as any;\n const value = target.value;\n const isLockable = target.hasAttribute('lockable');\n const hasValue = isLockable && value && value !== 'all' && value !== '';\n if (hasValue) {\n target.setAttribute('has-value', '');\n } else {\n target.removeAttribute('has-value');\n }\n this._dispatch(key, value || 'all');\n }\n\n private _onSelectClear(key: keyof AxebowSearchBarFiltersValues) {\n this._dispatch(key, 'all');\n }\n\n private _onCreateTenant() {\n this.dispatchEvent(new CustomEvent('create-tenant', { bubbles: true, composed: true }));\n }\n\n private _onClearAll() {\n this.dispatchEvent(new CustomEvent('clear-all', { bubbles: true, composed: true }));\n }\n\n render() {\n const showClearAll = this._activeControlsCount >= 2;\n const isLockable = this.values.lockable !== false;\n const roleValue = this.values.role !== 'all' ? this.values.role : '';\n const providerValue = this.values.provider !== 'all' ? this.values.provider : '';\n const planValue = this.values.plan !== 'all' ? this.values.plan : '';\n\n return html`\n <div>\n <div class=\"flex items-center gap-4 mb-2\">\n ${!this.hideSearchAndCreate\n ? html`\n <axebow-button\n variant=\"primary\"\n outline\n class=\"create-tenant-button\"\n fixedWidth=\"9rem\"\n fixedHeight=\"2.5rem\"\n paddingRight=\"0.5rem\"\n @click=${this._onCreateTenant}\n >\n ${this.createTenantLabel}\n <axebow-icon\n slot=\"suffix\"\n iconName=\"add\"\n iconColor=\"var(--icon-btn-color, var(--axebow-tertiary))\"\n ></axebow-icon>\n </axebow-button>\n\n <axebow-search\n placeholder=${this.searchPlaceholder}\n .value=${this.values.search}\n width=\"26.25rem\"\n height=\"2.5rem\"\n @search-change=${this._onSearchChange}\n ></axebow-search>\n `\n : ''}\n\n <sl-select\n placeholder=${this.rolePlaceholder}\n .value=${roleValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && roleValue && roleValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'role')}\n @sl-clear=${() => this._onSelectClear('role')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.roleOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n\n <sl-select\n placeholder=${this.providerPlaceholder}\n .value=${providerValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && providerValue && providerValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'provider')}\n @sl-clear=${() => this._onSelectClear('provider')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.providerOptions.map(\n (opt) => html`\n <sl-option value=\"${opt.value}\">\n <span class=\"flex items-center w-full gap-1\">\n ${opt.logo\n ? html`<img src=\"${opt.logo}\" alt=\"${opt.label}\" class=\"h-4 w-auto object-contain\" />`\n : ''}\n ${opt.label}\n </span>\n </sl-option>\n `\n )}\n </sl-select>\n\n <sl-select\n placeholder=${this.planPlaceholder}\n .value=${planValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && planValue && planValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'plan')}\n @sl-clear=${() => this._onSelectClear('plan')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.planOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n\n <sl-select\n .value=${this.values.sortBy}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'sortBy')}\n class=\"w-33.25 h-10 filter-select\"\n >\n ${this.sortOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n </div>\n\n ${showClearAll\n ? html`\n <div class=\"flex justify-end mb-2\">\n <axebow-button variant=\"text\" @click=${this._onClearAll}>${this.clearAllLabel}</axebow-button>\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-quick-action-card')\nexport class AxebowQuickActionCard extends LitElement {\n static styles = [unsafeCSS(tailwindCss), css`:host { display: block; }`];\n\n @property({ type: String }) icon = '';\n @property({ type: String }) label = '';\n\n render() {\n return html`\n <div\n class=\"flex flex-col items-center justify-center gap-1 w-[10.5rem] px-4 py-3 rounded bg-white hover:bg-(--axebow-base) cursor-pointer transition-colors duration-150\"\n @click=${this._onClick}\n >\n <axebow-icon iconName=${this.icon} iconColor=\"var(--axebow-primary)\" size=\"xl\"></axebow-icon>\n <span class=\"text-base font-semibold text-(--axebow-primary) text-center whitespace-nowrap\">${this.label}</span>\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('card-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-quick-action-card.js';\n\nexport interface QuickAction {\n icon: string;\n label: string;\n visible: boolean;\n onClick: () => void;\n}\n\n/**\n * Trigger + flyout panel. Drops below the trigger, offset by the trigger's own\n * width so it clears the sidebar column instead of appearing underneath it.\n * First 3 actions render as the infra-creation row, the rest as the\n * deploy/service row (wraps after 3 to match the 168px card width).\n */\n@customElement('axebow-quick-actions')\nexport class AxebowQuickActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n\n @media (max-height: 720px) {\n .quick-actions-label {\n display: none !important;\n }\n }\n `,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: Array }) actions: QuickAction[] = [];\n\n @state() private open = false;\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this.open && !this.contains(e.target as Node)) {\n this.open = false;\n }\n };\n\n private _toggle(e: Event) {\n e.stopPropagation();\n this.open = !this.open;\n }\n\n private _select(action: QuickAction) {\n action.onClick();\n this.open = false;\n }\n\n render() {\n const row1 = this.actions.slice(0, 3).filter((a) => a.visible);\n const row2 = this.actions.slice(3, 7).filter((a) => a.visible);\n\n return html`\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"group relative flex flex-col items-center justify-center gap-1 w-20 h-16 border-none cursor-pointer transition-colors duration-150 ${this\n .open\n ? 'bg-(--axebow-base)'\n : 'bg-(--axebow-primary) hover:bg-(--axebow-base)'}\"\n @click=${this._toggle}\n >\n <span\n class=\"flex flex-col items-center justify-center gap-1 ${this.open\n ? 'text-(--axebow-primary)'\n : 'text-white group-hover:text-(--axebow-primary)'}\"\n >\n <axebow-icon iconName=${this.open ? 'close' : 'apps'} iconColor=\"currentColor\" size=\"xl\"></axebow-icon>\n <span\n class=\"quick-actions-label text-xs whitespace-nowrap ${this.open ? 'font-semibold' : 'font-normal group-hover:font-semibold'}\"\n >${this.label}</span\n >\n </span>\n <span\n class=\"absolute top-1/2 -translate-y-1/2 left-[calc(100%+10px)] -translate-x-1 opacity-0 group-hover:opacity-100 group-hover:translate-x-0 text-base transition-all duration-120 bg-(--axebow-primary-light) text-(--axebow-primary) font-semibold leading-none px-3.5 py-2 rounded-md whitespace-nowrap shadow-[0_6px_16px_rgba(13,24,33,0.18)] pointer-events-none z-2001\"\n >${this.label}</span\n >\n </button>\n\n ${this.open\n ? html`\n <div\n class=\"absolute top-full left-full mt-2 z-2000 flex flex-col gap-1 p-1 bg-white border border-solid border-(--axebow-light-gray) rounded-md axebow-shadow\"\n >\n <div class=\"flex gap-1\">\n ${row1.map(\n (action) => html`\n <axebow-quick-action-card\n icon=${action.icon}\n label=${action.label}\n @card-click=${() => this._select(action)}\n ></axebow-quick-action-card>\n `\n )}\n </div>\n ${row2.length\n ? html`\n <div class=\"h-px w-full bg-(--axebow-light-gray)\"></div>\n <div class=\"flex flex-wrap gap-x-1 gap-y-0.75\">\n ${row2.map(\n (action) => html`\n <axebow-quick-action-card\n icon=${action.icon}\n label=${action.label}\n @card-click=${() => this._select(action)}\n ></axebow-quick-action-card>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport '@shoelace-style/shoelace/dist/components/tab-group/tab-group.js';\nimport '@shoelace-style/shoelace/dist/components/tab/tab.js';\nimport '@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js';\n\nexport interface ProfileMenuItem {\n name: string;\n onClick: () => void;\n}\n\nexport interface NotificationAction {\n label: string;\n color: string;\n action: () => void;\n}\n\nexport interface FormattedNotificationVM {\n id: string;\n title: string;\n description: string;\n icon: string;\n color: string;\n status: 'read' | 'unread';\n date: string;\n callToAction: boolean;\n actions?: NotificationAction[];\n onClick: () => void;\n}\n\n/**\n * Right-hand header cluster: notifications dropdown + profile menu.\n */\n@customElement('axebow-header-actions')\nexport class AxebowHeaderActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-dropdown::part(panel) {\n max-width: 500px;\n }\n .notification-description code {\n display: inline-block;\n white-space: pre-wrap;\n word-break: break-all;\n }\n .notification-description pre {\n white-space: pre-wrap;\n }\n `,\n ];\n\n @property({ type: String }) userName = '';\n @property({ type: Array }) profileMenuItems: ProfileMenuItem[] = [];\n @property({ type: String }) logoutLabel = '';\n @property({ attribute: false }) onLogout: () => void = () => {};\n @property({ type: String }) notificationsLabel = '';\n @property({ type: Array }) notifications: FormattedNotificationVM[] = [];\n @property({ type: Array }) actionNeededNotifications: FormattedNotificationVM[] = [];\n @property({ type: String }) myNotificationsTabLabel = '';\n @property({ type: String }) actionNeededTabLabel = '';\n @property({ type: String }) noNotificationsLabel = '';\n @property({ type: String }) noUnreadNotificationsLabel = '';\n @property({ type: String }) noActionNotificationsLabel = '';\n @property({ type: String }) showUnreadOnlyLabel = '';\n @property({ type: String }) onLabel = '';\n @property({ type: String }) offLabel = '';\n @property({ type: String }) markAllAsReadLabel = '';\n @property({ attribute: false }) onMarkAllAsRead: () => void = () => {};\n\n @state() private showUnreadOnly = false;\n\n private handleShowUnreadOnlyChange(e: any) {\n this.showUnreadOnly = e.target.checked;\n }\n\n render() {\n const unreadNotifications = this.notifications.filter((n) => n.status === 'unread');\n const notificationsToShow = this.showUnreadOnly ? unreadNotifications : this.notifications;\n\n return html`\n <div class=\"flex items-center gap-2 z-10 shrink-0 min-w-0 ml-auto\">\n <sl-dropdown>\n <div\n class=\"relative group w-9 h-9 rounded-md flex items-center justify-center cursor-pointer transition-colors duration-150 hover:bg-(--axebow-primary)\"\n slot=\"trigger\"\n >\n <span class=\"inline-block transition-transform duration-200 group-hover:rotate-15\">\n <axebow-icon iconName=\"notifications\" iconColor=\"white\"></axebow-icon>\n </span>\n ${unreadNotifications.length > 0\n ? html`<div\n class=\"absolute bottom-0.5 right-0.5 flex items-center justify-center rounded-full bg-(--axebow-error) text-white font-bold z-10 pointer-events-none ${unreadNotifications.length <\n 10\n ? 'w-4 h-4 text-sm'\n : 'h-4 min-w-4 px-0.5 text-sm'}\"\n >\n ${unreadNotifications.length > 99 ? '99+' : unreadNotifications.length}\n </div>`\n : ''}\n <span\n class=\"absolute top-1/2 -translate-y-1/2 right-[calc(100%+10px)] translate-x-1 opacity-0 group-hover:opacity-100 group-hover:translate-x-0 text-base transition-all duration-120 bg-(--axebow-primary-light) text-(--axebow-primary) font-semibold leading-none px-3.5 py-2 rounded-md whitespace-nowrap shadow-[0_6px_16px_rgba(13,24,33,0.18)] pointer-events-none z-2001\"\n >${this.notificationsLabel}</span\n >\n </div>\n <sl-tab-group class=\"bg-white rounded-md w-120 text-base\">\n <sl-tab slot=\"nav\" panel=\"my_notifications\">${this.myNotificationsTabLabel}</sl-tab>\n <sl-tab slot=\"nav\" panel=\"action_needed\">${this.actionNeededTabLabel}</sl-tab>\n\n <sl-tab-panel class=\"bg-gray-100\" name=\"my_notifications\">\n <div class=\"flex flex-col gap-2 px-4 max-h-[40vh] overflow-auto w-full\">\n ${this.notifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center w-117\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noNotificationsLabel}</p>\n </div>`\n : html`\n <div class=\"flex flex-col text-black gap-4\">\n <div class=\"flex justify-between items-center flex-wrap gap-4\">\n <div class=\"flex items-center py-1\">\n <p class=\"mr-4 text-base\">${this.showUnreadOnlyLabel}</p>\n <sl-switch @sl-change=${(e: any) => this.handleShowUnreadOnlyChange(e)}></sl-switch>\n <p class=\"italic text-gray-400 text-base\">\n ${this.showUnreadOnly ? this.onLabel : this.offLabel}\n </p>\n </div>\n <button class=\"text-gray-500 cursor-pointer text-base\" @click=${() => this.onMarkAllAsRead()}>\n ${this.markAllAsReadLabel}\n </button>\n </div>\n ${this.showUnreadOnly && unreadNotifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center w-117\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noUnreadNotificationsLabel}</p>\n </div>`\n : html` ${notificationsToShow.map((item) => this.renderNotificationCard(item))} `}\n </div>\n `}\n </div>\n </sl-tab-panel>\n <sl-tab-panel class=\"bg-gray-100\" name=\"action_needed\">\n <div class=\"flex flex-col gap-2 px-4 max-h-[40vh] overflow-auto w-full\">\n ${this.actionNeededNotifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center p-4\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noActionNotificationsLabel}</p>\n </div>`\n : html`\n <div class=\"flex flex-col text-black gap-4\">\n ${this.actionNeededNotifications.map((item) => this.renderNotificationCard(item))}\n </div>\n `}\n </div>\n </sl-tab-panel>\n </sl-tab-group>\n </sl-dropdown>\n <sl-dropdown class=\"shrink-0\">\n <div\n slot=\"trigger\"\n class=\"group flex items-center gap-2 h-9 px-3 rounded-md text-white font-semibold cursor-pointer whitespace-nowrap transition-all duration-150 hover:bg-white hover:text-(--axebow-primary) hover:shadow-[0_2px_6px_rgba(13,24,33,0.14)] text-base\"\n >\n <span class=\"text-white group-hover:text-(--axebow-primary) transition-colors duration-150\">\n <axebow-icon iconName=\"account_circle\" iconColor=\"currentColor\" size=\"xl\"></axebow-icon>\n </span>\n ${this.userName}\n </div>\n <sl-menu class=\"bg-white rounded-md p-2 min-w-55 axebow-shadow\">\n ${this.profileMenuItems.map(\n (item) => html`\n <button\n class=\"w-full flex text-base items-center justify-between ml-auto px-4 py-2 cursor-pointer rounded-md hover:bg-gray-200 transition-colors ease-in-out duration-200 hover:text-(--axebow-tertiary)\"\n @click=${() => item.onClick()}\n >\n <span class=\"text-(--axebow-primary)\">${item.name}</span>\n <axebow-icon iconName=\"arrow_right_alt\" size=\"xl\"></axebow-icon>\n </button>\n `\n )}\n <button\n class=\"ml-auto flex items-center justify-between w-full px-4 py-2 text-(--axebow-error) cursor-pointer rounded-md text-base\"\n @click=${() => this.onLogout()}\n >\n <span class=\"text-(--axebow-error) mt-1\">${this.logoutLabel}</span>\n <axebow-icon iconName=\"mode_off_on\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>\n </button>\n </sl-menu>\n </sl-dropdown>\n </div>\n `;\n }\n\n private renderNotificationCard(item: FormattedNotificationVM) {\n return html`\n <div\n class=\"relative flex gap-2 p-2 w-full rounded-md border-2 border-solid text-base ${item.status === 'unread'\n ? 'border-gray-500 hover:border-(--axebow-tertiary) text-gray-600'\n : 'border-gray-300 text-gray-400'} \"\n @click=${() => item.onClick()}\n >\n ${item.status === 'unread'\n ? html` <div class=\"absolute top-[-7px] left-[-7px] h-3.5 w-3.5 rounded-full bg-(--axebow-success)\"></div>`\n : ''}\n <axebow-icon\n iconName=${item.icon}\n size=\"xl\"\n iconColor=${item.status === 'unread' ? item.color : 'gray'}\n ></axebow-icon>\n <div class=\"flex flex-1 flex-col gap-1 py-1.25 min-w-0 overflow-hidden\">\n <div class=\"flex justify-between gap-2\">\n <h4 class=\"font-semibold wrap-break-word\">${item.title}</h4>\n <span class=\"ms-auto min-w-fit shrink-0 text-gray-400\">${item.date}</span>\n </div>\n <div\n class=\"notification-description leading-tight max-w-full pe-4 overflow-x-hidden overflow-y-auto max-h-75 wrap-break-word\"\n .innerHTML=${item.description}\n ></div>\n ${item.actions && item.actions.length > 0\n ? html`\n <div class=\"flex gap-4 ml-auto pe-4 flex-wrap\">\n ${item.actions.map(\n (action) => html`\n <button class=\"text-sm font-semibold text-[${action.color}] hover:underline\" @click=${action.action}>\n ${action.label}\n </button>\n `\n )}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport './parts/axebow-quick-actions.js';\nimport './parts/axebow-header-actions.js';\nimport type { QuickAction } from './parts/axebow-quick-actions.js';\nimport type { ProfileMenuItem, FormattedNotificationVM } from './parts/axebow-header-actions.js';\n\n/**\n * Purely presentational app header. Receives fully-resolved data and\n * callback props; quick-actions open state and the notifications\n * unread-only filter are owned by their respective sub-components.\n */\n@customElement('axebow-header')\nexport class AxebowHeader extends LitElement {\n @property({ type: Boolean, reflect: true }) minimal = false;\n @property({ type: String }) logoUrl = '';\n @property({ type: String }) logoAlt = '';\n @property({ attribute: false }) onLogoClick: () => void = () => {};\n @property({ type: String }) userName = '';\n @property({ type: String }) quickActionsLabel = '';\n @property({ type: Array }) quickActions: QuickAction[] = [];\n @property({ type: Array }) profileMenuItems: ProfileMenuItem[] = [];\n @property({ type: String }) logoutLabel = '';\n @property({ attribute: false }) onLogout: () => void = () => {};\n @property({ type: String }) notificationsLabel = '';\n @property({ type: Array }) notifications: FormattedNotificationVM[] = [];\n @property({ type: Array }) actionNeededNotifications: FormattedNotificationVM[] = [];\n @property({ type: String }) myNotificationsTabLabel = '';\n @property({ type: String }) actionNeededTabLabel = '';\n @property({ type: String }) noNotificationsLabel = '';\n @property({ type: String }) noUnreadNotificationsLabel = '';\n @property({ type: String }) noActionNotificationsLabel = '';\n @property({ type: String }) showUnreadOnlyLabel = '';\n @property({ type: String }) onLabel = '';\n @property({ type: String }) offLabel = '';\n @property({ type: String }) markAllAsReadLabel = '';\n @property({ attribute: false }) onMarkAllAsRead: () => void = () => {};\n\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n render() {\n return html`\n <header class=\"relative flex items-center justify-between h-full pe-4 py-2\">\n ${this.minimal\n ? html`\n <div\n class=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-5 cursor-pointer hover:opacity-80 transition-opacity duration-200\"\n @click=${() => this.onLogoClick()}\n >\n <div class=\"flex items-center gap-2 text-white\">\n <img src=\"${this.logoUrl}\" alt=\"${this.logoAlt}\" class=\"h-10\" />\n </div>\n </div>\n `\n : html`\n <axebow-quick-actions .label=${this.quickActionsLabel} .actions=${this.quickActions}></axebow-quick-actions>\n\n <div\n class=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-5 cursor-pointer hover:opacity-80 transition-opacity duration-200\"\n @click=${() => this.onLogoClick()}\n >\n <div class=\"flex items-center gap-2 text-white\">\n <img src=\"${this.logoUrl}\" alt=\"${this.logoAlt}\" class=\"h-10\" />\n </div>\n </div>\n\n <axebow-header-actions\n .userName=${this.userName}\n .profileMenuItems=${this.profileMenuItems}\n .logoutLabel=${this.logoutLabel}\n .onLogout=${this.onLogout}\n .notificationsLabel=${this.notificationsLabel}\n .notifications=${this.notifications}\n .actionNeededNotifications=${this.actionNeededNotifications}\n .myNotificationsTabLabel=${this.myNotificationsTabLabel}\n .actionNeededTabLabel=${this.actionNeededTabLabel}\n .noNotificationsLabel=${this.noNotificationsLabel}\n .noUnreadNotificationsLabel=${this.noUnreadNotificationsLabel}\n .noActionNotificationsLabel=${this.noActionNotificationsLabel}\n .showUnreadOnlyLabel=${this.showUnreadOnlyLabel}\n .onLabel=${this.onLabel}\n .offLabel=${this.offLabel}\n .markAllAsReadLabel=${this.markAllAsReadLabel}\n .onMarkAllAsRead=${this.onMarkAllAsRead}\n ></axebow-header-actions>\n `}\n </header>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\n\nexport interface NavItem {\n key: string;\n label: string;\n icon: string;\n onClick: () => void;\n isRoot?: boolean;\n openInNewTab?: boolean;\n}\n\nexport interface NavDivider {\n divider: true;\n}\n\nexport type SidebarEntry = NavItem | NavDivider;\n\n/**\n * Purely presentational app sidebar. Receives fully-resolved nav entries,\n * the currently-selected item key, and the reserved bottom padding (driven\n * by the app's own footer-height tracking); owns only hover-tooltip UI\n * state.\n */\n@customElement('axebow-sidebar')\nexport class AxebowSidebar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n position: relative;\n width: 5rem;\n display: block;\n height: 100%;\n overflow: hidden;\n }\n\n .sidebar-nav {\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n transition: padding-bottom 150ms ease-out;\n scrollbar-width: none;\n }\n\n .sidebar-nav::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-height: 720px) {\n .compact-divider {\n display: block !important;\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .nav-item {\n height: 2.375rem !important;\n }\n\n .nav-label {\n display: none !important;\n }\n\n .bottom-item {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .bottom-label {\n display: none !important;\n }\n\n .sidebar-divider {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n }\n `,\n ];\n\n @property({ type: Array }) items: SidebarEntry[] = [];\n @property({ type: Array }) bottomItems: NavItem[] = [];\n @property({ type: String }) selectedKey: string | null = null;\n @property({ type: Number }) paddingBottom = 10;\n\n @state() private hoveredItem: NavItem | null = null;\n @state() private tooltipTop = 0;\n @state() private tooltipLeft = 0;\n\n private handleMouseEnter(event: MouseEvent, item: NavItem) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.tooltipTop = rect.top + 10;\n this.tooltipLeft = rect.right - 8;\n this.hoveredItem = item;\n }\n\n private handleMouseLeave() {\n this.hoveredItem = null;\n }\n\n private _isSelected(item: NavItem): boolean {\n return this.selectedKey === item.key || (!!item.isRoot && this.selectedKey === null);\n }\n\n render() {\n return html`\n <nav\n style=\"padding-bottom: ${this.paddingBottom}px;\"\n class=\"sidebar-nav h-full flex flex-col justify-between overflow-hidden pt-2\"\n >\n <ul class=\"flex flex-col gap-0 w-full pb-1\">\n ${this.items.map((entry) =>\n 'divider' in entry\n ? html` <sl-divider class=\"sidebar-divider w-[calc(100%-10px)] mx-auto my-1.5 h-px bg-(--axebow-light-gray)\"></sl-divider> `\n : this._renderNavItem(entry, this._isSelected(entry))\n )}\n <sl-divider class=\"compact-divider hidden w-[calc(100%-10px)] mx-auto my-1.5 h-px bg-(--axebow-light-gray)\"></sl-divider>\n </ul>\n <ul class=\"flex flex-col gap-0 w-full\">\n ${this.bottomItems.map((item) => this._renderBottomItem(item))}\n </ul>\n </nav>\n\n ${this.hoveredItem\n ? html`\n <div\n class=\"fixed ps-4 flex items-center pointer-events-none z-9999\"\n style=\"left: ${this.tooltipLeft}px; top: ${this.tooltipTop}px; height: 3rem;\"\n >\n <span\n class=\"flex items-center gap-1 px-2 py-1 bg-white rounded-md text-base border border-solid border-(--axebow-gray) shadow-lg\"\n >${this.hoveredItem.label}${this.hoveredItem.openInNewTab\n ? html`<axebow-icon iconName=\"open_in_new\" size=\"sm\"></axebow-icon>`\n : ''}</span\n >\n </div>\n `\n : ''}\n `;\n }\n\n private _renderNavItem(item: NavItem, selected: boolean) {\n return html`\n <li\n class=\"nav-item ${selected\n ? 'bg-(--axebow-base) rounded-l-xl cursor-default'\n : 'cursor-pointer'} flex flex-col w-full h-16 items-center justify-center relative group\"\n @click=\"${() => item.onClick()}\"\n @mouseenter=\"${(e: MouseEvent) => this.handleMouseEnter(e, item)}\"\n @mouseleave=\"${() => this.handleMouseLeave()}\"\n title=\"${item.label}\"\n >\n <div class=\"flex flex-col items-center justify-center\">\n <axebow-icon iconName=\"${item.icon}\" size=\"xl\"></axebow-icon>\n <span class=\"nav-label text-xs overflow-hidden whitespace-nowrap opacity-100 max-w-full\">${item.label}</span>\n </div>\n\n ${!selected\n ? html`\n <div\n class=\"absolute top-0 right-0 h-full w-2.5 rounded-l-xl bg-(--axebow-base) opacity-0 group-hover:opacity-100 pointer-events-none transition-opacity duration-200\"\n ></div>\n `\n : ''}\n </li>\n `;\n }\n\n private _renderBottomItem(item: NavItem) {\n return html`\n <li\n class=\"bottom-item flex flex-col w-full items-center justify-center cursor-pointer relative group\"\n @click=\"${() => item.onClick()}\"\n @mouseenter=\"${(e: MouseEvent) => this.handleMouseEnter(e, item)}\"\n @mouseleave=\"${() => this.handleMouseLeave()}\"\n title=\"${item.label}\"\n >\n <div class=\"flex flex-col items-center justify-center py-2.5\">\n <axebow-icon iconName=\"${item.icon}\" size=\"xl\"></axebow-icon>\n <span class=\"bottom-label text-sm overflow-hidden whitespace-nowrap opacity-100 max-w-full\"\n >${item.label}${item.openInNewTab\n ? html`<axebow-icon iconName=\"open_in_new\" size=\"sm\"></axebow-icon>`\n : ''}</span\n >\n </div>\n\n <div\n class=\"absolute top-0 right-0 h-full w-2.5 rounded-l-xl bg-(--axebow-base) opacity-0 group-hover:opacity-100 pointer-events-none transition-opacity duration-200\"\n ></div>\n </li>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport interface FooterLink {\n label: string;\n url: string;\n onClick: () => void;\n}\n\n/**\n * Purely presentational site footer. Receives already-filtered, already\n * translated links; owns only the footer-height broadcast used by\n * axebow-sidebar to reserve bottom padding.\n */\n@customElement('axebow-footer')\nexport class AxebowFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n position: relative;\n z-index: 1001;\n overflow: hidden;\n }\n `,\n ];\n\n @property({ type: Array }) links: FooterLink[] = [];\n\n private resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(() => {\n this.emitFooterHeight();\n });\n this.resizeObserver.observe(this);\n window.addEventListener('resize', this.emitFooterHeight);\n window.addEventListener('scroll', this.emitFooterHeight, true);\n setTimeout(() => this.emitFooterHeight(), 0);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver?.disconnect();\n window.removeEventListener('resize', this.emitFooterHeight);\n window.removeEventListener('scroll', this.emitFooterHeight, true);\n }\n\n private emitFooterHeight = () => {\n const rect = this.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n let visible = 0;\n if (rect.top < windowHeight && rect.bottom > 0) {\n const visibleBottom = Math.min(rect.bottom, windowHeight);\n const visibleTop = Math.max(rect.top, 0);\n visible = visibleBottom - visibleTop;\n }\n visible = Math.max(0, visible);\n this.dispatchEvent(\n new CustomEvent('footer-height-changed', {\n detail: { height: visible },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n render() {\n return html`\n <footer\n class=\"text-center text-sm flex w-full bg-(--axebow-primary) text-white justify-center items-center h-8 px-2 md:gap-8 gap-4 flex-wrap\"\n >\n ${this.links.map(\n (link) => html`\n <button\n class=\"h-7 text-sm p-1 inline-flex items-center gap-1 opacity-70 hover:opacity-100 transition-opacity duration-150 text-(--axebow-anti-flash-white) bg-transparent border-0 cursor-pointer\"\n @click=${link.onClick}\n >\n ${link.label}\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-anti-flash-white)\" size=\"md\"></axebow-icon>\n </button>\n `\n )}\n </footer>\n `;\n }\n}\n","import tailwindCss from \"../../styles/tailwind.css?inline\";\nimport { LitElement, html, css, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport \"../axebow-icon/axebow-icon.js\";\n\nexport interface BreadcrumbSecondaryPage {\n label: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational page breadcrumb: optional home block, optional\n * clickable secondary-page trail, the current page title, and an optional\n * \"required field\" note. Receives all copy and navigation as properties.\n */\n@customElement(\"axebow-breadcrumb-header\")\nexport class AxebowBreadcrumbHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Boolean }) padded = false;\n @property({ type: String }) paddingBottom = \"2rem\";\n @property({ type: Boolean }) showHomeBlock = true;\n @property({ attribute: false }) onHomeClick: () => void = () => {};\n @property({ type: Boolean }) showSecondaryPages = false;\n @property({ type: Array }) secondaryPages: BreadcrumbSecondaryPage[] = [];\n @property({ type: String }) mainPage = \"\";\n @property({ type: Boolean }) showRequiredField = false;\n @property({ type: String }) requiredFieldLabel = \"\";\n\n render() {\n return html`\n <div\n class=\"flex flex-col gap-1 pt-8 ${this.padded ? \"ps-8\" : \"\"}\"\n style=\"padding-bottom: ${this.paddingBottom};\"\n >\n <div\n class=\"flex flex-wrap items-center gap-2 text-xl text-(--axebow-primary)\"\n >\n ${this.showHomeBlock\n ? html`\n <span\n class=\"flex items-center gap-2 cursor-pointer\"\n @click=${() => this.onHomeClick()}\n >\n <axebow-icon\n iconName=\"home\"\n iconColor=\"var(--axebow-primary)\"\n size=\"xl\"\n style=\"display: inline-flex; align-items: center; justify-content: center;\"\n ></axebow-icon>\n <span class=\"font-normal\">/</span>\n </span>\n `\n : \"\"}\n ${this.showSecondaryPages\n ? this.secondaryPages.map(\n (page) => html`\n <span class=\"flex items-center gap-2\">\n <span\n class=\"font-normal ${page.onClick\n ? \"cursor-pointer hover:underline\"\n : \"\"}\"\n @click=${page.onClick ? () => page.onClick!() : undefined}\n >${page.label}</span\n >\n <span class=\"font-normal\">/</span>\n </span>\n `,\n )\n : \"\"}\n\n <span class=\"font-semibold\">${this.mainPage}</span>\n </div>\n ${this.showRequiredField\n ? html`\n <div class=\"text-sm\">\n <span class=\"font-bold text-(--axebow-error)\">*</span>\n <span class=\"font-normal text-(--axebow-rich-black)\">\n ${this.requiredFieldLabel}</span\n >\n </div>\n `\n : \"\"}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport abstract class AxebowInputBase extends LitElement {\n static baseStyles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-input,\n sl-select {\n width: 100%;\n }\n sl-input::part(base),\n sl-select::part(combobox) {\n --sl-input-focus-ring-color: transparent;\n --sl-color-primary-600: transparent;\n --sl-input-border-color-focus: transparent;\n border-radius: 0.375rem;\n }\n .input-error sl-input,\n .input-error sl-select {\n --sl-input-border-color: var(--axebow-error, #e53e3e);\n --sl-input-border-color-focus: var(--axebow-error, #e53e3e);\n --sl-input-border-color-hover: var(--axebow-error, #e53e3e);\n }\n .input-error sl-input::part(base),\n .input-error sl-select::part(combobox) {\n --sl-input-border-color-focus: var(--axebow-error, #e53e3e);\n }\n .input-error sl-input::part(input),\n .input-error sl-select::part(display-input) {\n color: var(--axebow-error, #e53e3e);\n }\n\n /* Shared anatomy for the labeled, non-compact case across every\n concrete input: label 17px tall, 4px gap to an optional\n description (also 17px tall, omitted entirely when absent - no\n reserved blank space), 8px gap to the 40px field box. 265.5px\n (16.59375rem) is the floor width - it grows with whatever space\n the parent gives it. Each concrete input only supplies its own\n field-specific 40px-height rule for its control element. */\n .fixed-field {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 16.59375rem;\n }\n .fixed-field .field-label,\n .fixed-field .field-description {\n width: 100%;\n height: 1.0625rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n .fixed-field .field-label {\n margin-bottom: 0.25rem;\n }\n .fixed-field .field-description {\n margin-bottom: 0.5rem;\n }\n .fixed-field.wrap-description .field-description {\n height: 2.125rem;\n white-space: normal;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) hasError = false;\n @property({ type: String }) errorMessage = '';\n @property({ type: Number }) maxlength?: number;\n @property({ attribute: false }) callback?: (e: Event) => void;\n @property({ type: Boolean }) compact = false;\n @property({ type: Boolean }) wrapDescription = false;\n\n protected handleChange(e: Event) {\n if (this.disabled) return;\n const target = e.target as HTMLInputElement | HTMLSelectElement;\n this.value = target.value;\n this.callback?.(e);\n }\n\n protected renderWrapper(content: TemplateResult): TemplateResult {\n return html`\n <div class=\"flex flex-col justify-end w-full relative\">\n ${!this.compact || this.label\n ? html`<div\n class=\"flex items-baseline gap-2\"\n style=\"margin-bottom: ${this.description\n ? 'var(--axebow-input-label-gap, 1rem)'\n : 'var(--axebow-input-field-gap, 0.5rem)'}\"\n >\n ${this.required ? html`<p class=\"text-(--axebow-error)\">*</p>` : ''}\n <h4 class=\"${this.compact ? 'font-normal text-sm' : 'font-semibold text-base'}\">${this.label}</h4>\n </div>`\n : ''}\n ${this.description\n ? html`<p\n class=\"text-m font-semibold overflow-hidden line-clamp-2\"\n style=\"\n margin-bottom: var(--axebow-input-description-gap, 0.75rem);\n height: var(--axebow-input-description-height, 3rem);\n width: var(--axebow-input-description-width, 100%);\n \"\n title=\"${this.description}\"\n >\n ${this.description}\n </p>`\n : ''}\n ${content}\n ${!this.compact && this.hasError && this.errorMessage\n ? html`<div\n class=\"min-h-5 text-(--axebow-error) text-sm flex items-center gap-1\"\n style=\"margin-top: 0.75rem\"\n >\n <span class=\"text-base shrink-0\"\n ><axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\"></axebow-icon\n ></span>\n ${this.errorMessage}\n </div>`\n : ''}\n </div>\n `;\n }\n\n protected renderFixedField(content: TemplateResult): TemplateResult {\n return html`\n <div class=\"fixed-field ${this.wrapDescription ? 'wrap-description' : ''}\">\n ${this.label\n ? html`<div class=\"flex items-baseline gap-2 field-label\">\n ${this.required\n ? html`<p class=\"text-(--axebow-error) text-base leading-4.25 m-0\">*</p>`\n : ''}\n <h4 class=\"font-semibold text-base leading-4.25 m-0 overflow-hidden text-ellipsis\">\n ${this.label}\n </h4>\n </div>`\n : ''}\n ${this.description\n ? html`<p\n class=\"field-description text-base font-semibold leading-4.25 m-0\"\n title=\"${this.wrapDescription ? '' : this.description}\"\n >\n ${this.description}\n </p>`\n : ''}\n ${content}\n ${this.hasError && this.errorMessage\n ? html`<div class=\"mt-1 min-h-5 text-(--axebow-error) text-sm flex items-center gap-1\">\n <span class=\"text-base shrink-0\"\n ><axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\"></axebow-icon\n ></span>\n ${this.errorMessage}\n </div>`\n : ''}\n </div>\n `;\n }\n}\n","import { html, css } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\n@customElement('axebow-text-input')\nexport class AxebowTextInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n .fixed-field sl-input {\n width: 100%;\n }\n .fixed-field sl-input::part(base) {\n height: 2.5rem;\n }\n .fixed-field sl-input::part(input) {\n font-size: 0.875rem;\n }\n `,\n ];\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const inputContent = html`\n <div class=\"${containerClass}\">\n <sl-input\n @sl-input=\"${this.handleChange}\"\n placeholder=\"${this.placeholder}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n maxlength=\"${this.maxlength ?? 255}\"\n ></sl-input>\n </div>\n `;\n\n return this.compact ? this.renderWrapper(inputContent) : this.renderFixedField(inputContent);\n }\n}\n","import { html, css, PropertyValues } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\n@customElement('axebow-numeric-input')\nexport class AxebowNumericInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-input::part(input)::-webkit-outer-spin-button,\n sl-input::part(input)::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n sl-input::part(input) {\n -moz-appearance: textfield;\n }\n :host(.axebow-fixed-width) sl-input {\n width: var(--axebow-input-width) !important;\n }\n :host(.axebow-fixed-height) sl-input {\n --sl-input-height-medium: var(--axebow-input-height);\n }\n :host(.axebow-fixed-height) sl-input::part(base) {\n height: var(--axebow-input-height) !important;\n box-sizing: border-box;\n }\n :host(.axebow-has-stepper) sl-input::part(base) {\n padding-right: 0;\n }\n :host(.axebow-has-stepper) sl-input::part(suffix) {\n height: 100%;\n margin: 0;\n padding: 0;\n }\n .fixed-field sl-input::part(base) {\n height: 2.5rem;\n }\n :host(.axebow-fixed-min-width) .fixed-field {\n min-width: var(--axebow-input-min-width) !important;\n }\n .axebow-numeric-stepper {\n display: flex;\n flex-direction: column;\n width: 1.375rem !important;\n height: 2.375rem !important;\n border: 1px solid var(--axebow-table-header-border) !important;\n border-radius: 0 0.375rem 0.375rem 0;\n overflow: hidden;\n }\n .axebow-numeric-stepper-btn {\n flex: 1 1 0 !important;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n min-width: 0;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n .axebow-numeric-stepper-btn:first-child {\n border-bottom: 1px solid var(--axebow-table-header-border) !important;\n }\n .axebow-numeric-stepper-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n `,\n ];\n\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Boolean }) integerOnly = false;\n\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: Boolean }) showStepper = true;\n @property({ type: Number }) stepAmount = 1;\n @property({ type: Boolean }) fixedField = false;\n @property({ type: String }) minWidth?: string;\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('fixedWidth')) {\n if (this.fixedWidth) {\n this.style.setProperty('--axebow-input-width', this.fixedWidth);\n this.classList.add('axebow-fixed-width');\n } else {\n this.style.removeProperty('--axebow-input-width');\n this.classList.remove('axebow-fixed-width');\n }\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) {\n this.style.setProperty('--axebow-input-height', this.fixedHeight);\n this.classList.add('axebow-fixed-height');\n } else {\n this.style.removeProperty('--axebow-input-height');\n this.classList.remove('axebow-fixed-height');\n }\n }\n if (changed.has('showStepper')) {\n this.classList.toggle('axebow-has-stepper', this.showStepper);\n }\n if (changed.has('minWidth')) {\n if (this.minWidth) {\n this.style.setProperty('--axebow-input-min-width', this.minWidth);\n this.classList.add('axebow-fixed-min-width');\n } else {\n this.style.removeProperty('--axebow-input-min-width');\n this.classList.remove('axebow-fixed-min-width');\n }\n }\n }\n\n protected handleChange(e: Event) {\n if (this.disabled) return;\n if (this.integerOnly) {\n const target = e.target as HTMLInputElement;\n let truncated = Math.trunc(Number(target.value));\n if (truncated > this.max) {\n truncated = this.max;\n }\n target.value = truncated.toString();\n this.value = target.value;\n this.callback?.(e);\n return;\n }\n super.handleChange(e);\n }\n\n protected handleKeyDown(e: KeyboardEvent) {\n if (this.integerOnly && (e.key === '.' || e.key === ',' || e.key === 'e' || e.key === 'E')) {\n e.preventDefault();\n }\n }\n\n private _bumpValue(sign: 1 | -1) {\n if (this.disabled) return;\n const step = this.integerOnly ? Math.trunc(this.stepAmount) || 1 : this.stepAmount;\n const current = Number(this.value) || 0;\n const next = Math.min(this.max, Math.max(this.min, current + sign * step));\n\n const input = this.renderRoot.querySelector('sl-input') as (HTMLElement & { value: string }) | null;\n if (!input) return;\n input.value = next.toString();\n input.dispatchEvent(new Event('sl-input', { bubbles: true, composed: true }));\n }\n\n private _renderStepper() {\n if (!this.showStepper) return '';\n const current = Number(this.value) || 0;\n return html`\n <div slot=\"suffix\" class=\"axebow-numeric-stepper\">\n <button\n type=\"button\"\n class=\"axebow-numeric-stepper-btn\"\n ?disabled=${this.disabled || current >= this.max}\n aria-label=\"increment\"\n @click=${() => this._bumpValue(1)}\n >\n <axebow-icon iconName=\"add\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </button>\n <button\n type=\"button\"\n class=\"axebow-numeric-stepper-btn\"\n ?disabled=${this.disabled || current <= this.min}\n aria-label=\"decrement\"\n @click=${() => this._bumpValue(-1)}\n >\n <axebow-icon iconName=\"remove\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </button>\n </div>\n `;\n }\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const content = html`\n <div class=\"${containerClass}\">\n <sl-input\n type=\"number\"\n placeholder=\"${this.placeholder}\"\n @sl-input=\"${this.handleChange}\"\n @keydown=\"${this.handleKeyDown}\"\n .value=\"${live(this.value)}\"\n ?disabled=\"${this.disabled}\"\n max=${this.max}\n min=${this.min}\n step=${this.integerOnly ? '1' : 'any'}\n >\n ${this._renderStepper()}\n </sl-input>\n </div>\n `;\n return this.fixedField ? this.renderFixedField(content) : this.renderWrapper(content);\n }\n}\n","import { html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface CheckboxOption {\n value: string;\n label: string;\n}\n\n@customElement('axebow-checkbox-input')\nexport class AxebowCheckboxInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n sl-checkbox::part(base) {\n display: flex;\n align-items: flex-start;\n margin-bottom: 20px;\n margin-top: 0;\n }\n sl-checkbox::part(control) {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n sl-checkbox::part(label) {\n display: flex;\n align-items: center;\n }\n `,\n ];\n\n @property({ type: Array }) options: CheckboxOption[] = [];\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex items-center gap-12 mt-6 ml-12\">\n ${this.options.map(\n (opt) => html`\n <sl-checkbox\n .value=${opt.value}\n .checked=${this.value === opt.value}\n @sl-input=${(e: Event) => {\n if (this.disabled) return;\n this.value = (e.target as HTMLInputElement).value;\n this.requestUpdate();\n this.callback?.(e);\n }}\n ?disabled=${this.disabled}\n >\n ${opt.label}\n </sl-checkbox>\n `\n )}\n </div>\n `);\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-switch-input')\nexport class AxebowSwitchInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 15.5625rem;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) disabled = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n\n private handleChange(e: Event) {\n if (this.disabled) return;\n this.value = (e.target as HTMLInputElement).checked ? 'true' : '';\n this.callback?.(e);\n }\n\n render() {\n return html`\n <div class=\"flex flex-col\">\n <h4 class=\"font-semibold text-base leading-4.25 m-0 h-4.25 overflow-hidden text-ellipsis\">${this.label}</h4>\n <p class=\"text-base leading-4.25 m-0 mt-1 h-8.5 overflow-hidden\">${this.description}</p>\n <sl-switch\n class=\"mt-4.5\"\n style=\"--sl-color-primary-600: var(--axebow-success);\"\n ?checked=${this.value === 'true'}\n ?disabled=${this.disabled}\n @sl-change=${this.handleChange}\n ></sl-switch>\n </div>\n `;\n }\n}\n","import { html, css } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/carousel/carousel.js';\nimport '@shoelace-style/shoelace/dist/components/carousel-item/carousel-item.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface CarouselItem {\n id: string;\n content: string;\n registry?: string;\n name?: string;\n}\n\nconst SELECTOR_MAX_WIDTH_PX = 720;\nconst CARD_WIDTH_PX = 120;\nconst CARD_HEIGHT_PX = 54;\nconst CARD_GAP_PX = 12;\n\nfunction slidesPerPageFor(containerWidthPx: number): number {\n return (containerWidthPx + CARD_GAP_PX) / (CARD_WIDTH_PX + CARD_GAP_PX);\n}\n\n@customElement('axebow-carousel-input')\nexport class AxebowCarouselInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n :host {\n --axebow-input-label-gap: 0.25rem;\n --axebow-input-description-gap: 1rem;\n --axebow-input-description-height: 1.0625rem;\n --axebow-input-description-width: 23.78125rem;\n }\n sl-carousel {\n display: block;\n width: 100%;\n max-width: ${SELECTOR_MAX_WIDTH_PX / 16}rem;\n --slide-gap: ${CARD_GAP_PX}px;\n }\n sl-carousel::part(scroll-container) {\n height: calc(${CARD_HEIGHT_PX / 16}rem + 0.5625rem) !important;\n padding-top: 0.5625rem !important;\n margin-top: -0.5625rem !important;\n }\n sl-carousel-item > div {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n `,\n ];\n\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n\n @state() private _slidesPerPage = slidesPerPageFor(SELECTOR_MAX_WIDTH_PX);\n\n @query('sl-carousel') private _carouselEl?: HTMLElement;\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width;\n if (width) this._slidesPerPage = slidesPerPageFor(width);\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n protected firstUpdated() {\n if (this._carouselEl) this._resizeObserver?.observe(this._carouselEl);\n }\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex flex-wrap justify-between\">\n <sl-carousel\n navigation\n slides-per-page=\"${this._slidesPerPage}\"\n @sl-input=\"${this.handleChange}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n >\n ${this.carouselItems.map((item) =>\n this.carouselItemRenderer\n ? this.carouselItemRenderer(item)\n : html`\n <sl-carousel-item>\n <div\n class=\"rounded-md border-2 border-solid border-transparent p-4 transition-all duration-300 cursor-pointer text-center flex gap-4 items-center\"\n >\n ${item.content}\n </div>\n </sl-carousel-item>\n `\n )}\n </sl-carousel>\n </div>\n `);\n }\n}\n","import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\nimport { CarouselItem } from './axebow-carousel-input.js';\n\n@customElement('axebow-providers-input')\nexport class AxebowProvidersInput extends AxebowInputBase {\n static styles = [...AxebowInputBase.baseStyles];\n\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex flex-wrap gap-3 mt-0\">\n ${this.carouselItems.map((item) =>\n this.carouselItemRenderer\n ? this.carouselItemRenderer(item)\n : html`\n <div>\n <img src=\"${item.content}\" alt=\"${item.id}\" />\n <p>${item.id}</p>\n </div>\n `\n )}\n </div>\n `);\n }\n}\n","import { html, css, PropertyValues, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-button/axebow-button.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface SelectOption {\n value: string;\n label: string | TemplateResult;\n}\n\nexport interface AddDialogLabels {\n title: string;\n intro: string;\n nameLabel: string;\n namePlaceholder: string;\n requiredField: string;\n duplicateItem: string;\n cancel: string;\n save: string;\n}\n\nexport const DEFAULT_ADD_DIALOG_LABELS: AddDialogLabels = {\n title: 'Add New Item',\n intro: 'Enter the information for the new item.',\n nameLabel: 'Name',\n namePlaceholder: '',\n requiredField: 'This field is required',\n duplicateItem: 'An item with this name already exists',\n cancel: 'Cancel',\n save: 'Save',\n};\n\n@customElement('axebow-select-input')\nexport class AxebowSelectInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n .add-option {\n font-weight: bold;\n color: var(--axebow-tertiary);\n }\n .fixed-field sl-select {\n width: 100%;\n }\n .fixed-field sl-select::part(combobox) {\n height: 2.5rem;\n }\n .fixed-field sl-select::part(display-input) {\n font-size: 0.875rem;\n }\n :host(.axebow-fixed-min-width) .fixed-field {\n min-width: var(--axebow-input-min-width) !important;\n }\n :host(.axebow-fixed-height) sl-select::part(combobox) {\n height: var(--axebow-input-height) !important;\n box-sizing: border-box;\n }\n `,\n ];\n\n @property({ type: String }) minWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n\n @property({ type: Array }) options: SelectOption[] = [];\n @property({ type: Boolean }) allowAddNew = false;\n @property({ type: String }) addNewLabel = '+ Add new...';\n @property({ type: String }) emptyOptionLabel = 'Select option';\n @property({ type: Boolean }) showAddDialogInside = true;\n @property({ type: Boolean }) clearable = true;\n @property({ attribute: false }) onAddNew?: (newItem: { value: string; label: string; description?: string }) => void;\n @property({ attribute: false }) addDialogLabels: AddDialogLabels = DEFAULT_ADD_DIALOG_LABELS;\n\n @state() private showAddDialog = false;\n @state() private newItemName = '';\n @state() private newItemDescription = '';\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('minWidth')) {\n if (this.minWidth) {\n this.style.setProperty('--axebow-input-min-width', this.minWidth);\n this.classList.add('axebow-fixed-min-width');\n } else {\n this.style.removeProperty('--axebow-input-min-width');\n this.classList.remove('axebow-fixed-min-width');\n }\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) {\n this.style.setProperty('--axebow-input-height', this.fixedHeight);\n this.classList.add('axebow-fixed-height');\n } else {\n this.style.removeProperty('--axebow-input-height');\n this.classList.remove('axebow-fixed-height');\n }\n }\n }\n\n private handleSelectChange(e: Event) {\n if (this.disabled) return;\n const target = e.target as HTMLSelectElement;\n if (this.allowAddNew && target.value === '__add_new__') {\n setTimeout(() => {\n target.value = this.value;\n }, 0);\n if (this.showAddDialogInside) {\n this.showAddDialog = true;\n this.updateComplete.then(() => {\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n setTimeout(() => input?.focus(), 100);\n });\n } else {\n this.onAddNew?.({ value: '__add_new__', label: this.addNewLabel });\n }\n return;\n }\n this.handleChange(e);\n }\n\n private createSlug(name: string): string {\n return name\n .toLowerCase()\n .normalize('NFD')\n .replace(new RegExp('[\\\\u0300-\\\\u036f]', 'g'), '')\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n }\n\n private saveNewItem() {\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n if (!this.newItemName.trim()) {\n input?.setCustomValidity(this.addDialogLabels.requiredField);\n input?.reportValidity();\n return;\n }\n input?.setCustomValidity('');\n const itemValue = this.createSlug(this.newItemName);\n if (this.options.find((opt) => opt.value === itemValue)) {\n input?.setCustomValidity(this.addDialogLabels.duplicateItem);\n input?.reportValidity();\n return;\n }\n const newItem = {\n value: itemValue,\n label: this.newItemName.trim(),\n description: this.newItemDescription.trim(),\n };\n this.onAddNew?.(newItem);\n this.closeAddDialog();\n }\n\n private cancelNewItem() {\n this.closeAddDialog();\n }\n\n private closeAddDialog() {\n this.showAddDialog = false;\n this.newItemName = '';\n this.newItemDescription = '';\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n input?.setCustomValidity('');\n }\n\n private handleDialogKeydown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.saveNewItem();\n }\n }\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const selectOptions = this.allowAddNew\n ? [...this.options, { value: '__add_new__', label: this.addNewLabel }]\n : this.options;\n\n const selectTemplate = html`\n <div class=\"${containerClass}\">\n <sl-select\n placeholder=\"${this.placeholder || this.emptyOptionLabel}\"\n @sl-input=\"${this.allowAddNew ? this.handleSelectChange : this.handleChange}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n ?clearable=${this.clearable}\n >\n ${selectOptions.map(\n (opt) =>\n html`<sl-option value=\"${opt.value}\" class=\"${opt.value === '__add_new__' ? 'add-option' : ''}\"\n >${opt.label}</sl-option\n >`\n )}\n </sl-select>\n </div>\n `;\n\n const dialogTemplate = this.allowAddNew\n ? html`\n <sl-dialog\n ?open=\"${this.showAddDialog}\"\n label=\"${this.addDialogLabels.title}\"\n @sl-after-hide=\"${this.closeAddDialog}\"\n >\n <div class=\"flex flex-col gap-4\">\n <p>${this.addDialogLabels.intro}</p>\n <sl-input\n id=\"new-item-input\"\n label=\"${this.addDialogLabels.nameLabel}\"\n placeholder=\"${this.addDialogLabels.namePlaceholder}\"\n .value=\"${this.newItemName}\"\n @sl-input=\"${(e: Event) => {\n this.newItemName = (e.target as HTMLInputElement).value;\n }}\"\n @keydown=\"${this.handleDialogKeydown}\"\n required\n maxlength=\"100\"\n ></sl-input>\n </div>\n <div class=\"flex justify-end gap-3 mt-6\" slot=\"footer\">\n <axebow-button variant=\"default\" @click=\"${this.cancelNewItem}\"\n >${this.addDialogLabels.cancel}</axebow-button\n >\n <axebow-button variant=\"primary\" @click=\"${this.saveNewItem}\"\n >${this.addDialogLabels.save}</axebow-button\n >\n </div>\n </sl-dialog>\n `\n : '';\n\n const content = html`${selectTemplate}${dialogTemplate}`;\n return this.compact ? this.renderWrapper(content) : this.renderFixedField(content);\n }\n}\n","import { css } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { AxebowSelectInput } from './axebow-select-input.js';\n\n@customElement('axebow-select-input-with-divider')\nexport class AxebowSelectInputWithDivider extends AxebowSelectInput {\n static styles = [\n ...AxebowSelectInput.styles,\n css`\n sl-select {\n --sl-color-primary-600: var(--axebow-white, #ffffff);\n }\n sl-select::part(listbox) {\n border: 1px solid var(--axebow-tertiary) !important;\n padding-bottom: 0 !important;\n }\n sl-option::part(base):hover {\n background-color: var(--axebow-base) !important;\n }\n sl-option::part(checked-icon) {\n display: none !important;\n }\n sl-select sl-option[aria-selected='true']::part(base) {\n background-color: var(--axebow-white, #ffffff) !important;\n color: var(--axebow-black, #000000) !important;\n }\n sl-option[aria-selected='true']::part(label) {\n font-weight: 600 !important;\n color: var(--axebow-black, #000000) !important;\n }\n sl-option.add-option::part(base) {\n border-top: 1px solid var(--axebow-gray) !important;\n margin-top: 0.25rem;\n box-sizing: border-box;\n width: 35.6875rem;\n height: 2.5rem;\n margin-inline: auto;\n padding: 0.25rem 0;\n justify-content: center;\n }\n sl-option.add-option::part(label) {\n flex: none;\n text-align: center;\n }\n sl-option.add-option::part(base):hover {\n background-color: var(--axebow-base) !important;\n color: var(--axebow-gray) !important;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-select-input-with-divider': AxebowSelectInputWithDivider;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { CarouselItem } from './axebow-carousel-input.js';\nimport { AddDialogLabels, DEFAULT_ADD_DIALOG_LABELS } from './axebow-select-input.js';\nimport './axebow-text-input.js';\nimport './axebow-numeric-input.js';\nimport './axebow-select-input.js';\nimport './axebow-checkbox-input.js';\nimport './axebow-carousel-input.js';\nimport './axebow-providers-input.js';\nimport './axebow-switch-input.js';\n\nexport type ControlType = 'input' | 'select' | 'carousel' | 'numeric' | 'integer' | 'checkbox' | 'providers' | 'switch';\nexport interface Option {\n value: string;\n label: string | TemplateResult;\n}\n\nexport type { CarouselItem, AddDialogLabels };\n\n/**\n * Factory/dispatcher: picks the right concrete axebow-*-input for the\n * requested controlType and forwards the shared props to it. Adding a new\n * control type only means adding a case here (Open/Closed) - callers never\n * need to know which concrete input backs a given controlType.\n */\n@customElement('axebow-input')\nexport class AxebowInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n axebow-numeric-input {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n @property({ type: String }) controlType: ControlType = 'input';\n @property({ type: Array }) options: Option[] = [];\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n @property({ type: String }) errorMessage = '';\n @property({ type: Boolean }) hasError = false;\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Number }) maxlength?: number;\n @property({ type: Boolean }) allowAddNew = false;\n @property({ type: String }) addNewLabel = '+ Add new...';\n @property({ type: String }) emptyOptionLabel = 'Select option';\n @property({ type: Boolean }) showAddDialogInside = true;\n @property({ type: Boolean }) clearable = true;\n @property({ attribute: false }) onAddNew?: (newItem: { value: string; label: string; description?: string }) => void;\n @property({ attribute: false }) addDialogLabels: AddDialogLabels = DEFAULT_ADD_DIALOG_LABELS;\n @property({ type: Boolean }) compact = false;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) minWidth?: string;\n @property({ type: Boolean }) showStepper = true;\n @property({ type: Number }) stepAmount = 1;\n @property({ type: Boolean }) fixedField = false;\n @property({ type: Boolean }) wrapDescription = false;\n\n render() {\n switch (this.controlType) {\n case 'input':\n return html`\n <axebow-text-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .maxlength=${this.maxlength}\n .compact=${this.compact}\n ></axebow-text-input>\n `;\n case 'numeric':\n return html`\n <axebow-numeric-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .max=${this.max}\n .min=${this.min}\n .compact=${this.compact}\n .fixedWidth=${this.fixedWidth}\n .fixedHeight=${this.fixedHeight}\n .showStepper=${this.showStepper}\n .stepAmount=${this.stepAmount}\n .fixedField=${this.fixedField}\n .minWidth=${this.minWidth}\n ></axebow-numeric-input>\n `;\n case 'integer':\n return html`\n <axebow-numeric-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .max=${this.max}\n .min=${this.min}\n .integerOnly=${true}\n .compact=${this.compact}\n .fixedWidth=${this.fixedWidth}\n .fixedHeight=${this.fixedHeight}\n .showStepper=${this.showStepper}\n .stepAmount=${this.stepAmount}\n .fixedField=${this.fixedField}\n .minWidth=${this.minWidth}\n ></axebow-numeric-input>\n `;\n case 'select':\n return html`\n <axebow-select-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .options=${this.options}\n .allowAddNew=${this.allowAddNew}\n .addNewLabel=${this.addNewLabel}\n .emptyOptionLabel=${this.emptyOptionLabel}\n .showAddDialogInside=${this.showAddDialogInside}\n .clearable=${this.clearable}\n .onAddNew=${this.onAddNew}\n .addDialogLabels=${this.addDialogLabels}\n .minWidth=${this.minWidth}\n .fixedHeight=${this.fixedHeight}\n .wrapDescription=${this.wrapDescription}\n ></axebow-select-input>\n `;\n case 'checkbox':\n return html`\n <axebow-checkbox-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .options=${this.options}\n ></axebow-checkbox-input>\n `;\n case 'switch':\n return html`\n <axebow-switch-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .disabled=${this.disabled}\n .callback=${this.callback}\n ></axebow-switch-input>\n `;\n case 'carousel':\n return html`\n <axebow-carousel-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .carouselItems=${this.carouselItems}\n .carouselItemRenderer=${this.carouselItemRenderer}\n ></axebow-carousel-input>\n `;\n case 'providers':\n return html`\n <axebow-providers-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .carouselItems=${this.carouselItems}\n .carouselItemRenderer=${this.carouselItemRenderer}\n ></axebow-providers-input>\n `;\n default:\n return html`\n <axebow-text-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .maxlength=${this.maxlength}\n .compact=${this.compact}\n ></axebow-text-input>\n `;\n }\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport './axebow-select-input-with-divider.js';\nimport './axebow-input.js';\nimport '../axebow-button/axebow-button.js';\nimport type { SelectOption } from './axebow-select-input.js';\n\n@customElement('axebow-plan-select-field')\nexport class AxebowPlanSelectField extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Array }) options: SelectOption[] = [];\n @property({ type: String }) value = '';\n @property({ type: String }) availablePlansLabel = '';\n @property({ type: String }) noPlansLabel = '';\n @property({ type: String }) createPlanLabel = '';\n @property({ type: String }) createNewPlanLabel = '';\n @property({ attribute: false }) onPlanChange?: (value: string) => void;\n @property({ attribute: false }) onCreatePlan?: () => void;\n\n private handleChange(e: Event) {\n const value = (e.target as HTMLSelectElement).value;\n this.onPlanChange?.(value);\n }\n\n render() {\n const hasPlans = this.options.length > 0;\n\n return hasPlans\n ? html`\n <div class=\"flex flex-col relative w-144.75 max-w-full\">\n <axebow-select-input-with-divider\n label=\"${this.availablePlansLabel}\"\n required\n .clearable=${false}\n .value=${this.value}\n .options=${this.options}\n .allowAddNew=${true}\n addNewLabel=\"${this.createNewPlanLabel}\"\n .showAddDialogInside=${false}\n .onAddNew=${() => this.onCreatePlan?.()}\n .callback=${(e: Event) => this.handleChange(e)}\n >\n </axebow-select-input-with-divider>\n </div>\n `\n : html` <div class=\"flex gap-4 relative flex-1 lg:min-w-150 min-w-full items-end flex-wrap\">\n <axebow-input class=\"flex-1\" label=\"${this.availablePlansLabel}\" value=\"${this.noPlansLabel}\" disabled>\n </axebow-input>\n <axebow-button @click=\"${() => this.onCreatePlan?.()}\">${this.createPlanLabel}</axebow-button>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-plan-select-field': AxebowPlanSelectField;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-tags-input')\nexport class AxebowTagsInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ type: String }) placeholder = '';\n @property({ type: Array }) tags: string[] = [];\n @property({ type: String }) currentInput = '';\n @property({ type: Number }) maxlength = 254;\n @property({ attribute: false }) onTagsChange?: (tags: string[]) => void;\n @property({ attribute: false }) onCurrentInputChange?: (value: string) => void;\n\n private _handleKeyDown(e: KeyboardEvent) {\n const input = e.target as HTMLInputElement;\n if (e.key === ',' || e.key === 'Enter') {\n e.preventDefault();\n this._commitCurrentInput(input.value);\n } else if (e.key === 'Backspace' && input.value === '' && this.tags.length > 0) {\n this.onTagsChange?.(this.tags.slice(0, -1));\n }\n }\n\n private _handleInputChange(e: Event) {\n const input = e.target as HTMLInputElement;\n const value = input.value;\n if (value.includes(',')) {\n const parts = value\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n const last = parts.pop() ?? '';\n this.onTagsChange?.([...this.tags, ...parts.filter((p) => !this.tags.includes(p))]);\n this.onCurrentInputChange?.(last);\n input.value = last;\n } else {\n this.onCurrentInputChange?.(value);\n }\n }\n\n private _commitCurrentInput(raw: string) {\n const value = raw.replace(/,/g, '').trim();\n if (value && !this.tags.includes(value)) {\n this.onTagsChange?.([...this.tags, value]);\n }\n this.onCurrentInputChange?.('');\n const input = this.shadowRoot?.querySelector<HTMLInputElement>('.tag-field');\n if (input) input.value = '';\n }\n\n private _removeTag(tag: string) {\n this.onTagsChange?.(this.tags.filter((t) => t !== tag));\n }\n\n render() {\n return html`\n <div>\n <label class=\"flex items-center gap-1 text-base font-semibold text-black mb-1\">\n ${this.required ? html`<span class=\"text-(--axebow-error)\">*</span>` : ''}\n ${this.label}\n </label>\n ${this.description ? html`<p class=\"text-base text-black mb-1.5\">${this.description}</p>` : ''}\n <div\n class=\"flex flex-wrap items-center gap-1.5 min-h-9 px-2 py-1.5\n border border-solid border-gray-300 rounded-md bg-white cursor-text\n focus-within:border-blue-500 focus-within:ring-2 focus-within:ring-blue-100\n transition-shadow\"\n @click=${() => this.shadowRoot?.querySelector<HTMLInputElement>('.tag-field')?.focus()}\n >\n ${this.tags.map(\n (tag) => html`\n <span\n class=\"group inline-flex items-center gap-1 pl-2 pr-1 py-0.5\n border border-solid border-gray-300 rounded text-base bg-gray-50 text-black\n max-w-44 transition-colors\n hover:border-red-300 hover:bg-red-50\"\n title=${tag}\n >\n <span class=\"truncate\">${tag}</span>\n <button\n class=\"inline-flex items-center justify-center w-3.5 h-3.5 shrink-0\n text-black\n bg-transparent border-none cursor-pointer p-0 leading-none\n transition-colors\"\n @click=${(e: Event) => {\n e.stopPropagation();\n this._removeTag(tag);\n }}\n aria-label=\"Remove ${tag}\"\n >\n x\n </button>\n </span>\n `\n )}\n\n <input\n class=\"tag-field flex-1 min-w-30 border-none outline-none bg-transparent\n text-base py-0.5 font-[inherit] text-inherit placeholder-gray-400\"\n type=\"text\"\n placeholder=${this.tags.length === 0 ? this.placeholder : ''}\n .value=${this.currentInput}\n @keydown=${(e: KeyboardEvent) => this._handleKeyDown(e)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @blur=${(e: FocusEvent) => this._commitCurrentInput((e.target as HTMLInputElement).value)}\n maxlength=${this.maxlength}\n />\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-tags-input': AxebowTagsInput;\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport type TabSelectorVariant = 'forms-tab' | 'sections-tab';\n\n@customElement('axebow-tab-selector')\nexport class AxebowTabSelector extends LitElement {\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Number }) activeTab?: number;\n @property({ type: Boolean }) bordered = false;\n @property({ type: String }) variant: TabSelectorVariant = 'forms-tab';\n /** sections-tab only: when true (default) tabs fill the full bar; when false they are compact at the start */\n @property({ type: Boolean }) stretch = true;\n\n @state() private _activeTab = 0;\n @state() private _tabCount = 0;\n @state() private _tabDisabled: boolean[] = [];\n\n private _observer: MutationObserver | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n button {\n font-family: inherit;\n }\n\n /* forms-tab hover underline */\n button.tab-inactive:not(:disabled) {\n position: relative;\n }\n button.tab-inactive:not(:disabled):hover::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: var(--axebow-tertiary);\n border-radius: 0.25rem;\n }\n\n :host([disabled]) {\n opacity: 0.6;\n pointer-events: none;\n cursor: not-allowed;\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this._updateTabCount());\n this._observer.observe(this, { childList: true, attributes: true, attributeFilter: ['disabled'], subtree: true });\n this._updateTabCount();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n }\n\n protected firstUpdated() {\n this._updateTabCount();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('activeTab') && this.activeTab !== undefined && this._activeTab !== this.activeTab) {\n this._activeTab = this.activeTab;\n }\n if (changedProperties.has('disabled')) {\n this.toggleAttribute('disabled', this.disabled);\n }\n }\n\n private _updateTabCount() {\n const labelEls = Array.from(this.children).filter((el) => el.getAttribute('slot')?.startsWith('tab-label-'));\n const count = labelEls.length;\n if (count !== this._tabCount) {\n if (this._activeTab >= count) this._activeTab = 0;\n this._tabCount = count;\n }\n this._tabDisabled = Array.from({ length: this._tabCount }, (_, i) => {\n const el = this.querySelector(`[slot=\"tab-label-${i}\"]`);\n return el?.hasAttribute('disabled') ?? false;\n });\n }\n\n private _selectTab(index: number) {\n if (this.disabled || this._tabDisabled[index]) return;\n this._activeTab = index;\n this.dispatchEvent(new CustomEvent('tab-change', { detail: { index }, bubbles: true, composed: true }));\n }\n\n private _renderFormsTab(tabs: number[]) {\n const isFirstActive = this._activeTab === 0;\n const isLastActive = this._activeTab === this._tabCount - 1;\n\n return html`\n <div class=\"w-full max-w-194.25 rounded-md box-border\">\n <div class=\"w-full h-8 flex bg-(--axebow-base) gap-1 rounded-t-xl box-border\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"flex-1 h-8 flex items-center justify-center gap-2 transition-colors duration-200 font-medium\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? `bg-white text-(--axebow-primary) rounded-t-lg tab-active ${\n this.bordered\n ? 'border-t border-l border-r border-(--axebow-table-header-border)'\n : 'border-none'\n }`\n : 'bg-transparent text-(--axebow-secondary) rounded-md tab-inactive border-none'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <axebow-icon\n iconName=\"${active ? 'radio_button_checked' : 'radio_button_unchecked'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"base\"\n ></axebow-icon>\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n </div>\n\n <div\n class=\"w-full min-h-35 p-4 bg-white rounded-b-xl box-border ${isFirstActive\n ? ''\n : 'rounded-tl-xl'} ${isLastActive ? '' : 'rounded-tr-xl'} ${this.bordered\n ? 'border-l border-r border-b border-(--axebow-table-header-border)'\n : ''}\"\n >\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _renderSectionsTab(tabs: number[]) {\n return html`\n <div class=\"flex w-full\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"${this.stretch ? 'flex-1' : 'px-4'} h-8 flex items-center justify-center text-sm font-medium bg-transparent\n transition-colors duration-200\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? 'text-[#344966] border-b-2 border-solid border-[#344966] border-t-0 border-l-0 border-r-0'\n : 'text-(--axebow-secondary) border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0 hover:text-(--axebow-tertiary)'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n ${!this.stretch ? html`<div class=\"flex-1 border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0\"></div>` : ''}\n </div>\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n `;\n }\n\n render() {\n const tabs = Array.from({ length: this._tabCount }, (_, i) => i);\n return this.variant === 'sections-tab'\n ? this._renderSectionsTab(tabs)\n : this._renderFormsTab(tabs);\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-tab-selector/axebow-tab-selector.js';\nimport '../axebow-input/axebow-input.js';\nimport { CarouselItem } from '../axebow-input/axebow-carousel-input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface RegistrySelectorLabels {\n registryLabel: string;\n registryDescription: string;\n defaultRegistryTabLabel: string;\n oneShotRegistryTabLabel: string;\n oneShotRegistryDescription: string;\n registryUrlLabel: string;\n registryUrlPlaceholder: string;\n registryUrlInvalidLabel: string;\n registryCredentialsLabel: string;\n registryCredentialsPlaceholder: string;\n createNewSecretLabel: string;\n noSecretsAvailableLabel: string;\n}\n\nexport interface RegistrySecretOption {\n name: string;\n}\n\nfunction isValidRegistryUrl(value: string): boolean {\n if (!value) return true;\n try {\n const urlToParse = value.includes('://') ? value : `https://${value}`;\n return new URL(urlToParse).hostname.includes('.');\n } catch {\n return false;\n }\n}\n\n@customElement('axebow-registry-selector')\nexport class AxebowRegistrySelector extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: Boolean }) disabled = false;\n @property({ type: Number }) activeTab = 0;\n @property({ type: Array }) registries: CarouselItem[] = [];\n @property({ type: String }) selectedRegistry = '';\n @property({ type: String }) oneShotRegistryUrl = '';\n @property({ type: String }) oneShotRegistrySecret = '';\n @property({ type: Array }) secrets: RegistrySecretOption[] = [];\n @property({ attribute: false }) labels!: RegistrySelectorLabels;\n\n @property({ attribute: false }) onTabChange?: (index: number) => void;\n @property({ attribute: false }) onRegistrySelect?: (registry: CarouselItem) => void;\n @property({ attribute: false }) onRegistryUrlChange?: (value: string) => void;\n @property({ attribute: false }) onRegistrySecretSelect?: (secretName: string) => void;\n @property({ attribute: false }) onCreateSecret?: () => void;\n @property({ attribute: false }) onValidityChange?: (isValid: boolean) => void;\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (changedProperties.has('oneShotRegistryUrl') || changedProperties.has('activeTab')) {\n this.onValidityChange?.(this.activeTab !== 1 || isValidRegistryUrl(this.oneShotRegistryUrl));\n }\n }\n\n private _isRegistrySelected(registry: CarouselItem): boolean {\n return !!registry.registry && registry.registry === this.selectedRegistry;\n }\n\n private _secretOptions(): RegistrySecretOption[] {\n const options = [...this.secrets];\n if (this.oneShotRegistrySecret && !options.some((s) => s.name === this.oneShotRegistrySecret)) {\n options.push({ name: this.oneShotRegistrySecret });\n }\n return options;\n }\n\n private _renderRegistryItem(registry: CarouselItem): TemplateResult {\n const isSelected = this._isRegistrySelected(registry);\n\n return html`\n <style>\n .registry-card {\n position: relative;\n gap: calc(var(--spacing) * 0.5);\n border-color: var(--color-gray-200);\n background-color: transparent;\n }\n @media (min-width: 48rem) {\n .registry-card {\n gap: var(--spacing);\n }\n }\n @media (min-width: 64rem) {\n .registry-card {\n gap: calc(var(--spacing) * 2);\n }\n }\n .registry-card.selected {\n border-color: var(--axebow-primary);\n background-color: var(--axebow-white);\n }\n .registry-logo {\n height: calc(var(--spacing) * 3);\n aspect-ratio: 1 / 1;\n object-fit: contain;\n }\n @media (min-width: 64rem) {\n .registry-logo {\n height: calc(var(--spacing) * 6);\n }\n }\n </style>\n <sl-carousel-item>\n <div\n class=\"registry-card rounded-lg border-2 border-solid cursor-pointer p-2 text-center transition-all duration-300 ease-in-out flex items-center justify-center ${isSelected\n ? 'selected'\n : ''}\"\n @click=${() => {\n if (!this.disabled) this.onRegistrySelect?.(registry);\n }}\n >\n <img class=\"registry-logo\" src=\"${registry.content}\" alt=\"${registry.id}\" />\n <p>${registry.id}</p>\n ${isSelected\n ? html`\n <div\n class=\"absolute -top-2.25 -right-2.25 z-10 w-4.5 h-4.5 rounded-full bg-(--axebow-white) flex items-center justify-center\"\n >\n <axebow-icon iconName=\"check_circle\" filled iconColor=\"var(--axebow-primary)\" size=\"xl\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n </sl-carousel-item>\n `;\n }\n\n private _renderRegistryCarousel(): TemplateResult {\n return html`\n <axebow-input\n .disabled=${this.disabled}\n label=\"${this.labels.registryLabel}\"\n required\n description=\"${this.labels.registryDescription}\"\n controlType=\"carousel\"\n .value=\"${this.selectedRegistry}\"\n .carouselItems=\"${this.registries}\"\n .carouselItemRenderer=${(registry: CarouselItem) => this._renderRegistryItem(registry)}\n ></axebow-input>\n `;\n }\n\n private _renderOneShotRegistryInputs(): TemplateResult {\n const secretOptions = this._secretOptions();\n const urlValid = isValidRegistryUrl(this.oneShotRegistryUrl);\n\n return html`\n <div class=\"flex flex-col gap-4\">\n <p>${unsafeHTML(this.labels.oneShotRegistryDescription)}</p>\n <div class=\"flex gap-[2%] w-full\">\n <div class=\"flex-1 min-w-0\">\n <axebow-input\n label=\"${this.labels.registryUrlLabel}\"\n placeholder=\"${this.labels.registryUrlPlaceholder}\"\n required\n .value=\"${this.oneShotRegistryUrl}\"\n .hasError=\"${!urlValid}\"\n .errorMessage=\"${this.labels.registryUrlInvalidLabel}\"\n .callback=${(e: Event) => this.onRegistryUrlChange?.((e.target as HTMLInputElement).value)}\n maxlength=\"500\"\n ></axebow-input>\n </div>\n <div class=\"flex-1 min-w-0 flex flex-col\">\n <div class=\"flex items-baseline gap-2\" style=\"height: 1.0625rem; margin-bottom: 0.25rem;\">\n <h4 class=\"font-semibold text-base leading-4.25 m-0 overflow-hidden text-ellipsis\">\n ${this.labels.registryCredentialsLabel}\n </h4>\n </div>\n <sl-select\n placeholder=\"${this.labels.registryCredentialsPlaceholder}\"\n clearable\n hoist\n .value=\"${this.oneShotRegistrySecret}\"\n @sl-change=${(e: Event) => this.onRegistrySecretSelect?.((e.target as HTMLSelectElement).value)}\n >\n <div\n class=\"flex items-center gap-2 cursor-pointer px-4 py-1\"\n @click=${(e: Event) => {\n e.stopPropagation();\n this.onCreateSecret?.();\n }}\n >\n <axebow-icon iconName=\"add\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n ${this.labels.createNewSecretLabel}\n </div>\n ${secretOptions.length > 0 ? html`<sl-divider></sl-divider>` : ''}\n ${secretOptions.map((s) => html`<sl-option value=\"${s.name}\">${s.name}</sl-option>`)}\n ${secretOptions.length === 0\n ? html`<sl-option disabled>${this.labels.noSecretsAvailableLabel}</sl-option>`\n : ''}\n </sl-select>\n </div>\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <axebow-tab-selector\n class=\"w-full\"\n .disabled=${this.disabled}\n .activeTab=${this.activeTab}\n @tab-change=${(e: CustomEvent) => this.onTabChange?.(e.detail.index)}\n >\n <span slot=\"tab-label-0\">${this.labels.defaultRegistryTabLabel}</span>\n <div slot=\"tab-panel-0\">${this._renderRegistryCarousel()}</div>\n\n <span slot=\"tab-label-1\">${this.labels.oneShotRegistryTabLabel}</span>\n <div slot=\"tab-panel-1\">${this._renderOneShotRegistryInputs()}</div>\n </axebow-tab-selector>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-registry-selector': AxebowRegistrySelector;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport type DialogType = 'basic' | 'form' | 'custom';\nexport type DialogButtonVariant = 'default' | 'primary' | 'success' | 'neutral' | 'warning' | 'danger' | 'text';\n\nexport interface DialogButtonConfig {\n label: string;\n variant?: DialogButtonVariant;\n outline?: boolean;\n disabled?: boolean;\n loading?: boolean;\n onClick?: () => void;\n}\n\n@customElement('axebow-dialog')\nexport class AxebowDialog extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(body) {\n padding: 1.5rem 1.5rem 0 1.5rem;\n }\n sl-dialog::part(footer) {\n padding: 2rem 1.5rem 1.5rem 1.5rem;\n }\n `,\n ];\n\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ type: String }) type: DialogType = 'basic';\n @property({ type: String }) dialogTitle = '';\n @property({ type: String }) icon = '';\n @property({ type: String }) iconColor = '';\n @property({ type: String }) description = '';\n\n @property({ attribute: false }) button1?: DialogButtonConfig;\n @property({ attribute: false }) button2?: DialogButtonConfig;\n @property({ attribute: false }) button3?: DialogButtonConfig;\n\n @property({ type: Boolean }) canCancel = false;\n @property({ type: String }) cancelLabel = 'Cancel';\n @property({ attribute: false }) onCancel?: () => void;\n\n @property({ type: Boolean }) canClose = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ attribute: false }) onClose?: () => void;\n @property({ type: String }) closeIcon = 'close';\n @property({ type: String }) closeIconColor = 'var(--axebow-primary)';\n\n @state() private _hasDescriptionSlotContent = false;\n\n private _onDescriptionSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasDescriptionSlotContent = slot.assignedNodes({ flatten: true }).some((node) => {\n return node.nodeType === Node.ELEMENT_NODE || !!node.textContent?.trim();\n });\n }\n\n private get _buttons(): DialogButtonConfig[] {\n return [this.button1, this.button2, this.button3].filter((button): button is DialogButtonConfig => !!button);\n }\n\n render() {\n const hasTrailingContent = this.type === 'form' || this.type === 'custom';\n const showDescription = !!this.description || this._hasDescriptionSlotContent;\n\n return html`\n <sl-dialog\n ?open=${this.open}\n no-header\n label=${this.dialogTitle}\n @sl-request-close=${(e: CustomEvent) => e.preventDefault()}\n >\n <div class=\"flex items-center justify-between gap-4 mb-6\">\n <div class=\"flex items-center gap-4 min-w-0\">\n ${this.icon\n ? html`<axebow-icon iconName=${this.icon} iconColor=${this.iconColor}></axebow-icon>`\n : ''}\n <h2 class=\"m-0 font-semibold text-lg truncate\">${this.dialogTitle}</h2>\n </div>\n ${this.canClose\n ? html`\n <button\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0\"\n aria-label=${this.closeLabel}\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=${this.closeIcon} iconColor=${this.closeIconColor} size=\"xl\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n\n <div class=\"${showDescription && hasTrailingContent ? 'mb-8' : ''}\" ?hidden=${!showDescription}>\n ${this.description\n ? html`<p class=\"m-0\">${this.description}</p>`\n : html`<slot name=\"description\" @slotchange=${this._onDescriptionSlotChange}></slot>`}\n </div>\n\n ${this.type === 'form' ? html`<div><slot name=\"form\"></slot></div>` : ''}\n ${this.type === 'custom' ? html`<div><slot name=\"body\"></slot></div>` : ''}\n\n ${this.canCancel || this._buttons.length > 0\n ? html`\n <div slot=\"footer\" class=\"flex items-center justify-end gap-2 w-full\">\n ${this.canCancel\n ? html`<axebow-button variant=\"default\" @click=${() => this.onCancel?.()}\n >${this.cancelLabel}</axebow-button\n >`\n : ''}\n ${this._buttons.map(\n (button) => html`\n <axebow-button\n variant=${button.variant ?? 'default'}\n ?outline=${button.outline}\n .disabled=${button.disabled ?? false}\n ?loading=${button.loading}\n @click=${() => button.onClick?.()}\n >\n ${button.label}\n </axebow-button>\n `\n )}\n </div>\n `\n : ''}\n </sl-dialog>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-input/axebow-tags-input.js';\nimport { Option } from '../axebow-input/axebow-input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport type CollaboratorRoleOption = Option;\n\nexport interface CollaboratorRow {\n id: string;\n name: string;\n email: string;\n permission: string;\n invitePending: boolean;\n isYou: boolean;\n}\n\nexport interface CollaboratorsDialogLabels {\n dialogTitle: string;\n descriptionPrefix: string;\n userIdLabel: string;\n userIdHelp: string;\n emailPlaceholder: string;\n selectPermission: string;\n inviteButton: string;\n actualCollaborators: string;\n noCollaborators: string;\n inviteToCollaborate: string;\n inviteSent: string;\n roleHeader: string;\n updateUserAction: string;\n resendInviteAction: string;\n removeAction: string;\n closeButton: string;\n updateButton: string;\n closeAriaLabel: string;\n}\n\n@customElement('axebow-collaborators-dialog')\nexport class AxebowCollaboratorsDialog extends LitElement {\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ type: String }) tenantName = '';\n @property({ type: Array }) collaborators: CollaboratorRow[] = [];\n @property({ type: Array }) roleOptions: CollaboratorRoleOption[] = [];\n @property({ attribute: false }) labels!: CollaboratorsDialogLabels;\n @property({ type: Array }) newEmails: string[] = [];\n @property({ type: String }) currentInput = '';\n @property({ type: String }) newPermission = '';\n @property({ attribute: false }) onEmailsChange?: (emails: string[]) => void;\n @property({ attribute: false }) onCurrentInputChange?: (value: string) => void;\n @property({ attribute: false }) onPermissionChange?: (value: string) => void;\n @property({ attribute: false }) onInvite?: () => void;\n @property({ attribute: false }) selectedRole: Record<string, string> = {};\n @property({ attribute: false }) onSelectRole?: (email: string, role: string) => void;\n @property({ attribute: false }) onUpdateRole?: (email: string) => void;\n @property({ attribute: false }) onUpdateAllRoles?: () => void;\n\n @property({ attribute: false }) onResendInvite?: (email: string) => void;\n @property({ attribute: false }) onRemoveCollaborator?: (row: CollaboratorRow) => void;\n @property({ attribute: false }) onClose?: () => void;\n\n private readonly roleControlClasses =\n 'w-18.5 h-5.25 px-2 border border-solid border-[var(--axebow-gray)] rounded text-base bg-white flex items-center justify-between gap-1 box-border text-black';\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(panel) {\n background-color: var(--axebow-base);\n border-radius: 0.375rem;\n height: min(38.6875rem, 90vh);\n padding: 24px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n margin-top: 5vh;\n }\n sl-dialog::part(header) {\n display: none;\n }\n sl-dialog::part(body) {\n padding: 0;\n margin: 0;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n sl-dialog::part(footer) {\n display: none;\n }\n @media (max-width: 540px) {\n sl-dialog::part(panel) {\n padding: 1rem;\n }\n }\n sl-divider.nomargin {\n margin: 0 !important;\n }\n .collaborators-scroll::-webkit-scrollbar {\n width: 4px;\n }\n .collaborators-scroll::-webkit-scrollbar-track {\n background: transparent;\n }\n .collaborators-scroll::-webkit-scrollbar-thumb {\n background-color: var(--axebow-gray, #d1d5db);\n border-radius: 9999px;\n transition: background-color 0.2s;\n }\n .collaborators-scroll::-webkit-scrollbar-thumb:hover {\n background-color: var(--axebow-primary, var(--axebow-strong-gray));\n }\n `,\n ];\n\n private get _hasAnyInput(): boolean {\n return this.newEmails.length > 0 || this.currentInput.trim().length > 0;\n }\n\n private get _hasPendingRoleChanges(): boolean {\n return this.collaborators.some((c) => this.selectedRole[c.email] && this.selectedRole[c.email] !== c.permission);\n }\n\n private _roleLabel(permission: string): string {\n const match = this.roleOptions.find((o) => o.value === permission)?.label;\n return (match as string) ?? permission;\n }\n\n private _initializeRole(email: string, currentRole: string) {\n if (!this.selectedRole[email]) {\n this.onSelectRole?.(email, currentRole);\n }\n }\n\n private _handleMenuClick(e: Event, action: () => void) {\n e.stopPropagation();\n action();\n }\n\n render() {\n if (!this.open) return html``;\n\n const footerButtons = [\n { label: this.labels.closeButton, onClick: () => this.onClose?.() },\n ...(this._hasPendingRoleChanges\n ? [{ label: this.labels.updateButton, onClick: () => this.onUpdateAllRoles?.() }]\n : []),\n ];\n\n return html`\n <sl-dialog ?open=${this.open} label=${this.labels.dialogTitle} @sl-request-close=${(e: CustomEvent) => e.preventDefault()}>\n <div class=\"flex gap-4 items-start shrink-0\">\n <axebow-icon\n iconName=\"person_add\"\n iconColor=\"var(--axebow-primary)\"\n size=\"3xl\"\n class=\"shrink-0\"\n ></axebow-icon>\n <div class=\"flex flex-col gap-6 flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2 h-7\">\n <h2 class=\"m-0 text-xl font-semibold text-black truncate\">${this.labels.dialogTitle}</h2>\n <button\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0\"\n aria-label=\"${this.labels.closeAriaLabel}\"\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=\"close\" size=\"xl\"></axebow-icon>\n </button>\n </div>\n <p class=\"m-0 text-base text-black\">\n ${this.labels.descriptionPrefix} <strong>\"${this.tenantName}\"!</strong>\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-1 min-h-0 pl-11.75\">\n <div class=\"space-y-3 shrink-0\">\n <axebow-tags-input\n class=\"mb-4\"\n label=\"${this.labels.userIdLabel}\"\n description=\"${this.labels.userIdHelp}\"\n required\n placeholder=\"${this.labels.emailPlaceholder}\"\n .tags=${this.newEmails}\n .currentInput=${this.currentInput}\n .onTagsChange=${(tags: string[]) => this.onEmailsChange?.(tags)}\n .onCurrentInputChange=${(value: string) => this.onCurrentInputChange?.(value)}\n ></axebow-tags-input>\n <div class=\"flex gap-2 items-end\">\n <axebow-input\n controlType=\"select\"\n .value=${this.newPermission}\n placeholder=\"${this.labels.selectPermission}\"\n .options=${this.roleOptions}\n .clearable=${false}\n .callback=${(e: Event) => this.onPermissionChange?.((e.target as HTMLSelectElement).value)}\n class=\"flex-1\"\n .disabled=${!this._hasAnyInput}\n style=${!this._hasAnyInput\n ? '--sl-input-background-color: var(--axebow-base); --sl-input-border-color: var(--axebow-base);'\n : ''}\n ></axebow-input>\n\n <axebow-button\n variant=\"primary\"\n .disabled=${!this._hasAnyInput || !this.newPermission}\n @click=${() => this.onInvite?.()}\n class=\"shrink-0\"\n style=\"--sl-button-font-size-medium: 0.875rem; min-width: 140px;\"\n >\n ${this.labels.inviteButton}\n </axebow-button>\n </div>\n </div>\n <div class=\"flex flex-col flex-1 min-h-0 mt-5\">\n <sl-divider></sl-divider>\n <h3 class=\"text-base font-medium text-black mb-3 mt-4 shrink-0\">${this.labels.actualCollaborators}</h3>\n <div class=\"collaborators-scroll flex-1 min-h-0 overflow-y-auto\">\n ${this.collaborators.length > 0\n ? html`\n <div class=\"mr-2\">\n <sl-divider class=\"nomargin\"></sl-divider>\n ${this.collaborators.map(\n (c, index) => html`\n <div\n class=\"flex items-center justify-between py-2.5\n ${index !== this.collaborators.length - 1 ? 'border-b border-gray-200' : ''}\"\n >\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <div class=\"w-9 h-9 bg-white rounded flex items-center justify-center shrink-0\">\n ${c.invitePending\n ? html`<axebow-icon\n iconName=\"outgoing_mail\"\n iconColor=\"var(--axebow-dark-yellow)\"\n ></axebow-icon>`\n : html`<axebow-icon\n iconName=\"person_check\"\n iconColor=\"var(--axebow-primary)\"\n ></axebow-icon>`}\n </div>\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex items-center gap-1.5 flex-wrap\">\n <span class=\"text-base font-medium text-black truncate\">${c.name}</span>\n ${c.invitePending\n ? html`<span class=\"text-base text-black\">${this.labels.inviteSent}</span>`\n : ''}\n </div>\n <p class=\"text-base text-black truncate\">ID: ${c.id}</p>\n </div>\n </div>\n <div class=\"flex items-center gap-2 shrink-0 ml-2\">\n ${!c.isYou\n ? html`\n <sl-dropdown placement=\"bottom-end\">\n <button\n slot=\"trigger\"\n class=\"${this.roleControlClasses} appearance-none cursor-pointer\n hover:bg-gray-50 focus:outline-2 focus:outline-blue-500 focus:outline-offset-1\"\n @click=${() => this._initializeRole(c.email, c.permission)}\n >\n <span class=\"flex-1 text-center\">${this._roleLabel(c.permission)}</span>\n <axebow-icon\n iconName=\"expand_more\"\n size=\"md\"\n iconColor=\"var(--axebow-tertiary)\"\n ></axebow-icon>\n </button>\n\n <sl-menu style=\"min-width: 180px;\">\n <div class=\"py-1\">\n <div\n class=\"px-3 py-2 text-base font-medium text-black uppercase tracking-wider border-b border-gray-200\"\n >\n ${this.labels.roleHeader}\n </div>\n ${this.roleOptions.map(\n (opt) => html`\n <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () =>\n this.onSelectRole?.(c.email, opt.value)\n )}\n >\n <div class=\"flex items-center justify-between w-full\">\n <span class=\"text-base\">${opt.label}</span>\n ${(this.selectedRole[c.email] || c.permission) === opt.value\n ? html`<axebow-icon\n iconName=\"check\"\n iconColor=\"var(--axebow-primary)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n </sl-menu-item>\n `\n )}\n </div>\n\n <sl-divider class=\"nomargin\"></sl-divider>\n\n <div class=\"py-1\">\n ${this.selectedRole[c.email] && this.selectedRole[c.email] !== c.permission\n ? html` <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onUpdateRole?.(c.email))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"sync\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black font-medium\"\n >${this.labels.updateUserAction}</span\n >\n </div>\n </sl-menu-item>`\n : ''}\n ${c.invitePending\n ? html` <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onResendInvite?.(c.email))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"send\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black\"\n >${this.labels.resendInviteAction}</span\n >\n </div>\n </sl-menu-item>`\n : ''}\n <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onRemoveCollaborator?.(c))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"delete\"\n iconColor=\"var(--axebow-error)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black\"\n >${this.labels.removeAction}</span\n >\n </div>\n </sl-menu-item>\n </div>\n </sl-menu>\n </sl-dropdown>\n `\n : html`\n <div class=\"${this.roleControlClasses}\">\n <span class=\"flex-1 text-center\">${this._roleLabel(c.permission)}</span>\n </div>\n `}\n </div>\n </div>\n <sl-divider class=\"nomargin\"></sl-divider>\n `\n )}\n </div>\n `\n : html`\n <div class=\"flex items-center justify-center py-8 text-black\">\n <div class=\"text-center\">\n <svg\n class=\"w-12 h-12 text-gray-300 mx-auto mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z\"\n ></path>\n </svg>\n <p class=\"text-base\">${this.labels.noCollaborators}</p>\n <p class=\"text-base text-black mt-1\">${this.labels.inviteToCollaborate}</p>\n </div>\n </div>\n `}\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-2 shrink-0\">\n ${footerButtons.map(\n (button) => html`\n <axebow-button variant=\"primary\" outline @click=${button.onClick}>${button.label}</axebow-button>\n `\n )}\n </div>\n </sl-dialog>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport type {\n ConfirmationSeverity,\n ConfirmationIntent,\n ConfirmationFormData,\n ConfirmationModalPayload,\n} from './axebow-modals-confirmation.models.js';\n\n/**\n * `<axebow-modals-confirmation>` is a confirmation modal component designed following\n * SOLID principles, DRY/KISS practices, and exact design specifications from Figma.\n *\n * It supports 4 severities (Destructive, Error, Neutral, Success), decisional/informational intents,\n * an optional 4-field confirmation form with password visibility toggle, optional hyperlink,\n * and customizable slots.\n */\n@customElement('axebow-modals-confirmation')\nexport class AxebowModalsConfirmation extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n font-family: 'Open Sans', system-ui, -apple-system, sans-serif;\n }\n\n /* Shoelace Dialog Custom Overrides */\n sl-dialog::part(panel) {\n background-color: var(--axebow-confirmation-modal-bg, #f0f1f5);\n border-radius: 0.375rem;\n box-shadow: 2px 2px 25px rgba(0, 0, 0, 0.1);\n padding: 0;\n width: 100%;\n max-width: var(--axebow-confirmation-modal-max-width, 579px);\n overflow: hidden;\n }\n\n sl-dialog::part(header),\n sl-dialog::part(header-actions) {\n display: none;\n }\n\n sl-dialog::part(body) {\n padding: 24px;\n }\n\n sl-dialog::part(footer) {\n padding: 0;\n }\n\n /* Standalone container styles (when rendered inline or without dialog) */\n .modal-card {\n background-color: var(--axebow-confirmation-modal-bg, #f0f1f5);\n border-radius: 0.375rem;\n box-shadow: 2px 2px 25px rgba(0, 0, 0, 0.1);\n padding: 24px;\n width: 100%;\n max-width: var(--axebow-confirmation-modal-max-width, 579px);\n box-sizing: border-box;\n }\n\n /* Form Input Styling */\n .form-field-input::part(base) {\n height: 40px;\n border-radius: 0.375rem;\n border: 1px solid #dbdde4;\n background-color: #ffffff;\n padding-left: 12px;\n padding-right: 12px;\n font-size: 14px;\n font-family: 'Open Sans', sans-serif;\n color: #000000;\n box-shadow: none;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n }\n\n .form-field-input::part(base):hover {\n border-color: #b0b4be;\n }\n\n .form-field-input::part(base):focus-within {\n border-color: #006bff;\n box-shadow: 0 0 0 2px rgba(0, 107, 255, 0.15);\n }\n\n .form-field-input::part(input) {\n font-size: 14px;\n font-family: 'Open Sans', sans-serif;\n color: #000000;\n }\n\n .form-field-input::part(input)::placeholder {\n color: #78787a;\n }\n\n /* Buttons Styling */\n .modal-btn {\n width: 150px;\n height: 40px;\n border-radius: 0.375rem;\n font-size: 14px;\n font-weight: 600;\n font-family: 'Open Sans', sans-serif;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n box-sizing: border-box;\n }\n\n .modal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Blue Primary Button */\n .btn-primary-blue {\n background-color: #006bff;\n color: #ffffff;\n border: none;\n }\n .btn-primary-blue:hover:not(:disabled) {\n background-color: #0056cc;\n }\n\n /* Blue Secondary Button */\n .btn-secondary-blue {\n background-color: transparent;\n color: #006bff;\n border: 1px solid #006bff;\n }\n .btn-secondary-blue:hover:not(:disabled) {\n background-color: rgba(0, 107, 255, 0.05);\n }\n\n /* Red Primary Button (Destructive) */\n .btn-primary-red {\n background-color: #e93a3a;\n color: #ffffff;\n border: none;\n }\n .btn-primary-red:hover:not(:disabled) {\n background-color: #d12b2b;\n }\n\n /* Red Secondary Button (Destructive) */\n .btn-secondary-red {\n background-color: transparent;\n color: #e93a3a;\n border: 1px solid #e93a3a;\n }\n .btn-secondary-red:hover:not(:disabled) {\n background-color: rgba(233, 58, 58, 0.05);\n }\n\n .modal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `,\n ];\n\n // Component Props (matching Figma properties & Spec Notes)\n @property({ type: Boolean, reflect: true }) open = true;\n @property({ type: Boolean }) inline = false; // Render directly without modal overlay backdrop\n @property({ type: String }) backgroundColor?: string; // Customizable modal background color\n @property({ type: String }) maxWidth?: string;\n @property({ type: String }) severity: ConfirmationSeverity = 'Neutral';\n @property({ type: String }) intent: ConfirmationIntent = 'Decisional';\n\n @property({ type: String }) popUpTittle = 'Pop-up tittle';\n /** Alias for popUpTittle */\n @property({ type: String })\n get popUpTitle(): string {\n return this.popUpTittle;\n }\n set popUpTitle(value: string) {\n this.popUpTittle = value;\n }\n\n @property({ type: String }) textBody = '';\n\n @property({ type: Boolean }) showIconOnTitle = true;\n @property({ type: Boolean }) showForm = true;\n @property({ type: Boolean }) showHyperlink = false;\n @property({ type: String }) hyperlinkText = 'Need help?';\n @property({ type: String }) hyperlinkHref?: string;\n\n @property({ type: Boolean }) showFooter = true;\n @property({ type: Boolean }) showSecondaryCTA = true;\n @property({ type: Boolean }) showPrimaryCTA = true;\n @property({ type: String }) secondaryButtonText = 'Secondary Button';\n @property({ type: String }) primaryButtonText = 'Primary Button';\n @property({ type: String }) secondaryButtonTooltip?: string;\n @property({ type: Boolean }) secondaryButtonDisabled = false;\n @property({ type: String }) primaryButtonTooltip?: string;\n @property({ type: Boolean }) primaryButtonDisabled = false;\n\n @property({ type: Boolean }) canClose = true;\n @property({ type: String }) entityName = 'entity-name';\n\n // Internal Form State\n @state() private _providerUsername = '';\n @state() private _providerPassword = '';\n @state() private _domain = '';\n @state() private _confirmText = '';\n @state() private _showPassword = false;\n\n // Custom Icon overrides (if caller wants to specify distinct icons)\n @property({ type: String }) iconName?: string;\n @property({ type: String }) iconColor?: string;\n\n /**\n * Returns severity configuration according to design specifications:\n * - Success: green check_circle icon, standard blue buttons\n * - Error: red error icon, standard blue buttons\n * - Neutral: blue info icon, standard blue buttons\n * - Destructive: red error icon, RED buttons (#E93A3A)\n */\n private get _severityConfig(): { icon: string; iconColor: string; isRedButtons: boolean } {\n if (this.iconName) {\n return {\n icon: this.iconName,\n iconColor: this.iconColor ?? (this.severity === 'Destructive' || this.severity === 'Error' ? '#E93A3A' : '#006BFF'),\n isRedButtons: this.severity === 'Destructive',\n };\n }\n\n switch (this.severity) {\n case 'Success':\n return { icon: 'check_circle', iconColor: '#10B981', isRedButtons: false };\n case 'Error':\n return { icon: 'error', iconColor: '#E93A3A', isRedButtons: false };\n case 'Destructive':\n return { icon: 'error', iconColor: '#E93A3A', isRedButtons: true };\n case 'Neutral':\n default:\n return { icon: 'info', iconColor: '#006BFF', isRedButtons: false };\n }\n }\n\n /**\n * Helper to retrieve current form payload object\n */\n public getFormData(): ConfirmationFormData {\n return {\n providerUsername: this._providerUsername,\n providerPassword: this._providerPassword,\n domain: this._domain,\n confirmText: this._confirmText,\n };\n }\n\n /**\n * Reset form fields to initial empty state\n */\n public resetForm(): void {\n this._providerUsername = '';\n this._providerPassword = '';\n this._domain = '';\n this._confirmText = '';\n this._showPassword = false;\n }\n\n private _notifyFormChange(): void {\n const formData = this.getFormData();\n this.dispatchEvent(\n new CustomEvent<ConfirmationFormData>('axebow-form-change', {\n detail: formData,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleClose(): void {\n this.dispatchEvent(\n new CustomEvent('axebow-close', {\n bubbles: true,\n composed: true,\n })\n );\n if (!this.inline) {\n this.open = false;\n }\n }\n\n private _handleSecondaryClick(): void {\n const payload: ConfirmationModalPayload = {\n severity: this.severity,\n intent: this.intent,\n formData: this.showForm ? this.getFormData() : undefined,\n };\n this.dispatchEvent(\n new CustomEvent<ConfirmationModalPayload>('axebow-cancel', {\n detail: payload,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handlePrimaryClick(): void {\n const payload: ConfirmationModalPayload = {\n severity: this.severity,\n intent: this.intent,\n formData: this.showForm ? this.getFormData() : undefined,\n };\n this.dispatchEvent(\n new CustomEvent<ConfirmationModalPayload>('axebow-confirm', {\n detail: payload,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleHyperlinkClick(e: Event): void {\n if (this.hyperlinkHref) {\n // Allow native navigation if href is present\n return;\n }\n e.preventDefault();\n this.dispatchEvent(\n new CustomEvent('axebow-hyperlink-click', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n /**\n * Renders the top header section (Icon 32x32 + Title + Close icon 24x24)\n */\n private _renderHeader() {\n const { icon, iconColor } = this._severityConfig;\n\n return html`\n <div class=\"flex items-start justify-between w-full\">\n <div class=\"flex items-start gap-4 min-w-0 flex-1\">\n ${this.showIconOnTitle\n ? html`\n <div class=\"shrink-0 flex items-center justify-center w-8 h-8\">\n <axebow-icon iconName=${icon} iconColor=${iconColor} size=\"3xl\"></axebow-icon>\n </div>\n `\n : html`<div class=\"shrink-0 w-8 h-8\" aria-hidden=\"true\"></div>`}\n <div class=\"flex flex-col gap-6 flex-1 min-w-0\">\n <h3 class=\"m-0 text-xl font-semibold text-black leading-tight truncate\">\n ${this.popUpTittle}\n </h3>\n ${this.textBody\n ? html`<p class=\"m-0 text-sm text-black font-normal leading-relaxed\">${this.textBody}</p>`\n : ''}\n <slot name=\"body\"></slot>\n <slot></slot>\n </div>\n </div>\n\n ${this.canClose\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0 text-[#78787A] hover:text-black transition-colors ml-4\"\n aria-label=\"Close dialog\"\n @click=${this._handleClose}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"currentColor\" size=\"2xl\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n `;\n }\n\n /**\n * Renders the 4-field confirmation form (indented 47px from left, gap 16px between fields)\n */\n private _renderForm() {\n if (!this.showForm) return '';\n\n const expectedConfirmPlaceholder = `delete+[${this.entityName}]`;\n\n return html`\n <div class=\"pl-11.75 flex flex-col gap-4 w-full box-border\">\n <slot name=\"form\">\n <!-- Field 1: Provider username -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Provider username</label>\n <sl-input\n class=\"form-field-input\"\n placeholder=\"Enter user\"\n .value=${this._providerUsername}\n @sl-input=${(e: Event) => {\n this._providerUsername = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n\n <!-- Field 2: Provider password with toggle eye icon -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Provider password</label>\n <sl-input\n class=\"form-field-input\"\n type=${this._showPassword ? 'text' : 'password'}\n placeholder=\"Enter password\"\n .value=${this._providerPassword}\n @sl-input=${(e: Event) => {\n this._providerPassword = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n >\n <button\n slot=\"suffix\"\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-[#78787A] hover:text-black transition-colors\"\n @click=${() => (this._showPassword = !this._showPassword)}\n aria-label=${this._showPassword ? 'Hide password' : 'Show password'}\n >\n <axebow-icon\n iconName=${this._showPassword ? 'visibility_off' : 'visibility'}\n iconColor=\"currentColor\"\n size=\"xl\"\n ></axebow-icon>\n </button>\n </sl-input>\n </div>\n\n <!-- Field 3: Domain -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Domain</label>\n <sl-input\n class=\"form-field-input\"\n placeholder=\"Enter domain\"\n .value=${this._domain}\n @sl-input=${(e: Event) => {\n this._domain = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n\n <!-- Field 4: Confirmation delete field -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0 flex items-center gap-1\">\n <span class=\"text-[#E93A3A] font-bold\">*</span>\n <span>Type \"${expectedConfirmPlaceholder}\" to confirm:</span>\n </label>\n <sl-input\n class=\"form-field-input\"\n placeholder=${expectedConfirmPlaceholder}\n .value=${this._confirmText}\n @sl-input=${(e: Event) => {\n this._confirmText = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n </slot>\n </div>\n `;\n }\n\n /**\n * Renders the action footer (Width 483px, indented 47px, hyperlink + buttons)\n */\n private _renderFooter() {\n if (!this.showFooter) return '';\n\n const isDestructive = this.severity === 'Destructive';\n const primaryVariant = isDestructive ? 'danger' : 'primary';\n const secondaryVariant = isDestructive ? 'danger' : 'primary';\n\n return html`\n <div class=\"pl-11.75 w-full flex items-center justify-between gap-4 box-border\">\n <slot name=\"footer\">\n <!-- Optional Hyperlink -->\n <div>\n ${this.showHyperlink\n ? html`\n <slot name=\"hyperlink\">\n <a\n href=${this.hyperlinkHref ?? '#'}\n class=\"text-sm font-semibold text-[#006BFF] hover:underline cursor-pointer no-underline\"\n @click=${this._handleHyperlinkClick}\n >\n ${this.hyperlinkText}\n </a>\n </slot>\n `\n : ''}\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex items-center gap-4 ml-auto\">\n ${this.showSecondaryCTA\n ? html`\n <axebow-button\n variant=${secondaryVariant}\n ?outline=${true}\n fixedHeight=\"40px\"\n .disabled=${this.secondaryButtonDisabled}\n @click=${this._handleSecondaryClick}\n >\n <span class=\"flex items-center justify-center gap-1\">\n <span>${this.secondaryButtonText}</span>\n ${this.secondaryButtonTooltip\n ? html`\n <axebow-tooltip content=${this.secondaryButtonTooltip} placement=\"top\">\n <axebow-icon iconName=\"info\" iconColor=\"currentColor\" size=\"md\" class=\"shrink-0 cursor-pointer ml-1\"></axebow-icon>\n </axebow-tooltip>\n `\n : ''}\n </span>\n </axebow-button>\n `\n : ''}\n ${this.showPrimaryCTA\n ? html`\n <axebow-button\n variant=${primaryVariant}\n fixedHeight=\"40px\"\n .disabled=${this.primaryButtonDisabled}\n @click=${this._handlePrimaryClick}\n >\n <span class=\"flex items-center justify-center gap-1\">\n <span>${this.primaryButtonText}</span>\n ${this.primaryButtonTooltip\n ? html`\n <axebow-tooltip content=${this.primaryButtonTooltip} placement=\"top\">\n <axebow-icon iconName=\"info\" iconColor=\"currentColor\" size=\"md\" class=\"shrink-0 cursor-pointer ml-1\"></axebow-icon>\n </axebow-tooltip>\n `\n : ''}\n </span>\n </axebow-button>\n `\n : ''}\n </div>\n </slot>\n </div>\n `;\n }\n\n /**\n * Renders the complete modal content layout (flex column, gap 32px)\n */\n private _renderContent() {\n return html`\n <div class=\"flex flex-col gap-8 w-full\">\n ${this._renderHeader()}\n ${this._renderForm()}\n ${this._renderFooter()}\n </div>\n `;\n }\n\n render() {\n const bgStyle = this.backgroundColor ? `--axebow-confirmation-modal-bg: ${this.backgroundColor}; background-color: ${this.backgroundColor};` : '';\n const widthStyle = this.maxWidth ? `--axebow-confirmation-modal-max-width: ${this.maxWidth};` : '';\n const hostStyle = `${bgStyle}${widthStyle}`;\n\n if (this.inline) {\n return html`\n <div class=\"modal-card\" style=${hostStyle}>\n ${this._renderContent()}\n </div>\n `;\n }\n\n return html`\n <sl-dialog\n ?open=${this.open}\n no-header\n label=${this.popUpTittle}\n style=${hostStyle}\n @sl-request-close=${(e: CustomEvent) => {\n e.preventDefault();\n this._handleClose();\n }}\n >\n ${this._renderContent()}\n </sl-dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-modals-confirmation': AxebowModalsConfirmation;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-limits-counter')\nexport class AxebowLimitsCounter extends LitElement {\n @property({ type: String }) label = '';\n @property({ type: String }) current = '';\n @property({ type: String }) limit = '';\n @property({ type: String }) unit = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n\n private _format(value: string): string {\n const n = Number(value);\n return isNaN(n) ? value : n.toFixed(2);\n }\n\n render() {\n return html`\n <span class=\"inline-flex items-center whitespace-nowrap text-base text-black\"\n >${this.label}${this.unit ? ` ${this.unit}` : ''}:&nbsp;<span class=\"text-gray-600\"\n >${this._format(this.current)}</span\n >&nbsp;/&nbsp;<span class=\"font-semibold\">${this._format(this.limit)}</span></span\n >\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-limits-counter/axebow-limits-counter.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface ResourceLimitItem {\n label: string;\n current: string;\n limit: string;\n unit?: string;\n}\n\n@customElement('axebow-resources-counter')\nexport class AxebowResourcesCounter extends LitElement {\n @property({ type: Array }) items: ResourceLimitItem[] = [];\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"w-121 h-7 bg-white py-1 px-2 rounded flex items-center justify-between gap-[0.53125rem] box-border\">\n ${this.items.map(\n (item, index) => html`\n ${index > 0\n ? html`<span class=\"shrink-0 inline-flex items-center\"\n >&nbsp;<div class=\"w-1.75 h-5 shrink-0 inline-flex items-center justify-center text-gray-300\">\n |\n </div>\n &nbsp;</span\n >`\n : ''}\n <axebow-limits-counter\n label=${item.label}\n current=${item.current}\n limit=${item.limit}\n unit=${item.unit ?? ''}\n ></axebow-limits-counter>\n `\n )}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, unsafeCSS, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/tooltip/tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type IconSize = 'xx-small' | 'x-small' | 'small' | 'medium' | 'large' | 'x-large';\n\n@customElement('axebow-tooltip')\nexport class AxebowTooltip extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `,\n ];\n\n @property({ type: String }) icon = 'info';\n @property({ type: String }) color = 'var(--axebow-primary)';\n @property({ type: String }) size: string = 'xl';\n @property({ type: String }) content = '';\n @property({ type: String }) placement: 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' = 'top';\n @property({ type: Boolean }) hoist = true;\n @property({ type: Boolean }) disabled = false;\n\n render() {\n return html`\n <sl-tooltip\n placement=${this.placement}\n ?hoist=${this.hoist}\n ?disabled=${this.disabled}\n exportparts=\"body, base, popup, arrow\"\n >\n <div slot=\"content\">\n ${this.content ? this.content : html`<slot name=\"content\"></slot>`}\n </div>\n <slot>\n <axebow-icon\n .iconName=${this.icon}\n .iconColor=${this.color}\n .size=${this.size}\n class=\"cursor-pointer flex items-center justify-center\"\n ></axebow-icon>\n </slot>\n </sl-tooltip>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\n\n@customElement(\"axebow-adjustment-resources-counter\")\nexport class AxebowAdjustmentResourcesCounter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n\n @property({ type: String }) type: 'normal' | 'boxed' = 'normal';\n @property({ type: Boolean }) criticalHighlight = false;\n @property({ type: Number }) number = 0;\n @property({ type: String }) description = \"\";\n @property({ type: String }) tooltipText = \"\";\n\n render() {\n switch (this.type) {\n case 'normal':\n return this._renderNormal();\n case 'boxed':\n return this._renderBoxed();\n default:\n return this._renderNormal();\n }\n }\n\n private _renderBoxed() {\n return html`\n <div class=\"flex flex-col items-center py-2 px-3 w-30.75 h-fit border border-solid border-[#DBDDE4] rounded-md relative\">\n ${this.tooltipText ? html`\n <axebow-tooltip\n class=\"absolute top-1 right-1\"\n icon=\"info\"\n color=\"#DBDDE4\"\n size=\"xl\"\n .content=${this.tooltipText}\n ></axebow-tooltip>\n ` : ''}\n <div class=\"flex items-center gap-1\">\n <p class=\"text-lg font-semibold text-[#344966]\">${this.number}</p>\n </div>\n <p class=\"text-center\">${this.description}</p>\n </div>`;\n }\n\n private _renderNormal() {\n return html`\n <div class=\"flex flex-col py-2 w-27 h-fit ${this.criticalHighlight ? \"border-b border-solid border-(--axebow-premium-text)\" : \"\"}\">\n <div class=\"flex items-center gap-1\">\n <p class=\"text-lg font-semibold text-[#344966]\">${this.number}</p>\n ${this.criticalHighlight ? html`<axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-premium-text)\" size=\"xl\"></axebow-icon>` : ''}\n </div>\n <p>${this.description}</p>\n </div>`;\n }\n}\n\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/icon/icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface UploadZoneLabels {\n invalidZipStructure: string;\n clickToSelectDifferent: string;\n clickToUpload: string;\n orDragAndDrop: string;\n}\n\n@customElement('axebow-drag-drop-upload-file')\nexport class AxebowDragDropUploadFile extends LitElement {\n @property({ type: String }) fileName = '';\n @property({ type: String }) fileSizeLabel = '';\n @property({ type: String }) errorMessage = '';\n @property({ attribute: false }) labels!: UploadZoneLabels;\n @property({ attribute: false }) onFileSelected?: (file: File | null) => void;\n\n @state() private _isDragging = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .dropzone .upload-icon {\n color: #9ca3af;\n }\n .dropzone:hover .upload-icon,\n .dropzone:active .upload-icon,\n .dropzone.is-active .upload-icon {\n color: var(--axebow-tertiary);\n }\n .dropzone:hover .upload-text,\n .dropzone:active .upload-text,\n .dropzone.is-active .upload-text {\n color: var(--axebow-tertiary);\n }\n `,\n ];\n\n private _triggerFileInput = () => {\n (this.shadowRoot?.getElementById('zip-file-input') as HTMLInputElement)?.click();\n };\n\n private _handleFileSelection = (e: Event) => {\n const input = e.target as HTMLInputElement;\n this.onFileSelected?.(input.files?.[0] || null);\n };\n\n private _handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = false;\n this.onFileSelected?.(e.dataTransfer?.files?.[0] || null);\n };\n\n private _handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = true;\n };\n\n private _handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = false;\n };\n\n render() {\n const stateClasses = this.errorMessage\n ? 'border-[var(--axebow-error)] bg-red-50'\n : this.fileName\n ? 'border-[var(--axebow-tertiary)] bg-sky-50'\n : this._isDragging\n ? 'is-active border-[var(--axebow-tertiary)] bg-sky-100 scale-[1.02]'\n : 'border-gray-300 bg-white hover:border-[var(--axebow-tertiary)] hover:bg-gray-50';\n\n return html`\n <div\n class=\"dropzone w-full h-[8.26375rem] box-border flex flex-col items-center justify-center overflow-hidden border-2 border-dashed rounded-md p-4 text-center transition-all duration-300 ease-in-out cursor-pointer ${stateClasses}\"\n @click=${this._triggerFileInput}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n <input\n id=\"zip-file-input\"\n type=\"file\"\n accept=\".zip\"\n style=\"display: none;\"\n @change=${this._handleFileSelection}\n />\n ${this.errorMessage\n ? html`\n <div>\n <sl-icon name=\"exclamation-triangle\" style=\"font-size: 2rem; color: var(--axebow-error);\"></sl-icon>\n <div class=\"mt-2\">\n <p class=\"font-semibold text-(--axebow-error) text-base m-0\">${this.labels.invalidZipStructure}</p>\n <p class=\"text-base text-gray-700 mt-1 m-0\">${this.errorMessage}</p>\n </div>\n <p class=\"text-base text-gray-500 mt-2 m-0\">${this.labels.clickToSelectDifferent}</p>\n </div>\n `\n : this.fileName\n ? html`\n <div>\n <sl-icon name=\"check-circle\" style=\"font-size: 2rem; color: var(--axebow-tertiary);\"></sl-icon>\n <div class=\"flex items-center justify-center gap-2 mt-1\">\n <sl-icon name=\"file-zip\" style=\"font-size: 1.25rem;\"></sl-icon>\n <div>\n <p class=\"font-semibold text-base m-0\">${this.fileName}</p>\n <p class=\"text-base text-gray-500 m-0\">${this.fileSizeLabel}</p>\n </div>\n </div>\n <p class=\"text-base text-gray-500 mt-1 m-0\">${this.labels.clickToSelectDifferent}</p>\n </div>\n `\n : html`\n <div>\n <sl-icon name=\"cloud-upload\" class=\"upload-icon\" style=\"font-size: 2rem;\"></sl-icon>\n <p class=\"upload-text font-semibold text-base mt-1 m-0\">${this.labels.clickToUpload}</p>\n <p class=\"upload-text text-base text-gray-500 m-0\">${this.labels.orDragAndDrop}</p>\n </div>\n `}\n </div>\n `;\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type BannerType = 'info' | 'success' | 'warning' | 'error';\n\n/**\n * Purely presentational inline banner - message content comes in via the\n * default slot, everything else (type, icon, sizing, auto-hide duration)\n * is caller-supplied properties. Holds no business logic of its own beyond\n * the optional auto-hide timer, which only toggles its own visibility and\n * notifies the caller via `dismiss`.\n */\n@customElement('axebow-banner')\nexport class AxebowBanner extends LitElement {\n @property({ type: String }) type: BannerType = 'info';\n @property({ type: Boolean }) dismissible: boolean = false;\n @property({ type: String }) iconName: string | null = null;\n @property({ type: Boolean }) rounded: boolean = false;\n @property({ type: Boolean }) compact: boolean = false;\n @property({ type: Number }) durationMs?: number;\n\n private autoHideTimer?: ReturnType<typeof setTimeout>;\n\n @state() private visible = true;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n disconnectedCallback() {\n this.clearAutoHideTimer();\n super.disconnectedCallback?.();\n }\n\n updated(changedProps: Map<string, any>) {\n if (changedProps.has('visible') || changedProps.has('durationMs') || changedProps.has('persistent')) {\n this.setupAutoHide();\n }\n }\n\n private setupAutoHide() {\n this.clearAutoHideTimer();\n if (!this.visible) return;\n if (typeof this.durationMs === 'number' && this.durationMs > 0) {\n this.autoHideTimer = setTimeout(() => {\n this.visible = false;\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('dismiss', { bubbles: true, composed: true }));\n }, this.durationMs);\n }\n }\n\n private clearAutoHideTimer() {\n if (this.autoHideTimer) {\n clearTimeout(this.autoHideTimer as any);\n this.autoHideTimer = undefined;\n }\n }\n\n render() {\n if (!this.visible) return html``;\n\n const map: Record<BannerType, { bg: string; border: string; text: string; icon: string }> = {\n info: { bg: 'bg-blue-50', border: 'border-blue-200', text: 'text-blue-800', icon: 'text-blue-600' },\n success: { bg: 'bg-green-50', border: 'border-green-200', text: 'text-green-800', icon: 'text-green-600' },\n warning: {\n bg: 'bg-(--axebow-warning-bg)',\n border: 'border-(--axebow-dark-yellow)',\n text: 'text-yellow-800',\n icon: 'text-yellow-600',\n },\n error: {\n bg: 'bg-(--axebow-error-bg)',\n border: 'border-(--axebow-error-border)',\n text: 'text-[var(--axebow-error)]',\n icon: 'text-[var(--axebow-error)]',\n },\n };\n\n const classes = map[this.type] || map.info;\n const padding = this.compact ? 'px-3 py-1.5' : 'px-4 pb-4 pt-3';\n\n return html`\n <div\n class=\"w-full ${padding} border ${classes.border} border-solid ${classes.bg} ${this.rounded\n ? 'rounded-md'\n : ''} flex items-start gap-[0.625rem]\"\n >\n <div class=\"w-6 h-6 shrink-0 flex items-center justify-center\">\n ${this.iconName\n ? html`<axebow-icon\n class=\"${classes.icon}\"\n iconName=\"${this.iconName}\"\n iconColor=\"${classes.icon}\"\n ></axebow-icon>`\n : html`<axebow-icon\n class=\"${classes.icon}\"\n iconName=\"${this.getDefaultIcon()}\"\n iconColor=\"${classes.icon}\"\n ></axebow-icon>`}\n </div>\n <div class=\"flex-1\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n private getDefaultIcon() {\n switch (this.type) {\n case 'success':\n return 'check_circle';\n case 'warning':\n return 'warning';\n case 'error':\n return 'error';\n case 'info':\n default:\n return 'info';\n }\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational on/off switch: a thin wrapper around sl-switch\n * with the thumb always contained inside the track, axebow-gray thumb\n * on white when off, white thumb on axebow-success when on. Owns no\n * state of its own - the caller tracks checked and reacts to onChange.\n */\n@customElement('axebow-switch')\nexport class AxebowSwitch extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n vertical-align: bottom;\n }\n sl-switch {\n vertical-align: bottom;\n }\n sl-switch::part(base) {\n display: flex !important;\n }\n sl-switch::part(control) {\n box-sizing: border-box !important;\n background-color: var(--axebow-white, #ffffff) !important;\n border: 1px solid var(--axebow-table-header-border) !important;\n border-radius: var(--height) !important;\n }\n sl-switch::part(thumb) {\n background-color: var(--axebow-gray) !important;\n border-color: var(--axebow-gray) !important;\n border-radius: 50% !important;\n }\n sl-switch[checked]::part(control) {\n background-color: var(--axebow-success) !important;\n border-color: var(--axebow-table-header-border) !important;\n }\n sl-switch[checked]::part(thumb) {\n background-color: var(--axebow-white, #ffffff) !important;\n border-color: var(--axebow-success) !important;\n }\n `,\n ];\n\n @property({ type: Boolean }) checked = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: String }) width?: string;\n @property({ type: String }) height?: string;\n @property({ attribute: false }) onChange?: (checked: boolean) => void;\n\n render() {\n const customSizeStyle = this.width && this.height ? `--width: ${this.width}; --height: ${this.height};` : '';\n\n return html`\n <sl-switch\n size=\"${this.size}\"\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n style=\"--sl-color-primary-600: var(--axebow-success); --thumb-size: 0.875rem; ${customSizeStyle}\"\n @sl-change=${(e: Event) => this.onChange?.((e.target as HTMLInputElement).checked)}\n >\n <slot></slot>\n </sl-switch>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-banner/axebow-banner.js';\nimport '../axebow-switch/axebow-switch.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-resources-counter/axebow-resources-counter.js';\nimport '../axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.js';\nimport type { ResourceLimitItem } from '../axebow-resources-counter/axebow-resources-counter.js';\nimport type { UploadZoneLabels } from '../axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface RuntimeZipDialogLabels extends UploadZoneLabels {\n title: string;\n uploadDescriptionPrefix: string;\n environmentResourcesInfo: string;\n zipWarningStrong: string;\n zipWarningEg: string;\n zipWarningCannotValidate: string;\n zipWarningFailing: string;\n serviceName: string;\n serviceNamePlaceholder: string;\n serviceNameHelp: string;\n dslDeployment: string;\n deploy: string;\n cancel: string;\n}\n\n@customElement('axebow-runtime-zip-dialog')\nexport class AxebowRuntimeZipDialog extends LitElement {\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ attribute: false }) labels!: RuntimeZipDialogLabels;\n\n @property({ type: String }) tenantName = '';\n @property({ type: String }) accountName = '';\n @property({ type: String }) environmentName = '';\n @property({ type: Array }) resourceLimits: ResourceLimitItem[] = [];\n\n @property({ type: String }) serviceName = '';\n @property({ type: String }) serviceNameError = '';\n @property({ type: Boolean }) serviceNameDisabled = false;\n @property({ attribute: false }) onServiceNameInput?: (value: string) => void;\n\n @property({ type: Boolean }) isDslZip = false;\n @property({ attribute: false }) onDslChange?: (checked: boolean) => void;\n\n @property({ type: String }) fileName = '';\n @property({ type: String }) fileSizeLabel = '';\n @property({ type: String }) fileError = '';\n @property({ attribute: false }) onFileSelected?: (file: File | null) => void;\n\n @property({ type: Boolean }) isDeployEnabled = false;\n @property({ type: Boolean }) isDeploying = false;\n @property({ attribute: false }) onDeploy?: () => void;\n @property({ attribute: false }) onClose?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(panel) {\n background-color: var(--axebow-base);\n width: 36.1875rem;\n height: 44.51375rem;\n padding: 1.5rem;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n border-radius: 0.25rem;\n overflow: hidden;\n }\n sl-dialog::part(header) {\n display: none;\n }\n sl-dialog::part(body) {\n padding: 0;\n margin: 0;\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n sl-dialog::part(footer) {\n display: none;\n }\n `,\n ];\n\n render() {\n return html`\n <sl-dialog\n label=${this.labels?.title ?? ''}\n ?open=${this.open}\n @sl-request-close=${(e: CustomEvent) => {\n if (e.detail?.source === 'overlay') e.preventDefault();\n else this.onClose?.();\n }}\n >\n <div class=\"flex flex-col gap-6 shrink-0 pl-11.75\">\n <div class=\"flex items-center justify-between gap-2\">\n <h2 class=\"m-0 text-xl font-semibold\">${this.labels.title}</h2>\n <div\n class=\"w-6 h-6 shrink-0 flex items-center justify-center cursor-pointer\"\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"var(--axebow-gray)\" size=\"xl\"></axebow-icon>\n </div>\n </div>\n <p class=\"w-120.75 h-21.25 leading-[1.0625rem] m-0\">\n ${this.labels.uploadDescriptionPrefix}<br /><br />\n \"${this.tenantName} &gt; ${this.accountName} &gt;\n <span class=\"text-(--axebow-primary)\">${this.environmentName}</span>\".<br /><br />\n <strong>${this.labels.environmentResourcesInfo}</strong>\n </p>\n </div>\n\n <div class=\"flex flex-col gap-4 pl-11.75\">\n ${this.resourceLimits.length > 0\n ? html`<axebow-resources-counter .items=${this.resourceLimits}></axebow-resources-counter>`\n : ''}\n\n <axebow-banner\n type=\"warning\"\n rounded\n dismissible\n compact\n style=\"width: 30.25rem; height: 5.75rem; overflow: hidden;\"\n >\n <p class=\"m-0 font-medium text-base leading-[1.21875rem]\">\n <strong>${this.labels.zipWarningStrong} </strong>${this.labels.zipWarningEg}\n <strong>${this.labels.zipWarningCannotValidate}</strong> ${this.labels.zipWarningFailing}\n </p>\n </axebow-banner>\n\n <sl-divider\n style=\"width: 100%; max-width: 30.25rem; --width: 0.0625rem; --color: var(--axebow-gray); --spacing: 0; margin: 0 !important;\"\n ></sl-divider>\n\n <axebow-input\n style=\"width: 30.25rem;\"\n label=${this.labels.serviceName}\n description=${this.labels.serviceNameHelp}\n placeholder=${this.labels.serviceNamePlaceholder}\n .value=${this.serviceName}\n .required=${true}\n .disabled=${this.serviceNameDisabled}\n .hasError=${!!this.serviceNameError}\n errorMessage=${this.serviceNameError}\n .callback=${(e: Event) => this.onServiceNameInput?.((e.target as HTMLInputElement).value)}\n ></axebow-input>\n\n <div class=\"flex items-center w-121 h-5\">\n <axebow-switch .checked=${this.isDslZip} .onChange=${(checked: boolean) => this.onDslChange?.(checked)}>\n <span class=\"text-base\">${this.labels.dslDeployment}</span>\n </axebow-switch>\n </div>\n\n <axebow-drag-drop-upload-file\n .fileName=${this.fileName}\n .fileSizeLabel=${this.fileSizeLabel}\n .errorMessage=${this.fileError}\n .labels=${this.labels}\n .onFileSelected=${(file: File | null) => this.onFileSelected?.(file)}\n ></axebow-drag-drop-upload-file>\n </div>\n\n <div class=\"flex justify-end gap-4 shrink-0\">\n <axebow-button\n variant=\"primary\"\n outline\n fixedWidth=\"9.375rem\"\n fixedHeight=\"2.5rem\"\n @click=${() => this.onClose?.()}\n >\n ${this.labels.cancel}\n </axebow-button>\n <axebow-button\n variant=\"primary\"\n fixedWidth=\"9.375rem\"\n fixedHeight=\"2.5rem\"\n .disabled=${!this.isDeployEnabled || this.isDeploying}\n @click=${() => this.onDeploy?.()}\n >\n ${this.labels.deploy}\n </axebow-button>\n </div>\n </sl-dialog>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ActionMenuItem } from './../cards/card.models.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\n\n@customElement('axebow-more-actions')\nexport class AxebowMoreActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n axebow-button::part(base) {\n min-width: auto !important;\n }\n `,\n ];\n\n @property({ type: Boolean }) open = false;\n @property({ type: String }) placement: 'top' | 'bottom' = 'bottom';\n @property({ type: Boolean }) disabled = false;\n @property({ type: Array }) options: ActionMenuItem[] = [];\n @property({ type: String }) title = '';\n @property({ type: String }) iconName = '';\n @property({ type: Boolean }) openToRight = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n @property({ type: String }) fixedHeight?: string;\n\n @state() private _fixedPos = { top: 0, right: 0 };\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n window.addEventListener('scroll', this._handleScroll, true);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n window.removeEventListener('scroll', this._handleScroll, true);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this.open && !this.contains(e.target as Node)) {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n };\n\n private _handleScroll = () => {\n if (this.open && this.openToRight) {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n };\n\n private _toggle(e: Event) {\n if (this.disabled) return;\n e.stopPropagation();\n if (!this.open && this.openToRight) {\n const btn = this.shadowRoot?.querySelector<HTMLElement>('.trigger');\n if (btn) {\n const rect = btn.getBoundingClientRect();\n this._fixedPos = { top: rect.bottom + 8, right: window.innerWidth - rect.right };\n }\n }\n this.open = !this.open;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: this.open } }));\n }\n\n private _handleSlotClick() {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n\n render() {\n const placementClass = this.placement === 'top' ? 'bottom-full mb-2' : 'top-full mt-2';\n const dropdownStyle = this.openToRight\n ? `position:fixed;top:${this._fixedPos.top}px;right:${this._fixedPos.right}px;z-index:1000;`\n : '';\n\n return html`\n <div class=\"relative w-full h-full flex justify-end\">\n <axebow-button\n class=\"trigger w-full h-full\"\n variant=\"tertiary\"\n fixedWidth=\"100%\"\n fixedHeight=${this.fixedHeight}\n ?disabled=${this.disabled}\n @click=${this._toggle}\n >\n ${this.iconName\n ? html`<axebow-icon iconName=${this.iconName} size=\"md\" iconColor=\"currentColor\"></axebow-icon>`\n : this.open ? this.closeLabel : (this.title || this.moreActionsLabel)}\n </axebow-button>\n ${this.open\n ? html`\n <div\n class=\"absolute right-0 z-10 bg-white border border-(--axebow-gray) rounded-md shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] p-2 min-w-44 flex flex-col ${placementClass}\"\n style=${dropdownStyle}\n @click=${this._handleSlotClick}\n >\n ${this.options?.length\n ? this.options.map(\n (opt) => html`\n <button\n class=\"flex items-center gap-2 text-left py-1 px-2 cursor-pointer rounded border border-transparent bg-transparent w-full hover:bg-gray-100\"\n @click=${(e: Event) => {\n e.stopPropagation();\n opt.onTap(e);\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }}\n @mouseenter=${(e: Event) => ((e.currentTarget as HTMLElement).style.borderColor = `var(--axebow-${opt.type})`)}\n @mouseleave=${(e: Event) => ((e.currentTarget as HTMLElement).style.borderColor = 'transparent')}\n >\n <axebow-icon iconName=${opt.icon} iconColor=\"var(--axebow-${opt.type})\" size=\"md\"></axebow-icon>\n <p class=\"m-0 whitespace-nowrap\" style=\"color:var(--axebow-${opt.type});\">${opt.label}</p>\n </button>\n `\n )\n : html`<slot></slot>`}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-card-cloud-logo')\nexport class AxebowCardCloudLogo extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: contents; }`,\n ];\n\n @property({ type: String }) src: string | null = null;\n @property({ type: String }) size: 'small' | 'large' = 'large';\n\n render() {\n if (!this.src) return html``;\n\n return this.size === 'small'\n ? html`<div class=\"flex items-center justify-center shrink-0\" style=\"height:1.125rem;width:1.125rem;\"><img src=${this.src} class=\"max-h-full max-w-full object-contain\" /></div>`\n : html`<div class=\"flex items-center justify-center shrink-0\" style=\"height:3.125rem;width:3.125rem;\"><img src=${this.src} class=\"max-h-full max-w-full object-contain\" /></div>`;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RevisionItem } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\n@customElement('axebow-card-version-selector')\nexport class AxebowCardVersionSelector extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n width: auto;\n max-width: var(--axebow-card-version-selector-max-width, 120px);\n margin-block: 0.25rem;\n }\n sl-select {\n --sl-input-background-color: transparent;\n --sl-input-border-color: transparent;\n --sl-input-background-color-focus: transparent;\n --sl-input-border-color-focus: transparent;\n --sl-focus-ring-width: 0px;\n --sl-color-primary-500: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n --sl-input-spacing-small: 0.1875rem;\n --sl-input-height-small: auto;\n --sl-input-font-size-small: var(--text-base, 0.75rem);\n --sl-font-size-medium: var(--text-base, 0.75rem);\n --sl-spacing-small: 0;\n display: inline-flex !important;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n min-width: 0;\n width: fit-content !important;\n max-width: var(--axebow-card-version-selector-max-width, 120px) !important;\n }\n sl-select::part(form-control) {\n display: inline-block;\n width: fit-content;\n border: none;\n background-color: transparent;\n padding: 0;\n min-width: 0;\n }\n sl-select::part(form-control-input) {\n display: inline-block;\n width: fit-content;\n }\n sl-select::part(display-input) { padding: 0; color: var(--axebow-tertiary); font-size: 0.75rem !important; transition: color 0.15s ease; }\n sl-select::part(combobox) {\n padding-inline-start: 0.25rem !important;\n padding-block: 0.125rem !important;\n gap: 0.25rem !important;\n justify-content: flex-start;\n cursor: pointer;\n border: none;\n outline: 1px solid transparent;\n outline-offset: -1px;\n border-radius: 0.375rem;\n background-color: transparent;\n transition: background-color 0.15s ease, outline-color 0.15s ease;\n }\n sl-select[open]::part(combobox) {\n outline-color: var(--axebow-tertiary);\n border-radius: 0.375rem 0.375rem 0 0;\n background-color: white;\n }\n sl-select::part(expand-icon) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 1.125rem;\n height: 1.125rem;\n border: 1px solid var(--axebow-tertiary);\n border-radius: 0.25rem;\n color: var(--axebow-tertiary);\n background-color: transparent;\n transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;\n }\n sl-select::part(listbox) {\n border-color: var(--axebow-tertiary);\n border-top: none;\n border-radius: 0 0 0.375rem 0.375rem;\n box-shadow: none;\n margin-top: -1px;\n }\n sl-option::part(base) { font-size: 0.75rem; padding-inline-start: 0.25rem !important; }\n sl-option::part(checked-icon) { display: none; }\n\n sl-select:hover::part(display-input) { color: var(--axebow-gray); }\n sl-select:hover::part(expand-icon) { color: var(--axebow-gray); border-color: var(--axebow-gray); }\n\n sl-select[open]::part(expand-icon) {\n color: white;\n border-color: var(--axebow-tertiary);\n background-color: var(--axebow-tertiary);\n }\n `,\n ];\n\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) maxWidth?: string;\n\n protected updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('maxWidth')) {\n if (this.maxWidth) this.style.setProperty('--axebow-card-version-selector-max-width', this.maxWidth);\n else this.style.removeProperty('--axebow-card-version-selector-max-width');\n }\n }\n\n private _formatRevision(id: string): string {\n if (!id) return '';\n const parts = id.split('/');\n return parts[parts.length - 1] ?? id;\n }\n\n render() {\n return html`\n <sl-select size=\"small\" value=${this.displayedRevision} ?disabled=${this.disabled} @sl-change=${this._onChange}>\n ${this.revisions.map(\n (rev) => html`\n <sl-option value=${rev.id}>\n ${this._formatRevision(rev.id)}\n ${rev.id !== this.displayedRevision\n ? html`<axebow-icon slot=\"suffix\" iconName=\"update\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>`\n : ''}\n </sl-option>\n `\n )}\n </sl-select>\n `;\n }\n\n private _onChange(e: CustomEvent) {\n const revision = (e.target as HTMLSelectElement).value;\n this.dispatchEvent(new CustomEvent('revision-change', { detail: { revision }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\n\n@customElement('axebow-role-tooltip')\nexport class AxebowRoleTooltip extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: contents; }\n axebow-tooltip::part(body),\n sl-tooltip::part(body) {\n background-color: var(--axebow-white);\n color: var(--axebow-primary);\n padding: 1rem;\n border: 3px solid var(--axebow-table-border);\n width: 280px;\n }\n ul {\n margin: 0.5rem 0 0;\n padding-left: 1.2rem;\n list-style: disc;\n }\n li {\n font-size: 0.8rem;\n line-height: 1.5;\n }\n `,\n ];\n\n @property({ type: String }) heading = '';\n @property({ type: Array }) items: string[] = [];\n @property({ type: String }) color = 'var(--axebow-primary)';\n\n render() {\n if (!this.heading) return html``;\n\n return html`\n <axebow-tooltip placement=\"right\">\n <div slot=\"content\">\n <strong>${this.heading}</strong>\n <ul>\n ${this.items.map((item) => html`<li>${item}</li>`)}\n </ul>\n </div>\n <axebow-icon iconName=\"info\" class=\"cursor-pointer\" iconColor=${this.color}></axebow-icon>\n </axebow-tooltip>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardBadge, CardType, RevisionItem, RoleTooltipContent } from '../card.models.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\nimport '@shoelace-style/shoelace/dist/components/badge/badge.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-card-cloud-logo.js';\nimport './axebow-card-version-selector.js';\nimport './axebow-role-tooltip.js';\n\n@customElement('axebow-card-header')\nexport class AxebowCardHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n sl-badge::part(base) { background-color: var(--axebow-secondary); color: white; }\n `,\n ];\n\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) tenantOrAccount = '';\n @property({ type: String }) name = '';\n @property({ type: String }) badge: CardBadge = 'none';\n @property({ type: String }) subtitle = '';\n @property({ type: String }) cardType: CardType = 'account';\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: String }) freeIaasLabel = 'Free IaaS';\n @property({ type: String }) freeIaasTitle = 'Free Infrastructure';\n @property({ type: String }) freeIaasDesc = 'This environment uses free infrastructure.';\n @property({ type: String }) haLabel = 'Highly Available';\n @property({ type: String }) haTitle = 'High Availability enabled';\n @property({ type: String }) role = '';\n @property({ type: Object }) roleTooltips: Record<string, RoleTooltipContent> = {};\n @property({ type: String }) roleTooltipColor = 'var(--axebow-primary)';\n\n private _renderBadge() {\n if (this.badge === 'free-iaas') {\n return html`\n <axebow-tooltip>\n <div slot=\"content\" style=\"max-width:300px;\">\n <strong>${this.freeIaasTitle}</strong>\n <p style=\"margin-top:0.5rem;\">${this.freeIaasDesc}</p>\n </div>\n <div class=\"flex items-center gap-2 cursor-pointer\">\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n <span class=\"text-(--axebow-rich-black)\">${this.freeIaasLabel}</span>\n </div>\n </axebow-tooltip>\n `;\n }\n if (this.badge === 'ha') {\n return html`\n <axebow-tooltip content=${this.haTitle}>\n <sl-badge variant=\"neutral\" pill size=\"small\" class=\"cursor-pointer\">${this.haLabel}</sl-badge>\n </axebow-tooltip>\n `;\n }\n return html``;\n }\n\n private _headerHeight(): string {\n switch (this.cardType) {\n case 'tenant':\n return '4.375rem';\n case 'environment':\n return '3.6875rem';\n case 'account':\n case 'runtime':\n default:\n return '4.125rem';\n }\n }\n\n render() {\n const isTenant = this.cardType === 'tenant';\n const isCompact = this.cardType === 'environment' || isTenant;\n const isRuntime = this.cardType === 'runtime';\n const heightStyle = `height:${this._headerHeight()}`;\n\n if (isCompact) {\n return html`\n <div class=\"${isTenant ? 'w-88.5 mx-auto' : 'w-full'} bg-(--axebow-anti-flash-white) rounded-md flex flex-col justify-center px-5 py-3 box-border\" style=${heightStyle}>\n <div class=\"flex flex-col flex-1 min-w-0\">\n ${this.tenantOrAccount || this.logoSrc\n ? html`\n <div class=\"flex gap-2 items-center leading-none mt-1\">\n <axebow-card-cloud-logo .src=${this.logoSrc} size=\"small\"></axebow-card-cloud-logo>\n <span class=\"font-semibold text-(--axebow-gray) leading-none\">${this.tenantOrAccount}</span>\n </div>\n `\n : ''}\n <div class=\"flex justify-between items-center\">\n <span class=\"font-bold text-lg text-(--axebow-primary) leading-snug pt-0.5\">${this.name}</span>\n ${this._renderBadge()}\n </div>\n ${this.subtitle\n ? html`\n <div class=\"text-(--axebow-gray) flex items-center gap-1 mt-1\">\n ${this.subtitle}\n ${isTenant && this.roleTooltips[this.role]\n ? html`\n <axebow-role-tooltip\n .heading=${this.roleTooltips[this.role].title}\n .items=${this.roleTooltips[this.role].items}\n color=${this.roleTooltipColor}\n ></axebow-role-tooltip>\n `\n : html`<slot name=\"subtitle-tooltip\"></slot>`}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"w-full bg-(--axebow-anti-flash-white) rounded-md flex items-center ${isRuntime ? 'gap-3 py-2 px-3' : 'gap-2 py-2 px-2'} box-border\" style=${heightStyle}>\n <axebow-card-cloud-logo .src=${this.logoSrc} size=\"large\"></axebow-card-cloud-logo>\n <div class=\"flex flex-col ${isRuntime ? 'flex-1 min-w-0 justify-center' : 'w-71 h-9.75'}\">\n ${!isRuntime && this.tenantOrAccount\n ? html`<div class=\"h-4.25 flex items-center\"><span class=\"text-base font-semibold text-(--axebow-gray) leading-none\">${this.tenantOrAccount}</span></div>`\n : ''}\n <div class=\"flex justify-between items-center ${isRuntime ? 'mt-1.5' : 'h-5.5'}\">\n <span class=\"font-bold text-lg text-(--axebow-primary) leading-snug ${isRuntime ? 'pl-1' : ''}\">${this.name}</span>\n ${this._renderBadge()}\n </div>\n ${isRuntime\n ? html`\n <div class=\"revision-wrap flex items-center mt-0\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n @revision-change=${this._onRevisionChange}\n ></axebow-card-version-selector>\n </div>\n `\n : this.subtitle\n ? html`<div class=\"text-xs text-(--axebow-gray) flex items-center gap-1 mt-1\">${this.subtitle}<slot name=\"subtitle-tooltip\"></slot></div>`\n : ''}\n </div>\n </div>\n `;\n }\n\n private _onRevisionChange(e: CustomEvent) {\n this.dispatchEvent(new CustomEvent('revision-change', { detail: e.detail, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-card-stat-item')\nexport class AxebowCardStatItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Number }) value: number = 0;\n @property({ type: String }) title = '';\n @property({ type: String }) label = '';\n @property({ type: Boolean }) active = true;\n\n render() {\n return html`\n <div class=\"flex flex-col items-center justify-center text-center w-30\">\n <h4 class=\"text-[18px] leading-none text-(--axebow-primary) font-bold m-0 whitespace-nowrap\">${this.value}</h4>\n <p class=\"mt-2 text-base leading-none m-0 whitespace-nowrap\">${this.title}</p>\n <div class=\"mt-1.75 h-3.5 leading-none\">\n ${this.label\n ? html`\n <span\n class=\"text-(--axebow-gray) font-semibold text-base whitespace-nowrap ${this.active ? 'cursor-pointer opacity-100' : 'cursor-not-allowed opacity-50'}\"\n @click=${this._onClick}\n >${this.label}</span>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private _onClick() {\n if (this.active) {\n this.dispatchEvent(new CustomEvent('label-click', { bubbles: true, composed: true }));\n }\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardType, MainStatsType } from '../card.models.js';\nimport './axebow-card-stat-item.js';\n\n@customElement('axebow-card-stats-row')\nexport class AxebowCardStatsRow extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) stats: MainStatsType[] = [];\n @property({ type: String }) cardType: CardType = 'account';\n\n private _hasButtons(): boolean {\n return this.cardType === 'account' || this.cardType === 'environment' || this.cardType === 'tenant';\n }\n\n render() {\n const heightClass = this._hasButtons() ? 'h-17.75' : 'h-11.25';\n\n return html`\n <div class=\"grid grid-cols-[7.5rem_7.5rem_7.5rem] items-center gap-0.5 w-91 ${heightClass} box-border\">\n ${this.stats.map(\n (stat, index) => html`\n <axebow-card-stat-item\n .value=${stat.value}\n .title=${stat.title}\n .label=${stat.label}\n .active=${stat.active !== false}\n @label-click=${() => this._handleLabelClick(index)}\n ></axebow-card-stat-item>\n `\n )}\n </div>\n `;\n }\n\n private _handleLabelClick(index: number) {\n this.dispatchEvent(\n new CustomEvent('stat-label-click', { detail: { index }, bubbles: true, composed: true })\n );\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-filter-item')\nexport class AxebowCardFilterItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: String }) name = '';\n @property({ type: Boolean }) showAttention = false;\n\n render() {\n return html`\n <div\n class=\"w-full py-1 px-2 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${this._onClick}\n >\n <p class=\"m-0\">${this.name}</p>\n ${this.showAttention\n ? html`<axebow-icon iconName=\"error\" size=\"md\" iconColor=\"var(--axebow-error)\"></axebow-icon>`\n : ''}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(\n new CustomEvent('item-select', { detail: { name: this.name }, bubbles: true, composed: true })\n );\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardFilterItem } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-card-filter-item.js';\n\n@customElement('axebow-card-filter')\nexport class AxebowCardFilter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) items: CardFilterItem[] = [];\n @property({ type: String }) selected: string | null = null;\n @property({ type: String }) emptyLabel = '';\n @property({ type: String }) emptyActionLabel = '';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Boolean }) opened = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: Boolean }) isDisabled = false;\n\n render() {\n const showEmpty = !this.selected && this.items.length === 0;\n\n return html`\n <div class=\"relative\">\n <div class=\"flex justify-between items-center border-b border-(--axebow-light-gray) w-full h-8 box-border px-2 cursor-pointer\">\n ${showEmpty\n ? html`\n <p\n class=\"m-0 ${this.isPlainRole || this.isDisabled\n ? 'text-(--axebow-gray) cursor-default opacity-50'\n : 'text-(--axebow-tertiary) cursor-pointer'}\"\n @click=${this.isPlainRole || this.isDisabled ? undefined : this._onEmptyAction}\n >\n ${this.emptyActionLabel}\n </p>\n `\n : html`\n <div\n class=\"flex w-full justify-between items-center ${this.isDisabled ? 'opacity-50 cursor-not-allowed' : ''}\"\n @click=${this.isDisabled ? undefined : this._onToggle}\n >\n <span class=\"text-(--axebow-tertiary)\">${this.selected ?? this.emptyLabel}</span>\n <div class=\"flex items-center gap-2\">\n ${this.showAttention\n ? html`<p class=\"text-(--axebow-error) m-0 text-xs\">${this.attentionLabel}</p>`\n : ''}\n <axebow-icon iconName=\"chevron_right\" rotate=\"90\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `}\n </div>\n\n <div class=\"${this.opened ? '' : 'hidden'} absolute top-full left-0 right-0 z-10 flex flex-col bg-white rounded-b-lg border border-(--axebow-light-gray) shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] max-h-40 overflow-y-auto\">\n <p class=\"w-full p-2 cursor-pointer m-0 hover:bg-(--axebow-light-gray)\" @click=${() => this._onSelect(null)}>${this.emptyLabel}</p>\n ${this.items.map(\n (item) => html`\n <axebow-card-filter-item\n .name=${item.name}\n .showAttention=${item.showAttention}\n @item-select=${(e: CustomEvent) => this._onSelect(e.detail.name)}\n ></axebow-card-filter-item>\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _onToggle() {\n this.dispatchEvent(new CustomEvent('toggle-open', { bubbles: true, composed: true }));\n }\n\n private _onSelect(name: string | null) {\n this.dispatchEvent(new CustomEvent('filter-select', { detail: { name }, bubbles: true, composed: true }));\n }\n\n private _onEmptyAction() {\n this.dispatchEvent(new CustomEvent('empty-action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RuntimeFilterRole } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-table-header')\nexport class AxebowCardTableHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Boolean }) opened = false;\n @property({ type: String }) filterDisplayText = '';\n @property({ type: String }) allLabel = 'All Roles & Instances';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Array }) filterRoles: RuntimeFilterRole[] = [];\n\n render() {\n return html`\n <div class=\"relative\">\n <div\n class=\"flex justify-between items-center border-b border-(--axebow-light-gray) w-full h-8 box-border px-2 cursor-pointer\"\n @click=${this._onToggle}\n >\n <span class=\"text-(--axebow-tertiary)\">${this.filterDisplayText || this.allLabel}</span>\n <div class=\"flex items-center gap-2\">\n ${this.showAttention ? html`<p class=\"text-(--axebow-error) m-0 text-xs\">${this.attentionLabel}</p>` : ''}\n <axebow-icon iconName=\"chevron_right\" rotate=\"90\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n\n <div class=\"${this.opened ? '' : 'hidden'} absolute top-full left-0 right-0 z-10 flex flex-col bg-white rounded-b-lg border border-(--axebow-light-gray) shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] max-h-40 overflow-y-auto\">\n <p class=\"w-full p-2 cursor-pointer m-0 hover:bg-(--axebow-light-gray)\" @click=${() => this._onSelect('', 'all')}>${this.allLabel}</p>\n ${this.filterRoles.map(\n (role) => html`\n <div\n class=\"w-full py-1 px-2 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${() => this._onSelect(role.name, 'role')}\n >\n <div class=\"flex items-center gap-2\">\n ${role.logo ? html`<img src=${role.logo} class=\"w-5 h-5\" />` : ''}\n <p class=\"m-0\">${role.name}</p>\n </div>\n </div>\n ${role.instances.map(\n (inst) => html`\n <div\n class=\"w-full py-1 px-2 pl-6 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${() => this._onSelect(inst.name, 'instance')}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <p class=\"m-0\">${inst.name}</p>\n </div>\n ${inst.needsAttention\n ? html`<axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>`\n : ''}\n </div>\n `\n )}\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _onToggle() {\n this.dispatchEvent(new CustomEvent('toggle-open', { bubbles: true, composed: true }));\n }\n\n private _onSelect(selected: string, type: 'instance' | 'role' | 'all') {\n this.dispatchEvent(new CustomEvent('filter-change', { detail: { selected, type }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport { TableStatsType } from '../card.models.js';\n\n@customElement('axebow-card-resource-row')\nexport class AxebowCardResourceRow extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: contents; }`,\n ];\n\n @property({ type: Object }) stat!: TableStatsType;\n @property({ type: Number }) attentionThreshold = 90;\n @property({ type: Boolean }) isLast = false;\n @property({ type: Boolean }) allEmpty = false;\n\n private formatNumber(value?: number | string): number | string {\n if (value === undefined || value === null) return '-.-';\n if (typeof value !== 'number') return value;\n return Number(value.toFixed(2));\n }\n\n render() {\n const stat = this.stat;\n const showDivider = !stat.hidden && !this.isLast;\n const textClass = stat.isSecondary ? 'text-sm font-normal' : 'text-base font-semibold';\n const barHeightClass = stat.isSecondary ? 'h-2.25' : 'h-2.75';\n const rowHeightClass = stat.isSecondary ? 'h-5.25' : 'h-7';\n const cellClass = `w-full ${rowHeightClass} box-border ${showDivider ? 'border-b border-dashed border-(--axebow-light-gray)' : ''}`;\n\n if (stat.hidden) {\n return html`\n <div class=\"flex items-center ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n `;\n }\n\n return html`\n <div class=\"flex items-center ${cellClass}\">\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=${stat.icon} size=\"md\" rotate=${stat.iconRotation ?? 0}></axebow-icon>\n <span class=\"${textClass}\">${stat.title}</span>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <p class=\"${textClass} m-0\">${this.formatNumber(stat.value)}</p>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <div class=\"${barHeightClass} w-35 bg-(--axebow-light-gray) rounded-md relative overflow-hidden\">\n <div\n class=\"absolute h-full ${stat.percentage >= this.attentionThreshold ? 'bg-(--axebow-error)' : 'bg-(--axebow-gray)'}\"\n style=\"width:${stat.percentage}%;\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <p class=\"${textClass} m-0\">\n ${this.allEmpty\n ? '-.-'\n : html`${this.formatNumber(stat.maxValue)}<span class=\"font-normal\">${stat.title === 'vCPU' ? '' : stat.tagValue ?? ''}</span>`}\n </p>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { TableStatsType } from '../card.models.js';\nimport './axebow-card-resource-row.js';\n\n@customElement('axebow-card-resource-table')\nexport class AxebowCardResourceTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) rows: TableStatsType[] = [];\n @property({ type: Number }) attentionThreshold = 90;\n\n render() {\n const visibleRows = this.rows.filter((r) => !r.hidden);\n const lastVisible = visibleRows[visibleRows.length - 1];\n const allEmpty = visibleRows.every((r) => Number(r.maxValue ?? 0) === 0);\n\n return html`\n <div class=\"grid grid-cols-[auto_auto_1fr_auto] gap-x-2 gap-y-1 w-full px-2 pt-px box-border\">\n ${this.rows.map(\n (stat) => html`\n <axebow-card-resource-row\n .stat=${stat}\n .attentionThreshold=${this.attentionThreshold}\n .isLast=${stat === lastVisible}\n .allEmpty=${allEmpty}\n ></axebow-card-resource-row>\n `\n )}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-attention-banner')\nexport class AxebowCardAttentionBanner extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n .error-bg { background-color: color-mix(in srgb, var(--axebow-error) 10%, white); }\n .clickable { cursor: pointer; }\n .clickable:hover { background-color: var(--axebow-base); --axebow-error: var(--axebow-gray); }\n axebow-button::part(label) { color: var(--axebow-error); font-weight: 600; display: flex; align-items: center; gap: 2px; }\n axebow-button::part(base) { padding: 0; height: auto; min-height: unset; pointer-events: none; background-color: transparent; }\n axebow-icon { display: inline-flex; align-items: center; line-height: 1; }\n `,\n ];\n\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) label = 'View details';\n @property({ type: String }) askOwnerLabel = 'Ask an owner or admin to solve this problem';\n\n render() {\n return html`\n <div\n class=\"${this.isPlainRole ? '' : 'error-bg clickable'} flex items-center justify-center gap-1 w-full h-8.75 box-border px-3 text-sm text-center overflow-hidden\"\n @click=${this.isPlainRole ? undefined : this._onClick}\n >\n ${this.isPlainRole\n ? html`<span class=\"text-(--axebow-error)\">${this.askOwnerLabel}</span>`\n : html`\n <axebow-button variant=\"text\" size=\"small\">\n ${this.label}\n <axebow-icon iconName=\"arrow_forward\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>\n </axebow-button>\n `}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-action-banner')\nexport class AxebowCardActionBanner extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n .tertiary-bg { background-color: color-mix(in srgb, var(--axebow-tertiary) 10%, white); }\n .clickable { cursor: pointer; }\n .clickable:hover { background-color: var(--axebow-base); --axebow-tertiary: var(--axebow-gray); }\n axebow-button::part(label) { color: var(--axebow-tertiary); font-weight: 600; display: flex; align-items: center; gap: 2px; }\n axebow-button::part(base) { padding: 0; height: auto; min-height: unset; pointer-events: none; background-color: transparent; }\n axebow-icon { display: inline-flex; align-items: center; line-height: 1; }\n `,\n ];\n\n @property({ type: String }) label = 'View details';\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) notAllowedLabel = '';\n\n render() {\n return html`\n <div\n class=\"${this.isPlainRole ? '' : 'tertiary-bg clickable'} flex items-center justify-center gap-1 w-full h-8.75 box-border px-3 text-sm text-center overflow-hidden\"\n @click=${this.isPlainRole ? undefined : this._onClick}\n >\n ${this.isPlainRole\n ? html`<span class=\"text-(--axebow-gray)\">${this.notAllowedLabel}</span>`\n : html`\n <axebow-button variant=\"text\" size=\"small\">\n ${this.label}\n <axebow-icon iconName=\"arrow_forward\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </axebow-button>\n `}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\nimport '@shoelace-style/shoelace/dist/components/spinner/spinner.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-status')\nexport class AxebowCardStatus extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; flex: 1; min-width: 0; }\n axebow-tooltip::part(base),\n sl-tooltip::part(base) { max-width: none; white-space: normal; word-break: break-word; }\n `,\n ];\n\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) borderColor = '';\n @property({ type: Boolean }) showSpinner = false;\n\n render() {\n if (!this.statusCode) {\n return html`<div class=\"w-full whitespace-nowrap overflow-hidden text-ellipsis\"><slot></slot></div>`;\n }\n\n return html`\n <div class=\"flex items-center gap-1 min-w-0 w-full\">\n ${this.showSpinner ? html`<sl-spinner style=\"--indicator-color:${this.borderColor};\"></sl-spinner>` : ''}\n <p class=\"font-bold m-0 line-clamp-1\" style=\"color:${this.borderColor};\" title=${this.statusCode}>${this.statusCode}</p>\n <axebow-tooltip content=${this.statusMessage}>\n <axebow-icon class=\"cursor-pointer shrink-0\" iconColor=${this.borderColor} iconName=\"info\" size=\"md\"></axebow-icon>\n </axebow-tooltip>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ActionMenuItem } from '../card.models.js';\nimport './../../axebow-more-actions/axebow-more-actions.js';\nimport './axebow-card-status.js';\n\n@customElement('axebow-card-footer')\nexport class AxebowCardFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Boolean }) isFreeIaaS = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) borderColor = '';\n @property({ type: Boolean }) showSpinner = false;\n @property({ type: Boolean }) moreActionsOpen = false;\n @property({ type: Array }) moreActionsOptions: ActionMenuItem[] = [];\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n @property({ type: String }) actionLabel = '';\n\n render() {\n const showDropdown = !this.isFreeIaaS && !this.isPlainRole && this.moreActionsOptions.length > 0;\n const showAction = !showDropdown && !!this.actionLabel;\n\n return html`\n <div class=\"flex justify-between items-center relative h-8 gap-2\">\n <axebow-card-status\n .statusCode=${this.statusCode}\n .statusMessage=${this.statusMessage}\n .borderColor=${this.borderColor}\n .showSpinner=${this.showSpinner}\n >\n <slot></slot>\n </axebow-card-status>\n ${showDropdown\n ? html`\n <axebow-more-actions\n class=\"w-27.5 h-8 shrink-0\"\n placement=\"top\"\n .open=${this.moreActionsOpen}\n .options=${this.moreActionsOptions}\n .closeLabel=${this.closeLabel}\n .moreActionsLabel=${this.moreActionsLabel}\n @toggled=${this._onToggled}\n ></axebow-more-actions>\n `\n : showAction\n ? html`<axebow-button\n variant=\"text\"\n size=\"medium\"\n hoverStyle=\"border\"\n paddingLeft=\"0.5rem\"\n paddingRight=\"0.5rem\"\n fixedWidth=\"7.0625rem\"\n fixedHeight=\"2rem\"\n @click=${this._onAction}\n >${this.actionLabel}</axebow-button\n >`\n : ''}\n </div>\n `;\n }\n\n private _onToggled(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('more-actions-toggled', { detail: { open: e.detail.open }, bubbles: true, composed: true })\n );\n }\n\n private _onAction() {\n this.dispatchEvent(new CustomEvent('footer-action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport {\n ActionMenuItem,\n CardBadge,\n CardFilterItem,\n CardType,\n MainStatsType,\n RevisionItem,\n RoleTooltipContent,\n RuntimeFilterRole,\n TableStatsType,\n} from './card.models.js';\nimport './../axebow-more-actions/axebow-more-actions.js';\nimport './parts/axebow-card-header.js';\nimport './parts/axebow-card-stats-row.js';\nimport './parts/axebow-card-filter.js';\nimport './parts/axebow-card-table-header.js';\nimport './parts/axebow-card-resource-table.js';\nimport './parts/axebow-card-attention-banner.js';\nimport './parts/axebow-card-action-banner.js';\nimport './parts/axebow-card-footer.js';\n\n@customElement('axebow-base-card')\nexport class AxebowBaseCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: inline-block; max-width: 100%; }\n .deploy-time {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `,\n ];\n\n @property({ type: String, reflect: true, attribute: 'card-type' }) cardType: CardType = 'account';\n @property({ type: String }) name = '';\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) tenantOrAccount = '';\n @property({ type: String }) badge: CardBadge = 'none';\n @property({ type: String }) subtitle = '';\n\n @property({ type: Array }) mainStats: MainStatsType[] = [];\n\n @property({ type: Array }) tableStats: TableStatsType[] = [];\n @property({ type: Number }) attentionThreshold = 90;\n\n @property({ type: Array }) filterItems: CardFilterItem[] = [];\n @property({ type: String }) selected: string | null = null;\n @property({ type: Boolean }) filterOpened = false;\n @property({ type: String }) emptyLabel = '';\n @property({ type: String }) emptyActionLabel = '';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: Boolean }) isDeleting = false;\n @property({ type: Boolean }) isDisabled = false;\n\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) isDeployed = false;\n @property({ type: String }) deployedLabel = 'Deployed';\n\n @property({ type: Array }) filterRoles: RuntimeFilterRole[] = [];\n @property({ type: String }) filterDisplayText = '';\n @property({ type: String }) allLabel = 'All Roles & Instances';\n\n @property({ type: String }) borderColor = '';\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) serviceDetailLabel = 'Service detail';\n\n @property({ type: Boolean }) showActionBanner = false;\n @property({ type: Boolean }) showWarningBanner = false;\n @property({ type: String }) manageLabel = 'Manage';\n @property({ type: String }) askOwnerLabel = 'Ask your owner';\n @property({ type: String }) invalidCredsLabel = 'Invalid credentials.';\n @property({ type: String }) limitReachedLabel = 'Limit reached.';\n @property({ type: String }) andLabel = 'and';\n @property({ type: String }) actionBannerLabel = '';\n @property({ type: String }) notAllowedLabel = '';\n\n @property({ type: Boolean }) moreActionsOpen = false;\n @property({ type: Array }) moreActionsOptions: ActionMenuItem[] = [];\n @property({ type: Boolean }) isFreeIaaS = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n\n @property({ type: String }) freeIaasLabel = 'Free IaaS';\n @property({ type: String }) freeIaasTitle = 'Free Infrastructure';\n @property({ type: String }) freeIaasDesc = 'This environment uses free infrastructure.';\n @property({ type: String }) haLabel = 'Highly Available';\n @property({ type: String }) haTitle = 'High Availability enabled';\n\n @property({ type: String }) role = '';\n @property({ type: Object }) roleTooltips: Record<string, RoleTooltipContent> = {};\n @property({ type: String }) roleTooltipColor = 'var(--axebow-primary)';\n\n private static readonly SIZE_CLASSES: Record<CardType, string> = {\n tenant: 'w-95 min-h-107.5',\n account: 'w-95 min-h-113.25',\n environment: 'w-95 min-h-113.25',\n runtime: 'w-95 min-h-102.5',\n };\n\n private _hasAttention(): boolean {\n const primary = this.tableStats.slice(0, 3).map((r) => r.title);\n return this.tableStats.some((s) => primary.includes(s.title) && s.percentage >= this.attentionThreshold);\n }\n\n render() {\n const isRuntime = this.cardType === 'runtime';\n\n const hasError = this.showWarningBanner || this._hasAttention();\n const showErrorBanner = this.showActionBanner && hasError;\n const showNormalBanner = this.showActionBanner && !hasError;\n const showBanner = showErrorBanner || showNormalBanner;\n\n return html`\n <div\n class=\"${AxebowBaseCard.SIZE_CLASSES[this.cardType]} bg-(--axebow-white) rounded-md px-2 pt-2 pb-2 flex flex-col justify-between gap-2 box-border ${isRuntime ? 'border-t-4' : ''} transition-shadow duration-200 ease-in-out hover:shadow-[0_4px_12px_0_rgba(13,24,33,0.08)] ${this.isDeleting ? 'pointer-events-none cursor-not-allowed grayscale' : ''}\"\n style=${isRuntime ? `border-top-color:${this.borderColor};` : ''}\n ?inert=${this.isDeleting}\n >\n <div class=\"flex flex-col gap-2\">\n <axebow-card-header\n .cardType=${this.cardType}\n .logoSrc=${this.logoSrc}\n .tenantOrAccount=${this.tenantOrAccount}\n .name=${this.name}\n .badge=${this.badge}\n .subtitle=${this.subtitle}\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n .freeIaasLabel=${this.freeIaasLabel}\n .freeIaasTitle=${this.freeIaasTitle}\n .freeIaasDesc=${this.freeIaasDesc}\n .haLabel=${this.haLabel}\n .haTitle=${this.haTitle}\n .role=${this.role}\n .roleTooltips=${this.roleTooltips}\n .roleTooltipColor=${this.roleTooltipColor}\n @revision-change=${(e: CustomEvent) =>\n this.dispatchEvent(new CustomEvent('revision-change', { detail: e.detail, bubbles: true, composed: true }))}\n >\n <slot slot=\"subtitle-tooltip\" name=\"subtitle-tooltip\"></slot>\n </axebow-card-header>\n\n <div class=\"w-full flex flex-col gap-2\">\n ${isRuntime\n ? html`\n <div class=\"flex flex-row justify-between items-center min-h-10 max-h-10 overflow-hidden\">\n <span class=\"deploy-time text-(--axebow-secondary)\"><slot name=\"time-elapsed\"></slot></span>\n ${this.isDeployed\n ? html`<span class=\"text-(--axebow-secondary) border-2 border-(--axebow-secondary) rounded-md py-0.5 px-1.5 whitespace-nowrap text-xs\">${this.deployedLabel}</span>`\n : ''}\n </div>\n `\n : html`\n <axebow-card-stats-row\n .stats=${this.mainStats}\n .cardType=${this.cardType}\n @stat-label-click=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('stat-label-click', { detail: e.detail, bubbles: true, composed: true }))}\n ></axebow-card-stats-row>\n `}\n\n <div class=\"flex flex-col w-full h-full\">\n <div class=\"w-87 mx-2 border border-(--axebow-light-gray) box-border ${showBanner ? 'rounded-t-md' : 'rounded-md'}\">\n ${isRuntime\n ? html`\n <axebow-card-table-header\n .opened=${this.filterOpened}\n .filterDisplayText=${this.filterDisplayText}\n .allLabel=${this.allLabel}\n .attentionLabel=${this.attentionLabel}\n .showAttention=${this.showAttention}\n .filterRoles=${this.filterRoles}\n @toggle-open=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('toggle-filter', { bubbles: true, composed: true }))}\n @filter-change=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('filter-change', { detail: e.detail, bubbles: true, composed: true }))}\n ></axebow-card-table-header>\n `\n : html`\n <axebow-card-filter\n .items=${this.filterItems}\n .selected=${this.selected}\n .emptyLabel=${this.emptyLabel}\n .emptyActionLabel=${this.emptyActionLabel}\n .attentionLabel=${this.attentionLabel}\n .showAttention=${this.showAttention}\n .opened=${this.filterOpened}\n .isPlainRole=${this.isPlainRole}\n .isDisabled=${this.isDeleting || this.isDisabled}\n @filter-select=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('filter-select', { detail: e.detail, bubbles: true, composed: true }))}\n @toggle-open=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('toggle-filter', { bubbles: true, composed: true }))}\n @empty-action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('empty-action-click', { bubbles: true, composed: true }))}\n ></axebow-card-filter>\n `}\n\n <axebow-card-resource-table\n .rows=${this.tableStats}\n .attentionThreshold=${this.attentionThreshold}\n ></axebow-card-resource-table>\n </div>\n\n <div class=\"w-87 mx-2 h-8.75 box-border ${showBanner ? 'border-x border-b border-(--axebow-light-gray) rounded-b-md overflow-hidden' : ''}\">\n ${showErrorBanner\n ? html`<axebow-card-attention-banner\n .isPlainRole=${this.isPlainRole}\n .label=${this.actionBannerLabel}\n .askOwnerLabel=${this.askOwnerLabel}\n @action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }))}\n ></axebow-card-attention-banner>`\n : showNormalBanner\n ? html`<axebow-card-action-banner\n .label=${this.actionBannerLabel}\n .isPlainRole=${this.isPlainRole}\n .notAllowedLabel=${this.notAllowedLabel}\n @action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }))}\n ></axebow-card-action-banner>`\n : ''}\n </div>\n </div>\n\n <slot name=\"extra-features\"></slot>\n </div>\n </div>\n\n <axebow-card-footer\n class=\"px-2\"\n .isFreeIaaS=${this.isFreeIaaS}\n .isPlainRole=${this.isPlainRole}\n .statusCode=${isRuntime ? this.statusCode : ''}\n .statusMessage=${isRuntime ? this.statusMessage : ''}\n .borderColor=${this.borderColor}\n .showSpinner=${isRuntime && this.borderColor === 'var(--axebow-gray)'}\n .moreActionsOpen=${this.moreActionsOpen}\n .moreActionsOptions=${isRuntime ? [] : this.moreActionsOptions}\n .closeLabel=${this.closeLabel}\n .moreActionsLabel=${this.moreActionsLabel}\n .actionLabel=${isRuntime ? this.serviceDetailLabel : ''}\n @more-actions-toggled=${(e: CustomEvent) =>\n this.dispatchEvent(new CustomEvent('more-actions-toggled', { detail: e.detail, bubbles: true, composed: true }))}\n @footer-action-click=${() =>\n this.dispatchEvent(new CustomEvent('service-detail-click', { bubbles: true, composed: true }))}\n >\n <slot name=\"status-footer\"></slot>\n </axebow-card-footer>\n\n <slot name=\"dialogs\" class=\"contents\"></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-special-link')\nexport class AxebowCardSpecialLink extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: inline-flex; }`,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: String }) color = 'var(--axebow-error)';\n @property({ type: String }) icon = 'arrow_forward';\n\n render() {\n return html`\n <span class=\"cursor-pointer\" style=\"color:${this.color};\" @click=${this._onClick}>\n ${this.label}\n <axebow-icon iconName=${this.icon} iconColor=${this.color} size=\"md\"></axebow-icon>\n </span>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('link-click', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme, STATUS_COLORS } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\n\nexport type AlertVariant = 'success' | 'info' | 'neutral' | 'warning' | 'error';\n\nconst VARIANT_CONFIG: Record<AlertVariant, { icon: string; iconColor: string }> = {\n success: { icon: 'check_circle', iconColor: STATUS_COLORS.HEALTHY },\n info: { icon: 'info', iconColor: 'var(--axebow-tertiary)' },\n neutral: { icon: 'settings', iconColor: 'var(--axebow-secondary)' },\n warning: { icon: 'warning', iconColor: STATUS_COLORS.WARNING },\n error: { icon: 'error', iconColor: STATUS_COLORS.ERROR },\n};\n\n/**\n * Purely presentational toast/alert. Holds no business state of its own -\n * message, variant and the close/action callbacks are supplied by the\n * caller. `visible` is a controlled prop; the component only calls\n * `onClose` once its own hide animation finishes, it never removes itself\n * from the DOM.\n */\n@customElement('axebow-alert')\nexport class AxebowAlert extends LitElement {\n @property({ type: String }) variant: AlertVariant = 'info';\n @property({ type: String }) message = '';\n @property({ type: Boolean }) closable = true;\n @property({ type: Boolean }) visible = false;\n @property({ type: String }) actionLabel = '';\n @property({ type: String }) closeLabel = 'Close';\n @property({ attribute: false }) onAction?: () => void;\n @property({ attribute: false }) onClose?: () => void;\n\n @property({ type: Number }) duration = 4000;\n\n private _isClosing = false;\n private _autoCloseTimeout?: ReturnType<typeof setTimeout>;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n animation: slideIn 0.3s ease-out;\n pointer-events: auto;\n }\n\n @keyframes slideIn {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n :host(.closing) {\n animation: slideOut 0.3s ease-in;\n }\n\n @keyframes slideOut {\n from {\n transform: translateX(0);\n opacity: 1;\n }\n to {\n transform: translateX(100%);\n opacity: 0;\n }\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n if (this.duration > 0) {\n this._autoCloseTimeout = setTimeout(() => this._handleClose(), this.duration);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._autoCloseTimeout) clearTimeout(this._autoCloseTimeout);\n }\n\n private _handleClose() {\n if (this._isClosing) return;\n this._isClosing = true;\n\n if (this._autoCloseTimeout) clearTimeout(this._autoCloseTimeout);\n\n this.classList.add('closing');\n setTimeout(() => {\n this.visible = false;\n this.onClose?.();\n }, 300);\n }\n\n render() {\n if (!this.visible) return html``;\n\n const config = VARIANT_CONFIG[this.variant] ?? VARIANT_CONFIG.info;\n\n return html`\n <div\n class=\"theme flex items-start gap-3 p-4 rounded-md border-l-4 shadow-md transition-all duration-300 bg-white axebow-shadow\"\n style=\"border-left-color: ${config.iconColor};\"\n >\n <axebow-icon iconName=\"${config.icon}\" iconColor=\"${config.iconColor}\" size=\"3xl\"></axebow-icon>\n <div class=\"flex-1 min-w-0\">\n <p class=\"line-clamp-11 overflow-hidden m-0\" .innerHTML=${this.message}></p>\n </div>\n ${this.actionLabel\n ? html`<axebow-button\n variant=\"text\"\n size=\"small\"\n fixedWidth=\"2.3125rem\"\n fixedHeight=\"1.0625rem\"\n @click=${() => {\n this.onAction?.();\n this._handleClose();\n }}\n >${this.actionLabel}</axebow-button\n >`\n : ''}\n ${this.closable\n ? html`\n <button\n @click=${() => this._handleClose()}\n aria-label=${this.closeLabel}\n class=\"text-gray-500 hover:text-gray-700 cursor-pointer p-0 border-0 bg-transparent\"\n >\n <axebow-icon iconName=\"close\" size=\"md\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../cards/parts/axebow-card-version-selector.js';\nimport type { RevisionItem } from '../cards/card.models.js';\n\n@customElement('axebow-draggable-service')\nexport class AxebowDraggableService extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) serviceName = '';\n @property({ type: String }) resourcesSummary = '';\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) showVersionSelector = false;\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: String }) dragData = '';\n\n private _handleDragStart(e: DragEvent) {\n if (this.disabled || !e.dataTransfer) return;\n e.dataTransfer.setData('application/json', this.dragData);\n e.dataTransfer.effectAllowed = 'copy';\n }\n\n render() {\n return html`\n <div\n class=\"w-56.5 h-12.75 pt-2 pb-2 pr-2 box-border flex items-center gap-1 rounded-md ${this.disabled\n ? 'bg-(--axebow-base) opacity-50 cursor-not-allowed'\n : 'bg-(--axebow-base) cursor-grab'}\"\n draggable=\"${this.disabled ? 'false' : 'true'}\"\n @dragstart=${this._handleDragStart}\n >\n <axebow-icon class=\"w-4.5 h-4.5 shrink-0\" iconName=\"drag_indicator\" iconColor=\"var(--axebow-gray)\"></axebow-icon>\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <div class=\"h-4.25 flex items-center gap-1 min-w-0\">\n <h1 class=\"w-27 h-4.25 leading-4.25 truncate m-0 text-base font-semibold text-(--axebow-black)\">\n ${this.serviceName}\n </h1>\n ${this.showVersionSelector\n ? html`<div class=\"flex-1 min-w-0 flex justify-end\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n ></axebow-card-version-selector>\n </div>`\n : ''}\n </div>\n <p class=\"h-3.5 leading-3.5 truncate m-0 text-sm text-(--axebow-gray)\">${this.resourcesSummary}</p>\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-search/axebow-search.js';\nimport '../axebow-draggable-service/axebow-draggable-service.js';\n\nexport interface AxebowServiceListItem {\n name: string;\n resourcesSummary: string;\n disabled: boolean;\n dragData: string;\n}\n@customElement('axebow-services-panel')\nexport class AxebowServicesPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n flex-shrink: 0;\n }\n `,\n ];\n\n @property({ type: Boolean }) collapsed = true;\n @property({ type: Array }) services: AxebowServiceListItem[] = [];\n @property({ type: String }) searchTerm = '';\n\n @property({ type: String }) title = '';\n @property({ type: String }) dragDropText = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) noServicesFoundText = '';\n\n render() {\n if (this.collapsed) {\n return html`\n <div\n class=\"h-10 w-10 rounded-full bg-(--axebow-tertiary) hover:bg-(--axebow-gray) transition-colors duration-200 flex items-center justify-center cursor-pointer\"\n @click=${this._handleToggle}\n >\n <axebow-icon iconName=\"add\" iconColor=\"white\"></axebow-icon>\n </div>\n `;\n }\n\n return html`\n <div class=\"flex items-start\">\n ${this._renderCard()}\n <div\n class=\"w-4.25 h-4.5 mt-2.25 pl-px flex items-center justify-center border border-l-0 border-solid border-(--axebow-tertiary) hover:border-(--axebow-gray) transition-colors duration-200 rounded cursor-pointer bg-(--axebow-tertiary)/15\"\n @click=${this._handleToggle}\n >\n <axebow-icon iconName=\"close\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `;\n }\n\n private _renderCard() {\n return html`\n <div class=\"flex flex-col gap-2 w-60.5 shrink-0\">\n <div class=\"h-full bg-white rounded-md axebow-shadow p-2 box-border\">\n <div class=\"flex justify-between items-center gap-4\">\n <h1 class=\"font-semibold text-base text-(--axebow-secondary) uppercase px-1\">${this.title}</h1>\n </div>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80\"></div>\n <axebow-search\n class=\"px-1 my-2\"\n width=\"13.625rem\"\n placeholder=\"${this.searchPlaceholder}\"\n .value=${this.searchTerm}\n @search-change=${(e: CustomEvent<{ value: string }>) => this._handleSearchChange(e.detail.value)}\n ></axebow-search>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80 my-1.5\"></div>\n <p class=\"text-base text-center text-(--axebow-secondary) px-2\">${this.dragDropText}</p>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80\"></div>\n ${this._renderServicesList()}\n </div>\n </div>\n `;\n }\n\n private _renderServicesList() {\n if (this.services.length === 0) {\n return html`<p class=\"text-sm text-(--axebow-gray) px-2 mt-2\">${this.noServicesFoundText}</p>`;\n }\n return html`\n <div class=\"flex flex-col gap-1.5 mt-2\">\n ${this.services.map(\n (service) => html`\n <axebow-draggable-service\n .serviceName=${service.name}\n .resourcesSummary=${service.resourcesSummary}\n .disabled=${service.disabled}\n .dragData=${service.dragData}\n ></axebow-draggable-service>\n `\n )}\n </div>\n `;\n }\n\n private _handleToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, composed: true }));\n }\n\n private _handleSearchChange(value: string) {\n this.dispatchEvent(new CustomEvent('search-change', { detail: { value }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\n\n@customElement('axebow-channel-config-panel')\nexport class AxebowChannelConfigPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n flex-shrink: 0;\n }\n `,\n ];\n @property({ type: Boolean }) empty = true;\n @property({ type: String }) channelTypeLabel = '';\n @property({ type: Boolean }) canEditAll = true;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) height = '80vh';\n\n render() {\n return html`\n <div\n class=\"bg-white rounded-md axebow-shadow p-2 w-62.5 flex-col gap-3 transition-all duration-300 ease-in-out overflow-hidden\n hidden lg:flex ${this.empty ? 'justify-center items-center text-(--axebow-gray)' : ''}\"\n style=\"height: ${this.height};\"\n >\n ${this.empty\n ? ''\n : html`\n <div\n class=\"flex flex-col gap-3 opacity-100 transition-opacity duration-300 delay-100 w-full h-full overflow-y-auto\"\n >\n <div class=\"flex justify-between items-center gap-2 pointer-events-auto\">\n <h1\n class=\"font-semibold text-sm text-(--axebow-secondary) truncate m-0\"\n style=\"width: 14.625rem; height: 1rem; line-height: 1rem;\"\n >\n ${this.channelTypeLabel}\n </h1>\n ${this.canEditAll && !this.disabled\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer\"\n @click=${this._handleDelete}\n >\n <axebow-icon iconName=\"delete\" iconColor=\"var(--axebow-error)\" size=\"base\"></axebow-icon>\n </div>\n `\n : ''}\n ${this.disabled\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer pointer-events-auto\"\n @click=${this._handleClose}\n >\n <axebow-icon iconName=\"close\" iconColor=\"var(--axebow-gray)\" size=\"base\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n <div class=\"flex flex-col gap-2 w-full ${this.disabled ? 'pointer-events-none' : ''}\">\n <slot name=\"name-input\"></slot>\n <slot name=\"port-input\"></slot>\n <slot name=\"gateway-toggle\"></slot>\n <slot name=\"gateway-options\"></slot>\n </div>\n </div>\n `}\n </div>\n `;\n }\n\n private _handleDelete() {\n this.dispatchEvent(new CustomEvent('delete', { bubbles: true, composed: true }));\n }\n\n private _handleClose() {\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n","/**\n * Purely presentational DOM builders for the mesh canvas' service node\n * cards. Not a custom element - X6's `Shape.HTML.register` needs a raw\n * `HTMLElement` back synchronously, so these are plain functions instead.\n * Every label and per-channel tooltip is already-translated text supplied\n * by the caller (no translation calls in here); wiring these into X6\n * (shape registration, event → cell-id resolution, hover/trash-button\n * business logic) stays in the frontend's surface.node-renderer.ts.\n */\n\nexport interface AxebowMeshChannelData {\n readonly id: string;\n readonly name: string;\n readonly isPublic?: boolean;\n readonly port?: number;\n readonly portNum?: string;\n readonly protocol?: string;\n readonly showIcon?: boolean;\n readonly needsPort?: boolean;\n readonly isDuplicate?: boolean;\n readonly duplicateClass?: string;\n /** Already-formatted tooltip shown on the gateway icon, when showIcon is set. */\n readonly gatewayTooltip?: string;\n /** Already-translated tooltip for the \"port not configured\" warning icon. */\n readonly portWarningTooltip?: string;\n /** Already-translated tooltip for the \"duplicate channel name\" error icon. */\n readonly duplicateTooltip?: string;\n}\n\nexport interface AxebowMeshNodeLabels {\n serverChannelsTitle: string;\n clientChannelsTitle: string;\n duplexChannelsTitle: string;\n noChannelsText: string;\n comingSoonText: string;\n}\n\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n className?: string,\n textContent?: string\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (className) el.className = className;\n if (textContent) el.textContent = textContent;\n return el;\n}\n\nexport function createIcon(iconName: string, color: string, size: string, title?: string): HTMLElement {\n const icon = document.createElement('axebow-icon') as HTMLElement;\n icon.setAttribute('iconName', iconName);\n icon.setAttribute('iconColor', color);\n icon.setAttribute('size', size);\n if (title) icon.setAttribute('title', title);\n return icon;\n}\n\nfunction buildPortDot(channelId: string, side: 'left' | 'right'): HTMLElement {\n const dot = createElement('div', `port-dot port-dot-${side}`);\n dot.setAttribute('magnet', 'true');\n dot.setAttribute('port', `${channelId}-${side}`);\n dot.setAttribute('data-port-id', channelId);\n return dot;\n}\n\nfunction buildChannelRow(ch: AxebowMeshChannelData): HTMLElement {\n const row = createElement('div', `channel channel-row ${ch.duplicateClass || ''}`);\n\n const leftDot = buildPortDot(ch.id, 'left');\n row.appendChild(leftDot);\n\n const nameSpan = createElement('span', 'channel-name');\n nameSpan.setAttribute('data-channel-id', ch.id);\n nameSpan.textContent = ch.name;\n\n if (ch.showIcon) {\n const icon = createIcon('captive_portal', 'var(--axebow-primary)', 'small', ch.gatewayTooltip);\n icon.classList.add('channel-icon', 'protocol-icon');\n nameSpan.appendChild(icon);\n }\n row.appendChild(nameSpan);\n\n const iconsContainer = createElement('div', 'channel-icons-container flex items-center gap-1');\n\n if (ch.needsPort) {\n const warnIcon = createIcon('warning', 'var(--axebow-warning)', 'small', ch.portWarningTooltip);\n warnIcon.classList.add('channel-icon', 'warning-icon-right');\n iconsContainer.appendChild(warnIcon);\n }\n if (ch.isDuplicate) {\n const errIcon = createIcon('error', 'var(--axebow-error)', 'x-small', ch.duplicateTooltip);\n errIcon.classList.add('channel-icon', 'error-icon-right');\n iconsContainer.appendChild(errIcon);\n }\n row.appendChild(iconsContainer);\n\n const rightDot = buildPortDot(ch.id, 'right');\n row.appendChild(rightDot);\n\n const overlay = createElement('div', 'channel-drag-overlay');\n overlay.setAttribute('data-port-id', ch.id);\n overlay.setAttribute('port', ch.id);\n\n overlay.addEventListener('click', (e) => {\n e.stopPropagation();\n overlay.dispatchEvent(\n new CustomEvent('channel-clicked', {\n detail: { id: ch.id },\n bubbles: true,\n composed: true,\n })\n );\n });\n\n row.appendChild(overlay);\n\n return row;\n}\n\nfunction buildChannelSection(\n title: string,\n noChannelsText: string,\n channels: AxebowMeshChannelData[],\n addButton: HTMLElement | null\n): HTMLElement {\n const fragment = document.createDocumentFragment();\n\n const titleDiv = createElement('div', 'channel-title');\n const h4 = createElement('h4', undefined, title);\n titleDiv.appendChild(h4);\n if (addButton) titleDiv.appendChild(addButton);\n fragment.appendChild(titleDiv);\n\n const listDiv = createElement('div');\n if (channels.length === 0) {\n listDiv.appendChild(createElement('p', 'gray-text', noChannelsText));\n } else {\n channels.forEach((ch) => listDiv.appendChild(buildChannelRow(ch)));\n }\n fragment.appendChild(listDiv);\n\n const container = createElement('div');\n container.appendChild(fragment);\n return container;\n}\n\nfunction buildComingSoonSection(title: string, comingSoonText: string): HTMLElement {\n const fragment = document.createDocumentFragment();\n\n const titleDiv = createElement('div', 'channel-title');\n titleDiv.appendChild(createElement('h4', undefined, title));\n fragment.appendChild(titleDiv);\n\n const listDiv = createElement('div');\n listDiv.appendChild(createElement('p', 'gray-text', comingSoonText));\n fragment.appendChild(listDiv);\n\n const container = createElement('div');\n container.appendChild(fragment);\n return container;\n}\n\nexport function buildAddButton(channelType: string): HTMLElement {\n const container = createElement('div', 'add-button-container');\n container.classList.add(`add-button-${channelType}`);\n const icon = createIcon('add', 'var(--axebow-tertiary)', 'small');\n container.appendChild(icon);\n\n container.addEventListener('mouseenter', () => icon.setAttribute('iconColor', 'var(--axebow-gray)'));\n container.addEventListener('mouseleave', () => icon.setAttribute('iconColor', 'var(--axebow-tertiary)'));\n\n container.addEventListener('click', (e) => {\n e.stopPropagation();\n container.dispatchEvent(\n new CustomEvent('add-channel', {\n detail: { type: channelType },\n bubbles: true,\n composed: true,\n })\n );\n });\n\n return container;\n}\n\nfunction buildDivider(): HTMLElement {\n const divider = document.createElement('sl-divider');\n divider.classList.add('mesh-node-divider');\n return divider;\n}\n\nexport interface AxebowMainNodeData {\n label: string;\n serverChannels?: AxebowMeshChannelData[];\n clientChannels?: AxebowMeshChannelData[];\n duplexChannels?: AxebowMeshChannelData[];\n}\n\nexport function buildMainNodeContent(\n data: AxebowMainNodeData,\n labels: AxebowMeshNodeLabels,\n serverAddButton: HTMLElement | null,\n clientAddButton: HTMLElement | null\n): HTMLElement {\n const root = createElement('div');\n root.setAttribute('data-node-type', 'main');\n\n const card = createElement('div', 'service-card');\n card.appendChild(createElement('h4', 'service-name', data.label));\n\n const serverSection = buildChannelSection(\n labels.serverChannelsTitle,\n labels.noChannelsText,\n data.serverChannels || [],\n serverAddButton\n );\n card.appendChild(serverSection);\n card.appendChild(buildDivider());\n\n const clientSection = buildChannelSection(\n labels.clientChannelsTitle,\n labels.noChannelsText,\n data.clientChannels || [],\n clientAddButton\n );\n card.appendChild(clientSection);\n card.appendChild(buildDivider());\n\n const duplexSection = buildComingSoonSection(labels.duplexChannelsTitle, labels.comingSoonText);\n card.appendChild(duplexSection);\n\n root.appendChild(card);\n return root;\n}\n\nexport interface AxebowExternalNodeData extends AxebowMainNodeData {\n additionalClass?: string;\n labelClass?: string;\n}\n\nexport function buildExternalNodeContent(\n data: AxebowExternalNodeData,\n labels: Pick<AxebowMeshNodeLabels, 'serverChannelsTitle' | 'clientChannelsTitle' | 'noChannelsText'>\n): { root: HTMLElement; trashButton: HTMLElement; trashIcon: HTMLElement } {\n const root = createElement('div', data.additionalClass || '');\n root.setAttribute('data-node-type', 'external');\n\n const card = createElement('div', 'service-card');\n\n const label = createElement('h4', data.labelClass || '');\n label.style.marginBottom = '0.5rem';\n label.textContent = data.label;\n card.appendChild(label);\n\n const serverSection = buildChannelSection(\n labels.serverChannelsTitle,\n labels.noChannelsText,\n data.serverChannels || [],\n null\n );\n card.appendChild(serverSection);\n card.appendChild(buildDivider());\n\n const clientSection = buildChannelSection(\n labels.clientChannelsTitle,\n labels.noChannelsText,\n data.clientChannels || [],\n null\n );\n card.appendChild(clientSection);\n\n root.appendChild(card);\n\n const trashBtn = createElement('div', 'trash-button');\n\n const trashIcon = createIcon('delete', 'var(--axebow-error)', 'x-small');\n trashIcon.classList.add('delete-button');\n trashBtn.appendChild(trashIcon);\n\n root.appendChild(trashBtn);\n\n return { root, trashButton: trashBtn, trashIcon };\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '../axebow-icon/axebow-icon.js';\n\nexport interface HelpBubbleOption {\n label: string;\n url: string;\n}\n\n/**\n * Purely presentational floating help bubble. Which links to show (and\n * their already-translated labels) are supplied entirely by the caller -\n * the component only owns its own open/closed hover state and opens the\n * given URL in a new tab.\n */\n@customElement('axebow-help-bubble')\nexport class AxebowHelpBubble extends LitElement {\n @property({ type: Array }) options: HelpBubbleOption[] = [];\n\n @state() private _isOpen = false;\n\n static styles = unsafeCSS(tailwindCss);\n\n private _openLink(url: string) {\n window.open(url, '_blank');\n }\n\n render() {\n return html`\n <div\n class=\"flex flex-col items-end gap-2\"\n @mouseenter=${() => (this._isOpen = true)}\n @mouseleave=${() => (this._isOpen = false)}\n >\n ${this._isOpen\n ? html`\n <div class=\"flex flex-col bg-white rounded-md axebow-shadow overflow-hidden min-w-[8.2rem]\">\n <div class=\"flex justify-center px-3 py-1\">\n <div class=\"flex flex-col\">\n ${this.options.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2 px-3 py-1 my-0.5 rounded-md cursor-pointer hover:bg-[var(--axebow-anti-flash-white)] transition-colors\"\n @click=${() => this._openLink(option.url)}\n >\n <span class=\"text-sm font-semibold text-(--axebow-primary) whitespace-nowrap\"\n >${option.label}</span\n >\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-gray)\" size=\"base\"></axebow-icon>\n </div>\n `\n )}\n </div>\n </div>\n </div>\n `\n : ''}\n <div\n class=\"w-12 h-12 rounded-full flex items-center justify-center cursor-pointer shadow-lg transition-colors duration-200 self-end ${this\n ._isOpen\n ? 'bg-(--axebow-gray)'\n : 'bg-(--axebow-tertiary)'}\"\n >\n <axebow-icon iconName=\"contact_support\" iconColor=\"white\" size=\"xl\"></axebow-icon>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational stat card. Clickability and navigation are\n * entirely up to the caller via `onClick` - the component itself never\n * knows about routes.\n */\n@customElement('axebow-number-card')\nexport class AxebowNumberCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) icon = '';\n @property({ type: Number }) number = 0;\n @property({ type: String }) label = '';\n @property({ attribute: false }) onClick?: () => void;\n\n render() {\n const clickable = !!this.onClick;\n return html`\n <div\n class=\"flex items-center gap-3 w-70.5 h-20 box-border bg-white border-solid border border-[#DBDDE4] rounded-md p-3 ${clickable\n ? 'cursor-pointer axebow-shadow-hover'\n : ''}\"\n @click=${() => this.onClick?.()}\n >\n <div\n class=\"w-10.5 h-10.5 shrink-0 flex items-center justify-center bg-(--axebow-base) rounded-md\"\n >\n <axebow-icon iconName=${this.icon} size=\"3xl\"></axebow-icon>\n </div>\n <div class=\"flex flex-col min-w-0\">\n <h2 class=\"m-0 text-lg font-bold\">${this.number}</h2>\n <p class=\"m-0 text-base font-semibold text-(--axebow-gray) truncate\">${this.label}</p>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-number-card/axebow-number-card.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface NumberCardItem {\n icon: string;\n number: number;\n label: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational row of stat cards. Wraps to multiple lines on\n * narrow viewports since each card has a fixed width.\n */\n@customElement('axebow-numbers-section')\nexport class AxebowNumbersSection extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: Array }) items: NumberCardItem[] = [];\n\n render() {\n return html`\n <div class=\"flex flex-wrap gap-4\">\n ${this.items.map(\n (item) => html`\n <axebow-number-card\n icon=${item.icon}\n .number=${item.number}\n label=${item.label}\n .onClick=${item.onClick}\n ></axebow-number-card>\n `\n )}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface PillItem {\n icon?: string;\n image?: string;\n label: string;\n buttonText: string;\n buttonIcon?: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational call-to-action pill. Width fills whatever flex\n * row the caller puts it in; height hugs its own content - neither is\n * hardcoded here.\n */\n@customElement('axebow-pill')\nexport class AxebowPill extends LitElement {\n @property({ type: String }) icon = '';\n @property({ type: String }) image = '';\n @property({ type: String }) label = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) buttonIcon = '';\n @property({ attribute: false }) onClick?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n flex: 1 1 0%;\n min-width: 0;\n }\n .axebow-white-button-text::part(label) {\n color: white;\n }\n .pill:hover .axebow-white-button-text::part(label) {\n color: var(--axebow-primary) !important;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"pill group flex flex-col items-center justify-center gap-3 p-6\n transition-colors duration-300\n bg-(--axebow-primary) rounded-md text-white cursor-pointer shadow-md\n hover:border-2 hover:px-5.5 hover:border-solid hover:border-(--axebow-primary)\n hover:bg-white hover:text-(--axebow-primary) hover:shadow-lg\"\n @click=${() => this.onClick?.()}\n @mouseenter=${this._handleMouseEnter}\n @mouseleave=${this._handleMouseLeave}\n >\n ${this.image\n ? html`<img\n src=\"${this.image}\"\n class=\"w-12 h-12 transition-[filter] duration-300 ease-in-out group-hover:invert\"\n />`\n : html`<axebow-icon iconName=\"${this.icon}\" iconColor=\"white\" size=\"3xl\"></axebow-icon>`}\n <p class=\"text-center flex items-center justify-center px-2 font-medium m-0\">${this.label}</p>\n <axebow-button variant=\"text\" class=\"axebow-white-button-text\">\n ${this.buttonText}\n ${this.buttonIcon\n ? html`<axebow-icon iconName=\"${this.buttonIcon}\" iconColor=\"white\" size=\"md\"></axebow-icon>`\n : ''}\n </axebow-button>\n </div>\n `;\n }\n\n private _handleMouseEnter(event: Event) {\n const pill = event.currentTarget as HTMLElement;\n pill.querySelectorAll('axebow-icon').forEach((icon) => {\n icon.setAttribute('iconColor', 'var(--axebow-primary)');\n });\n }\n\n private _handleMouseLeave(event: Event) {\n const pill = event.currentTarget as HTMLElement;\n pill.querySelectorAll('axebow-icon').forEach((icon) => {\n icon.setAttribute('iconColor', 'white');\n });\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational header/collapse toggle for the quick-tip section.\n * `paddingBottom` (the floating collapsed button's bottom offset, so it\n * clears the app footer) and `onToggle` are both supplied by the caller -\n * the component owns no footer-tracking or navigation logic of its own.\n */\n@customElement('axebow-quick-tip-button')\nexport class AxebowQuickTipButton extends LitElement {\n @property({ type: String }) label = '';\n @property({ type: String }) showLabel = '';\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) isStarted = false;\n @property({ type: Number }) paddingBottom = 50;\n @property({ attribute: false }) onToggle?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n\n .collapsed-container {\n position: fixed;\n left: 50%;\n transform: translateX(-50%);\n z-index: 50;\n transition:\n bottom 0.3s ease,\n opacity 0.3s ease;\n width: auto;\n animation: fadeIn 0.3s ease-out;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translate(-50%, 20px);\n }\n to {\n opacity: 1;\n transform: translate(-50%, 0);\n }\n }\n\n .collapsed-button {\n background-color: white;\n border: 1px solid var(--axebow-light-gray);\n border-bottom: none;\n color: var(--axebow-gray);\n transition: all 0.2s ease;\n box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);\n border-radius: 0.375rem 0.375rem 0 0;\n }\n\n .collapsed-button:hover {\n border-color: var(--axebow-tertiary);\n color: var(--axebow-tertiary);\n background-color: var(--axebow-base);\n transform: translateY(-2px);\n }\n `,\n ];\n\n render() {\n if (this.collapsed && this.isStarted) {\n return this._renderFloatingButton();\n }\n\n return html`\n <div class=\"flex justify-center items-center gap-4 mb-6\">\n <h2 class=\"text-(--axebow-primary) text-lg font-black leading-none\">${this.label}</h2>\n ${this.isStarted\n ? html`\n <axebow-icon\n iconName=\"visibility_off\"\n class=\"cursor-pointer hover:text-(--axebow-tertiary) transition-colors\"\n iconColor=\"currentColor\"\n @click=${() => this.onToggle?.()}\n ></axebow-icon>\n `\n : ''}\n </div>\n `;\n }\n\n private _renderFloatingButton() {\n return html`\n <div class=\"collapsed-container\" style=\"bottom: ${this.paddingBottom}px;\" @click=${() => this.onToggle?.()}>\n <button class=\"collapsed-button w-47.75 h-7 flex items-center justify-center gap-2 cursor-pointer\">\n <span class=\"whitespace-nowrap text-sm font-bold\">${this.showLabel}</span>\n <axebow-icon iconName=\"visibility\" size=\"md\" iconColor=\"currentColor\"></axebow-icon>\n </button>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface InfrastructureItem {\n title: string;\n description: string;\n}\n\n/**\n * Purely presentational \"how your infrastructure is organized\" card.\n * Heading, image and the already-translated item list are all supplied\n * by the caller.\n */\n@customElement('axebow-infrastructure-card')\nexport class AxebowInfrastructureCard extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) heading = '';\n @property({ type: String }) imageUrl = '';\n @property({ type: Array }) items: InfrastructureItem[] = [];\n\n render() {\n return html`\n <div class=\"w-294 flex flex-col bg-white rounded-md shadow-sm\">\n <h3 class=\"text-md font-bold leading-tight text-center mt-8 mx-12 mb-6.5 text-(--axebow-primary)\">\n ${this.heading}\n </h3>\n <div class=\"w-270 mx-12 mb-8 flex items-center gap-8.75\">\n <img src=\"${this.imageUrl}\" class=\"w-130.25 h-49.5 object-contain shrink-0\" />\n <div class=\"w-131 text-base text-start\">\n <p class=\"m-0\">\n ${this.items.map(\n (item, index) => html`\n <span class=\"text-(--axebow-primary) font-bold\">${item.title}:</span> ${item.description}${index <\n this.items.length - 1\n ? html`<br /><br />`\n : ''}\n `\n )}\n </p>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport '../axebow-pill/axebow-pill.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-icon/axebow-icon.js';\nimport type { PillItem } from '../axebow-pill/axebow-pill.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational \"let's start it\" card. Title, description and\n * the already-translated pill configs (each carrying its own `onClick`)\n * are all supplied by the caller. The contact button only renders when\n * `contactUrl` is given - whether that link is configured is decided by\n * the caller, not here.\n */\n@customElement('axebow-getting-started-card')\nexport class AxebowGettingStartedCard extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) heading = '';\n @property({ type: String }) description = '';\n @property({ type: Array }) pills: PillItem[] = [];\n\n @property({ type: String }) contactUrl = '';\n @property({ type: String }) contactLabel = '';\n @property({ type: String }) dontShowAgainLabel = '';\n @property({ type: Boolean }) dontShowAgain = false;\n @property({ attribute: false }) onDontShowAgainChange?: (checked: boolean) => void;\n @property({ type: String }) notNowLabel = '';\n @property({ attribute: false }) onNotNow?: () => void;\n\n render() {\n return html`\n <div class=\"w-294 flex flex-col bg-white rounded-md shadow-sm\">\n <h2 class=\"text-md font-bold text-center mt-6 mx-6 mb-4 text-(--axebow-primary)\">${this.heading}</h2>\n <div class=\"w-282 mx-6\">\n <sl-divider style=\"width: 100%; margin: 0;\"></sl-divider>\n </div>\n <div class=\"w-282 h-52.75 mx-6 flex flex-col\">\n <p class=\"text-base text-center my-4 text-black\">${this.description}</p>\n <div class=\"flex gap-4\">\n ${this.pills.map(\n (pill) => html`\n <axebow-pill\n icon=${pill.icon || ''}\n image=${pill.image || ''}\n label=${pill.label}\n buttonText=${pill.buttonText}\n buttonIcon=${pill.buttonIcon || ''}\n .onClick=${pill.onClick}\n ></axebow-pill>\n `\n )}\n </div>\n </div>\n <div class=\"w-282 mx-6 mt-4 mb-4\">\n <sl-divider style=\"width: 100%; margin: 0;\"></sl-divider>\n </div>\n <div class=\"w-139 h-9.5 mx-auto mb-6 flex items-center justify-center gap-4\">\n ${this.contactUrl\n ? html`\n <axebow-button variant=\"primary\" outline @click=${() => window.open(this.contactUrl, '_blank')}>\n ${this.contactLabel}\n <axebow-icon iconName=\"open_in_new\" size=\"md\" slot=\"suffix\"></axebow-icon>\n </axebow-button>\n `\n : ''}\n <div class=\"flex items-center gap-2\">\n <sl-checkbox\n .checked=${this.dontShowAgain}\n @sl-change=${(e: Event) => this.onDontShowAgainChange?.((e.target as HTMLInputElement).checked)}\n >\n ${this.dontShowAgainLabel}\n </sl-checkbox>\n <axebow-button fixedWidth=\"5.625rem\" variant=\"text\" @click=${() => this.onNotNow?.()}>${this.notNowLabel}</axebow-button>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface MarketplaceCardResource {\n icon: string;\n iconRotate?: number;\n text: string;\n exceedsLimit?: boolean;\n}\n\n/**\n * Purely presentational marketplace item card. Every label, resource\n * figure, badge color and the deploy callback are supplied by the\n * caller - the component owns no domain, translation or resource\n * availability logic of its own.\n */\n@customElement('axebow-marketplace-card')\nexport class AxebowMarketplaceCard extends LitElement {\n @property({ type: String }) logoSrc = '';\n @property({ type: String }) name = '';\n @property({ type: String }) version = '';\n @property({ type: Array }) versions: string[] = [];\n @property({ type: String }) domain = '';\n @property({ type: String }) domainColor = 'var(--axebow-primary)';\n @property({ type: String }) description = '';\n @property({ type: Array }) resources: MarketplaceCardResource[] = [];\n @property({ type: Boolean }) disabled = false;\n\n @property({ type: String }) badgeLabel = '';\n @property({ type: String }) badgeIcon = '';\n @property({ type: String }) badgeIconColor = 'var(--axebow-gray)';\n @property({ type: String }) badgeWidth = '3.5625rem';\n @property({ type: String }) badgeBgColor = 'var(--axebow-primary-light)';\n @property({ type: String }) badgeTextColor = 'var(--axebow-primary)';\n\n @property({ type: String }) deployLabel = '';\n @property({ attribute: false }) onDeploy?: () => void;\n\n @state() private _deployHovered = false;\n @state() private _versionsOpen = false;\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this._versionsOpen && !e.composedPath().includes(this)) {\n this._versionsOpen = false;\n }\n };\n\n private _closeVersions() {\n this._versionsOpen = false;\n }\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n axebow-button[variant='text']:hover::part(base) {\n background-color: var(--axebow-base);\n }\n axebow-button[variant='text']:hover::part(label) {\n color: var(--axebow-gray);\n text-decoration: none;\n }\n `,\n ];\n\n private _hasResourceWarning(): boolean {\n return this.resources.some((resource) => resource.exceedsLimit);\n }\n\n private _renderResources() {\n return html`\n <div class=\"flex items-center gap-1 min-w-0 overflow-hidden flex-1\">\n ${this.resources.map(\n (resource, index) => html`\n <axebow-icon\n class=\"shrink-0\"\n iconName=${resource.icon}\n iconColor=\"var(--axebow-gray)\"\n rotate=${resource.iconRotate ?? 0}\n size=\"md\"\n ></axebow-icon>\n <span class=\"truncate ${resource.exceedsLimit ? 'underline decoration-(--axebow-error)' : ''}\">\n ${resource.text}${index < this.resources.length - 1 ? ' |' : ''}\n </span>\n `\n )}\n ${this._hasResourceWarning()\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"dangerous\"\n iconColor=\"var(--axebow-error)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n `;\n }\n\n private _renderVersionSelector() {\n return html`\n <div class=\"relative shrink-0\">\n <div\n class=\"w-15.25 h-4.5 box-border flex items-center overflow-hidden border border-(--axebow-light-gray) rounded-md\"\n >\n <span class=\"flex-1 min-w-0 truncate text-base pl-1.5\">${this.version}</span>\n <div\n class=\"w-4.25 h-4.5 box-border flex items-center justify-center shrink-0 cursor-pointer border-l border-solid border-(--axebow-light-gray)\"\n @click=${() => (this._versionsOpen = !this._versionsOpen)}\n >\n <axebow-icon iconName=\"keyboard_arrow_down\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n\n ${this._versionsOpen\n ? html`\n <div\n class=\"absolute top-full left-0 mt-1 w-full box-border bg-(--axebow-white) border border-(--axebow-light-gray) rounded-md flex flex-col overflow-hidden z-10\"\n >\n ${this.versions.map(\n (v) => html`\n <button\n class=\"text-base text-left bg-transparent border-none cursor-pointer px-1.5 py-1 truncate hover:bg-(--axebow-anti-flash-white)\"\n @click=${() => this._closeVersions()}\n >\n ${v}\n </button>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `;\n }\n\n private _renderBadge() {\n return html`\n <div\n class=\"h-7.5 flex items-center justify-center gap-1 rounded shrink-0\"\n style=\"width:${this.badgeWidth}; background-color:${this.badgeBgColor};\"\n >\n ${this.badgeIcon\n ? html`<span class=\"w-2 h-3 flex items-center justify-center overflow-hidden shrink-0\">\n <axebow-icon iconName=${this.badgeIcon} iconColor=${this.badgeIconColor} size=\"sm\"></axebow-icon>\n </span>`\n : ''}\n <span class=\"text-sm font-semibold uppercase tracking-wider\" style=\"color:${this.badgeTextColor};\">\n ${this.badgeLabel}\n </span>\n </div>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"w-95 h-57.5 box-border p-4 flex flex-col gap-4\n bg-(--axebow-white) rounded-md axebow-shadow-hover\n ${this.disabled ? 'bg-(--axebow-base)' : ''}\"\n >\n <div class=\"w-87 h-12.25 flex items-center gap-3 min-w-0 shrink-0\">\n <img\n src=\"${this.logoSrc}\"\n class=\"w-11.5 h-11.5 shrink-0 aspect-square object-contain rounded\"\n alt=\"${this.name} logo\"\n />\n <div class=\"flex flex-col gap-1.25 w-full min-w-0\">\n <div class=\"flex items-center justify-between gap-1 w-full min-w-0\">\n <h3 class=\"text-md font-bold text-(--axebow-primary) truncate m-0\">${this.name}</h3>\n ${this._renderVersionSelector()}\n </div>\n <div class=\"flex items-center gap-1 text-base text-(--axebow-gray) w-full min-w-0\">\n ${this._renderResources()}\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2 flex-1 min-w-0 overflow-hidden\">\n <span class=\"underline truncate block text-base\" style=\"color:${this.domainColor};\">${this.domain}</span>\n <span\n class=\"text-base text-(--axebow-black) line-clamp-2 overflow-hidden wrap-break-word\"\n title=${this.description}\n >\n ${this.description}\n </span>\n </div>\n\n <div class=\"flex items-center justify-between gap-1 flex-wrap shrink-0\">\n ${this._renderBadge()}\n <axebow-button\n variant=\"text\"\n size=\"small\"\n fixedWidth=\"5.8125rem\"\n fixedHeight=\"2rem\"\n .disabled=${this.disabled}\n @click=${() => this.onDeploy?.()}\n @mouseenter=${() => (this._deployHovered = true)}\n @mouseleave=${() => (this._deployHovered = false)}\n >\n <axebow-icon\n slot=\"prefix\"\n iconName=\"sound_sampler\"\n size=\"md\"\n iconColor=\"${this._deployHovered ? 'var(--axebow-gray)' : 'var(--axebow-tertiary)'}\"\n ></axebow-icon>\n <span class=\"text-base\">${this.deployLabel}</span>\n </axebow-button>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational deploy-source action card. Title, icon, deploy\n * label and the click callback are all supplied by the caller - the\n * component owns no navigation or deployment logic of its own.\n */\n@customElement('axebow-deploy-card')\nexport class AxebowDeployCard extends LitElement {\n @property({ type: String }) title = '';\n @property({ type: String }) icon = '';\n @property({ type: String }) deployLabel = '';\n @property({ attribute: false }) onClick?: () => void;\n @property({ type: String }) width = '36.1875rem';\n @property({ type: String }) height = '3.625rem';\n\n @state() private _deployHovered = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n axebow-button[variant='text']:hover::part(base) {\n background-color: var(--axebow-base);\n }\n axebow-button[variant='text']:hover::part(label) {\n color: var(--axebow-gray);\n text-decoration: none;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"box-border p-3.25 flex items-center gap-4\n bg-(--axebow-white) border border-solid border-(--axebow-table-header-border) rounded-md\n axebow-shadow-hover\"\n style=\"width:${this.width};height:${this.height};\"\n >\n <div class=\"w-8 h-8 flex items-center justify-center bg-(--axebow-base) rounded-md shrink-0\">\n <span class=\"w-4.25 h-4.25 flex items-center justify-center overflow-hidden\">\n <axebow-icon iconName=${this.icon} iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </span>\n </div>\n <p class=\"text-md font-semibold text-(--axebow-primary) m-0 truncate\">${this.title}</p>\n <axebow-button\n variant=\"text\"\n class=\"ml-auto\"\n fixedWidth=\"5.625rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onClick?.()}\n @mouseenter=${() => (this._deployHovered = true)}\n @mouseleave=${() => (this._deployHovered = false)}\n >\n <axebow-icon\n slot=\"prefix\"\n iconName=\"sound_sampler\"\n size=\"xl\"\n iconColor=\"${this._deployHovered ? 'var(--axebow-gray)' : 'var(--axebow-tertiary)'}\"\n ></axebow-icon>\n ${this.deployLabel}\n </axebow-button>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ResourceCardRow {\n icon: string;\n label: string;\n count: number;\n freeCount?: string;\n onSeeInNewTab?: () => void;\n onSeeHere?: () => void;\n}\n\n/**\n * Purely presentational tenant resource summary card. Every row (icon,\n * label, count) and every navigation callback are supplied by the\n * caller - the component owns no routing or window-opening logic of\n * its own.\n */\n@customElement('axebow-resource-card')\nexport class AxebowResourceCard extends LitElement {\n @property({ type: String }) tenantName = '';\n @property({ type: Array }) rows: ResourceCardRow[] = [];\n @property({ type: String }) seeInNewTabLabel = '';\n @property({ type: String }) seeHereLabel = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"w-full h-77.25 box-border bg-(--axebow-white) rounded-md border border-solid border-(--axebow-table-header-border) flex flex-col axebow-shadow-hover overflow-hidden\"\n >\n <div\n class=\"w-full h-11 box-border shrink-0 flex items-center justify-between px-4 py-2.75\n bg-(--axebow-anti-flash-white) border-b border-solid border-(--axebow-light-gray)\"\n >\n <span class=\"text-lg font-semibold text-(--axebow-primary) truncate\">${this.tenantName}</span>\n <div class=\"w-6 h-6 flex items-center justify-center shrink-0\">\n <span class=\"w-4.5 h-4.5 flex items-center justify-center overflow-hidden\">\n <axebow-icon iconName=\"cloud_circle\" iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </span>\n </div>\n </div>\n\n <div class=\"flex flex-col px-4 pt-1 pb-4\">\n ${this.rows.map(\n (row) => html`\n <div class=\"w-full h-12.25 box-border flex flex-col\">\n <div class=\"flex-1 flex items-center justify-between text-[0.9375rem]\">\n <div class=\"w-30 h-5 flex items-center gap-1 min-w-0 shrink-0\">\n <div class=\"w-5 h-5 flex items-center justify-center shrink-0\">\n <axebow-icon iconName=\"${row.icon}\" iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </div>\n <span class=\"text-base font-semibold text-(--axebow-black) truncate\">${row.label}</span>\n </div>\n\n <div class=\"flex items-center shrink-0\">\n <span class=\"w-18.75 h-4.25 flex items-center justify-center font-semibold text-(--axebow-black) whitespace-nowrap\"\n >${row.count}</span\n ><span class=\"w-17 h-4.25 flex items-center text-(--axebow-gray) whitespace-nowrap\"\n >${row.freeCount ? ` ${row.freeCount}` : ''}</span\n >\n </div>\n\n <button\n class=\"w-26.25 h-8 box-border flex items-center justify-center gap-1 bg-transparent border-none cursor-pointer rounded whitespace-nowrap text-(--axebow-gray) hover:bg-(--axebow-anti-flash-white) shrink-0\"\n @click=${() => row.onSeeInNewTab?.()}\n >\n ${this.seeInNewTabLabel}\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </button>\n\n <button\n class=\"w-20.5 h-8 box-border flex items-center justify-center bg-transparent border-none cursor-pointer rounded whitespace-nowrap text-(--axebow-tertiary) hover:bg-(--axebow-anti-flash-white) hover:text-(--axebow-gray) shrink-0\"\n @click=${() => row.onSeeHere?.()}\n >\n ${this.seeHereLabel}\n </button>\n </div>\n\n <div class=\"pt-2 shrink-0\">\n <div class=\"w-full h-px bg-(--axebow-base)\"></div>\n </div>\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport '../axebow-quick-tip-button/axebow-quick-tip-button.js';\nimport '../axebow-infrastructure-card/axebow-infrastructure-card.js';\nimport '../axebow-getting-started-card/axebow-getting-started-card.js';\nimport type { InfrastructureItem } from '../axebow-infrastructure-card/axebow-infrastructure-card.js';\nimport type { PillItem } from '../axebow-pill/axebow-pill.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational composition of the quick-tip toggle button, the\n * infrastructure explainer card and the getting-started card. Owns only\n * the expand/collapse animation and scroll-into-view UI mechanics - every\n * piece of copy, image, callback and the footer-clearance offset come\n * from the caller.\n */\n@customElement('axebow-quick-tip-section')\nexport class AxebowQuickTipSection extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n #content-section {\n scroll-margin-top: 180px;\n transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n }\n\n .content-hidden {\n opacity: 0;\n max-height: 0;\n margin-top: 0;\n pointer-events: none;\n }\n\n .content-visible {\n opacity: 1;\n max-height: 2000px;\n margin-top: 1rem;\n }\n `,\n ];\n\n @property({ type: Boolean }) showContent = true;\n @property({ type: Boolean }) isStarted = false;\n @property({ type: Number }) paddingBottom = 50;\n @property({ attribute: false }) onToggle?: () => void;\n\n @property({ type: String }) buttonLabel = '';\n @property({ type: String }) buttonShowLabel = '';\n\n @property({ type: String }) infrastructureHeading = '';\n @property({ type: String }) infrastructureImageUrl = '';\n @property({ type: Array }) infrastructureItems: InfrastructureItem[] = [];\n\n @property({ type: String }) gettingStartedHeading = '';\n @property({ type: String }) gettingStartedDescription = '';\n @property({ type: Array }) pills: PillItem[] = [];\n\n @property({ type: String }) contactUrl = '';\n @property({ type: String }) contactLabel = '';\n @property({ type: String }) dontShowAgainLabel = '';\n @property({ type: Boolean }) dontShowAgain = false;\n @property({ attribute: false }) onDontShowAgainChange?: (checked: boolean) => void;\n @property({ type: String }) notNowLabel = '';\n @property({ attribute: false }) onNotNow?: () => void;\n\n @query('#content-section') private _contentSection?: HTMLElement;\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n const previousShowContent = changedProperties.get('showContent');\n if (previousShowContent === false && this.showContent) {\n requestAnimationFrame(() => {\n this._contentSection?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n }\n }\n\n render() {\n return html`\n <axebow-quick-tip-button\n label=${this.buttonLabel}\n showLabel=${this.buttonShowLabel}\n ?collapsed=${!this.showContent}\n ?isStarted=${this.isStarted}\n .paddingBottom=${this.paddingBottom}\n .onToggle=${this.onToggle}\n ></axebow-quick-tip-button>\n\n <div\n id=\"content-section\"\n class=\"${this.showContent || !this.isStarted\n ? 'content-visible'\n : 'content-hidden'} flex flex-col gap-4 items-center justify-center\"\n >\n <axebow-infrastructure-card\n heading=${this.infrastructureHeading}\n imageUrl=${this.infrastructureImageUrl}\n .items=${this.infrastructureItems}\n ></axebow-infrastructure-card>\n <axebow-getting-started-card\n heading=${this.gettingStartedHeading}\n description=${this.gettingStartedDescription}\n .pills=${this.pills}\n contactUrl=${this.contactUrl}\n contactLabel=${this.contactLabel}\n dontShowAgainLabel=${this.dontShowAgainLabel}\n ?dontShowAgain=${this.dontShowAgain}\n .onDontShowAgainChange=${this.onDontShowAgainChange}\n notNowLabel=${this.notNowLabel}\n .onNotNow=${this.onNotNow}\n ></axebow-getting-started-card>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-more-actions/axebow-more-actions.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport type { ActionMenuItem } from '../cards/card.models.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ChartSeries {\n labels: string[];\n data: number[];\n max: number;\n}\n\nexport interface UsageBreakdown {\n current: { storage: number; volatileStorage: number; nonReplicatedStorage: number; persistentStorage: number };\n limit: {\n storage: { max: number };\n volatileStorage: { max: number };\n nonReplicatedStorage: { max: number };\n persistentStorage: { max: number };\n };\n}\n\nexport interface StatusIcon {\n iconName: string;\n iconColor: string;\n tooltip?: string;\n spinner?: boolean;\n}\n\nexport interface ResourceSubRow {\n name: string;\n logoUrl?: string;\n vCpu: string;\n vCpuChart?: ChartSeries;\n vCpuUtilizationPercent?: string;\n memory: string;\n memoryChart?: ChartSeries;\n memoryUtilizationPercent?: string;\n storage: string;\n usage?: UsageBreakdown;\n showActionButton?: boolean;\n actionButtonLabel?: string;\n actionButtonDisabled?: boolean;\n onAction?: () => void;\n /** @deprecated use showActionButton */\n showDeployButton?: boolean;\n /** @deprecated use actionButtonLabel */\n deployButtonLabel?: string;\n /** @deprecated use actionButtonDisabled */\n deployButtonDisabled?: boolean;\n /** @deprecated use onAction */\n onDeploy?: () => void;\n moreActions?: ActionMenuItem[];\n warningIcon?: StatusIcon;\n}\n\n/** @deprecated Alias for ResourceSubRow */\nexport type EnvironmentRow = ResourceSubRow;\n\nexport interface ResourceTableRow {\n id: string;\n name: string;\n logoUrl?: string;\n vCpu: string;\n vCpuChart?: ChartSeries;\n vCpuUtilizationPercent?: string;\n memory: string;\n memoryChart?: ChartSeries;\n memoryUtilizationPercent?: string;\n storage: string;\n usage?: UsageBreakdown;\n statusIcon?: StatusIcon;\n warningIcon?: StatusIcon;\n showCreateSubRowButton?: boolean;\n createSubRowLabel?: string;\n onCreateSubRow?: () => void;\n /** @deprecated use showCreateSubRowButton */\n showCreateEnvironmentButton?: boolean;\n /** @deprecated use createSubRowLabel */\n createEnvironmentLabel?: string;\n /** @deprecated use onCreateSubRow */\n onCreateEnvironment?: () => void;\n moreActions?: ActionMenuItem[];\n subRows?: ResourceSubRow[];\n /** @deprecated use subRows */\n environments?: ResourceSubRow[];\n defaultExpanded?: boolean;\n}\n\n/** @deprecated Alias for ResourceTableRow */\nexport type AccountRow = ResourceTableRow;\n\nexport interface TenantResourceTableLabels {\n rowTitle?: string;\n /** @deprecated use rowTitle */\n accountsEnv?: string;\n vCpu?: string;\n vCpuUtil?: string;\n memory?: string;\n memUtil?: string;\n storage?: string;\n actions?: string;\n}\n\nconst DEFAULT_LABELS: TenantResourceTableLabels = {\n rowTitle: 'Title',\n accountsEnv: 'Title',\n vCpu: 'vCPU',\n vCpuUtil: 'vCPU Utilization',\n memory: 'Memory',\n memUtil: 'Mem. Utilization',\n storage: 'Storage',\n actions: 'Actions',\n};\n\n/**\n * Purely presentational expandable resource table. All\n * numbers, chart series, labels and callbacks are pre-computed by the\n * caller. The state owned here is which table rows are expanded.\n */\n@customElement('axebow-tenant-resource-table')\nexport class AxebowTenantResourceTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: Array }) rows: ResourceTableRow[] = [];\n @property({ attribute: false }) labels?: TenantResourceTableLabels;\n @property({ type: Boolean }) showActions = false;\n @property({ type: Boolean }) showMoreActionsColumn = false;\n @property({ type: String }) emptyStateMessage = '';\n @property({ type: String }) chartHeight?: string;\n @property({ type: Boolean }) fixedColumnWidths = false;\n\n private get _cols() {\n return this.fixedColumnWidths\n ? {\n rowGap: '',\n rowWidth: 'w-286',\n name: 'w-63.5',\n vCpu: 'w-18 ml-[1.265625rem]',\n vCpuUtil: 'w-37 ml-[0.5rem]',\n memory: 'w-20 ml-[1.265625rem]',\n memUtil: 'w-37 ml-[0.5rem]',\n storage: 'w-25 ml-[1.265625rem]',\n actions: 'w-53.25 ml-[1.265625rem]',\n }\n : {\n rowGap: 'gap-2',\n rowWidth: 'w-full',\n name: 'flex-1 min-w-44',\n vCpu: 'w-16',\n vCpuUtil: 'flex-1 min-w-32',\n memory: 'w-20',\n memUtil: 'flex-1 min-w-32',\n storage: 'w-24',\n actions: 'flex-1 min-w-53.25',\n };\n }\n\n @state() private _expanded = new Set<string>();\n private _initialized = false;\n\n protected willUpdate(changed: Map<string, unknown>) {\n if (changed.has('rows') && !this._initialized && this.rows.length > 0) {\n this._initialized = true;\n this._expanded = new Set(this.rows.filter((r) => r.defaultExpanded !== false).map((r) => r.id));\n }\n }\n\n private _toggle(id: string) {\n const next = new Set(this._expanded);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this._expanded = next;\n }\n\n private get _activeLabels(): TenantResourceTableLabels {\n const title = this.labels?.rowTitle ?? this.labels?.accountsEnv ?? DEFAULT_LABELS.rowTitle;\n return { ...DEFAULT_LABELS, rowTitle: title, accountsEnv: title, ...this.labels };\n }\n\n private _renderDivider() {\n return html`<span class=\"w-px h-4 bg-gray-300 shrink-0\"></span>`;\n }\n\n private _renderHeader() {\n const l = this._activeLabels;\n const c = this._cols;\n return html`\n <div\n class=\"${c.rowWidth} min-w-160 h-8 flex items-center ${c.rowGap} rounded-md bg-(--axebow-base) border border-solid border-(--axebow-table-header-border) px-4 box-border\"\n >\n <div class=\"flex items-center gap-2 ${c.name} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600 truncate\">${l.rowTitle}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.vCpu} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.vCpu}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.vCpuUtil} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.vCpuUtil}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.memory} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.memory}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.memUtil} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.memUtil}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.storage} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.storage}</span>\n ${this.showActions ? this._renderDivider() : ''}\n </div>\n ${this.showActions\n ? html`<div class=\"flex items-center ${c.actions} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.actions}</span>\n </div>`\n : ''}\n </div>\n `;\n }\n\n private _renderChartCell(chart?: ChartSeries, percent?: string, idPrefix?: string) {\n if (!chart || !chart.labels || chart.labels.length === 0) {\n return html`\n <div class=\"flex items-center justify-center\">\n <span class=\"font-normal text-gray-700\">${percent ?? '0.0'}%</span>\n </div>\n `;\n }\n return html`\n <div class=\"flex items-center justify-center gap-6\">\n <usage-chart\n class=\"w-20 shrink-0\"\n height=${ifDefined(this.chartHeight)}\n chartId=${idPrefix}\n chartType=\"line\"\n .labels=${chart.labels}\n .data=${{ Usage: chart.data }}\n .yAxisMax=${chart.max}\n ></usage-chart>\n <span class=\"font-normal text-gray-700 whitespace-nowrap\">${percent ?? '0.0'}%</span>\n </div>\n `;\n }\n\n private _renderStatusIcon(icon?: StatusIcon) {\n if (!icon) return '';\n const iconEl = icon.spinner\n ? html`<sl-spinner style=\"font-size: 0.85rem; --indicator-color: var(--axebow-tertiary);\"></sl-spinner>`\n : html`<axebow-icon\n iconName=${icon.iconName}\n iconColor=${icon.iconColor}\n size=\"md\"\n class=\"cursor-pointer shrink-0\"\n ></axebow-icon>`;\n return icon.tooltip ? html`<axebow-tooltip content=${icon.tooltip}>${iconEl}</axebow-tooltip>` : iconEl;\n }\n\n private _renderTableRow(row: ResourceTableRow, index: number) {\n const children = row.subRows ?? row.environments;\n const hasSubRows = !!(children && children.length > 0);\n const isExpanded = this._expanded.has(row.id);\n const showCreateBtn = row.showCreateSubRowButton ?? row.showCreateEnvironmentButton;\n const createBtnLabel = row.createSubRowLabel ?? row.createEnvironmentLabel;\n const onCreateBtn = row.onCreateSubRow ?? row.onCreateEnvironment;\n const c = this._cols;\n\n return html`\n <div class=\"border-b border-solid border-(--axebow-light-gray) last:border-b-0\">\n <div\n class=\"${c.rowWidth} min-w-160 min-h-12 flex items-center ${c.rowGap} ${hasSubRows ? 'cursor-pointer hover:bg-gray-50' : ''} py-1.5 px-4 box-border\"\n @click=${hasSubRows ? () => this._toggle(row.id) : null}\n >\n <div class=\"${c.name} shrink-0 flex items-center gap-2\">\n ${hasSubRows\n ? html`\n <axebow-icon\n iconName=${isExpanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n class=\"shrink-0\"\n ></axebow-icon>\n `\n : html`<span class=\"w-4 inline-block\"></span>`}\n ${row.logoUrl ? html`<img src=${row.logoUrl} class=\"w-5 h-5 object-contain shrink-0\" />` : ''}\n <span class=\"font-semibold text-(--axebow-primary) truncate\">${row.name}</span>\n ${this._renderStatusIcon(row.statusIcon)}\n <span class=\"flex-1\"></span>\n ${this._renderStatusIcon(row.warningIcon)}\n </div>\n <div class=\"${c.vCpu} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${row.vCpu}</div>\n <div class=\"${c.vCpuUtil} shrink-0\">\n ${this._renderChartCell(row.vCpuChart, row.vCpuUtilizationPercent, `chart-account-${index}-vcpu`)}\n </div>\n <div class=\"${c.memory} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${row.memory}</div>\n <div class=\"${c.memUtil} shrink-0\">\n ${this._renderChartCell(row.memoryChart, row.memoryUtilizationPercent, `chart-account-${index}-mem`)}\n </div>\n <div class=\"${c.storage} shrink-0 flex items-center justify-center gap-1.5 min-w-0\">\n <span class=\"font-normal text-gray-700\">${row.storage}</span>\n ${row.usage ? html`<usage-tooltip .usage=${row.usage}></usage-tooltip>` : ''}\n </div>\n ${this.showActions\n ? html`<div\n class=\"${c.actions} shrink-0 flex items-center gap-4\"\n @click=${(e: Event) => e.stopPropagation()}\n >\n <div class=\"flex-1 flex items-center justify-center\">\n ${showCreateBtn\n ? html`<axebow-button variant=\"text\" @click=${() => onCreateBtn?.()}>\n ${createBtnLabel}\n </axebow-button>`\n : ''}\n </div>\n ${this.showMoreActionsColumn\n ? html`<div class=\"w-9.5 shrink-0 flex items-center justify-center\">\n ${row.moreActions?.length\n ? html`<axebow-more-actions\n placement=\"bottom\"\n openToRight\n .options=${row.moreActions}\n iconName=\"more_horiz\"\n fixedHeight=\"2rem\"\n ></axebow-more-actions>`\n : ''}\n </div>`\n : ''}\n </div>`\n : ''}\n </div>\n ${isExpanded && hasSubRows\n ? children!.map((subRow, subIndex) => this._renderSubRow(subRow, index, subIndex))\n : ''}\n </div>\n `;\n }\n\n private _renderSubRow(subRow: ResourceSubRow, rowIndex: number, subIndex: number) {\n const showActionBtn = subRow.showActionButton ?? subRow.showDeployButton;\n const actionBtnLabel = subRow.actionButtonLabel ?? subRow.deployButtonLabel;\n const actionBtnDisabled = subRow.actionButtonDisabled ?? subRow.deployButtonDisabled;\n const onActionBtn = subRow.onAction ?? subRow.onDeploy;\n const c = this._cols;\n\n return html`\n <div class=\"${c.rowWidth} min-w-160 min-h-12 flex items-center ${c.rowGap} bg-gray-50/50 border-t border-solid border-(--axebow-light-gray) py-1.5 px-4 box-border\">\n <div class=\"${c.name} shrink-0 flex items-center gap-2\">\n <axebow-icon\n iconName=\"subdirectory_arrow_right\"\n iconColor=\"var(--axebow-gray)\"\n size=\"sm\"\n class=\"shrink-0\"\n ></axebow-icon>\n ${subRow.logoUrl ? html`<img src=${subRow.logoUrl} class=\"w-5 h-5 object-contain shrink-0\" />` : ''}\n <span class=\"font-normal text-gray-700 truncate\">${subRow.name}</span>\n <span class=\"flex-1\"></span>\n ${this._renderStatusIcon(subRow.warningIcon)}\n </div>\n <div class=\"${c.vCpu} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${subRow.vCpu}</div>\n <div class=\"${c.vCpuUtil} shrink-0\">\n ${this._renderChartCell(subRow.vCpuChart, subRow.vCpuUtilizationPercent, `chart-env-${rowIndex}-${subIndex}-vcpu`)}\n </div>\n <div class=\"${c.memory} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${subRow.memory}</div>\n <div class=\"${c.memUtil} shrink-0\">\n ${this._renderChartCell(subRow.memoryChart, subRow.memoryUtilizationPercent, `chart-env-${rowIndex}-${subIndex}-mem`)}\n </div>\n <div class=\"${c.storage} shrink-0 flex items-center justify-center gap-1.5 min-w-0\">\n <span class=\"font-normal text-gray-700\">${subRow.storage}</span>\n ${subRow.usage ? html`<usage-tooltip .usage=${subRow.usage}></usage-tooltip>` : ''}\n </div>\n ${this.showActions\n ? html`<div class=\"${c.actions} shrink-0 flex items-center gap-4\">\n <div class=\"flex-1 flex items-center justify-center\">\n ${showActionBtn\n ? html`<axebow-button\n variant=\"primary\"\n fixedWidth=\"9.9375rem\"\n fixedHeight=\"2rem\"\n ?disabled=${actionBtnDisabled}\n @click=${() => onActionBtn?.()}\n >\n ${actionBtnLabel}\n </axebow-button>`\n : ''}\n </div>\n ${this.showMoreActionsColumn\n ? html`<div class=\"w-9.5 shrink-0 flex items-center justify-center\">\n ${subRow.moreActions?.length\n ? html`<axebow-more-actions\n placement=\"bottom\"\n openToRight\n .options=${subRow.moreActions}\n iconName=\"more_horiz\"\n fixedHeight=\"2rem\"\n ></axebow-more-actions>`\n : ''}\n </div>`\n : ''}\n </div>`\n : ''}\n </div>\n `;\n }\n\n render() {\n if (!this.rows || this.rows.length === 0) {\n return html`\n <div class=\"w-full py-4 px-6 text-center bg-[#F0F1F5] rounded-md box-border\">\n <p class=\"text-(--axebow-secondary) m-0 font-normal\">\n ${this.emptyStateMessage || 'There are currently no items in this table.'}\n </p>\n </div>\n `;\n }\n\n const c = this._cols;\n return html`\n <div\n class=\"${c.rowWidth} flex flex-col rounded-md bg-white box-border ${this.fixedColumnWidths\n ? 'overflow-hidden'\n : 'overflow-x-auto overflow-y-hidden'}\"\n >\n ${this._renderHeader()}\n <div>${this.rows.map((row, index) => this._renderTableRow(row, index))}</div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-tenant-resource-table': AxebowTenantResourceTable;\n }\n}\n","import { Chart } from 'chart.js/auto';\nimport type { ChartDataset, ChartOptions, ChartTypeRegistry } from 'chart.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('table-chart')\nexport class TableChart extends LitElement {\n @property({ type: String }) chartType: keyof ChartTypeRegistry = 'line';\n @property({ type: String }) chartId = '';\n @property({ type: Array }) chartLabels: string[] = [];\n @property({ attribute: false }) chartDatasets: ChartDataset[] = [];\n @property({ attribute: false }) chartOptions: ChartOptions = {};\n @property({ type: String }) height = '4rem';\n\n private chartInstance: Chart | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n canvas {\n width: 100% !important;\n height: 100% !important;\n }\n `,\n ];\n\n private createChart() {\n const canvas = this.renderRoot.querySelector('canvas') as HTMLCanvasElement;\n if (!canvas) {\n console.error('Canvas not found for:', this.chartId);\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n console.error('Could not get canvas context:', this.chartId);\n return;\n }\n if (this.chartInstance) {\n return;\n }\n\n this.chartInstance = new Chart(ctx, {\n type: this.chartType,\n data: {\n labels: this.chartLabels,\n datasets: this.chartDatasets,\n },\n options: this.chartOptions,\n });\n }\n\n protected firstUpdated() {\n this.createChart();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (!this.chartInstance) {\n this.createChart();\n return;\n }\n if (changedProperties.has('chartType')) {\n this.chartInstance.destroy();\n this.chartInstance = null;\n this.createChart();\n return;\n }\n if (changedProperties.has('chartLabels') || changedProperties.has('chartDatasets')) {\n this.chartInstance.data.labels = this.chartLabels;\n this.chartInstance.data.datasets = this.chartDatasets;\n }\n if (changedProperties.has('chartOptions')) {\n this.chartInstance.options = this.chartOptions;\n }\n if (\n changedProperties.has('chartLabels') ||\n changedProperties.has('chartDatasets') ||\n changedProperties.has('chartOptions')\n ) {\n this.chartInstance.update('none');\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.chartInstance) {\n this.chartInstance.destroy();\n this.chartInstance = null;\n }\n }\n\n render() {\n return html`\n <div class=\"relative w-full h-full\">\n <div class=\"w-full relative\" style=\"height: ${this.height};\">\n <canvas></canvas>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../cards/parts/axebow-card-version-selector.js';\nimport { RevisionItem } from '../cards/card.models.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ServiceHeaderResourceLimits {\n cpu: number;\n memory: number;\n storage: number;\n volatileStorage: number;\n nonReplicatedStorage: number;\n persistentStorage: number;\n}\n\n@customElement('axebow-service-detail-header')\nexport class AxebowServiceDetailHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n padding-bottom: 1rem;\n }\n `,\n ];\n\n @property({ type: String }) locationTitle = '';\n @property({ type: String }) locationLogoUrl?: string;\n @property({ type: String }) locationTenantAccount = '';\n @property({ type: String }) locationEnvironment = '';\n @property({ type: String }) locationProject = '';\n\n @property({ type: String }) softLimitsTitle = '';\n @property({ attribute: false }) softLimits!: ServiceHeaderResourceLimits;\n @property({ type: String }) hardLimitsTitle = '';\n @property({ attribute: false }) hardLimits!: ServiceHeaderResourceLimits;\n @property({ type: String }) vcpusLabel = '';\n @property({ type: String }) gbRamLabel = '';\n @property({ type: String }) gbLabel = '';\n @property({ type: String }) gbStorageLabel = '';\n @property({ type: String }) storageLabel = '';\n @property({ type: String }) volatileLabel = '';\n @property({ type: String }) nonRepPersLabel = '';\n @property({ type: String }) persistentRepLabel = '';\n\n @property({ type: String }) runningVersionTitle = '';\n @property({ type: String }) updateZipTooltip = '';\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) revisionsDisabled = false;\n @property({ type: String }) updateWithZipLabel = '';\n\n @property({ type: Boolean }) showActionNeeded = false;\n @property({ type: String }) actionNeededTitle = '';\n @property({ type: String }) deployLabel = '';\n\n private _handleUpdateWithZip() {\n this.dispatchEvent(new CustomEvent('show-zip-dialog', { bubbles: true, composed: true }));\n }\n\n private _handleDeploy() {\n this.dispatchEvent(new CustomEvent('deploy', { bubbles: true, composed: true }));\n }\n\n private _renderTitle(text: string) {\n return html`<h3 class=\"m-0 text-sm font-bold uppercase text-(--axebow-gray)\">${text}</h3>`;\n }\n\n private _renderLocation() {\n const widthClass = this.showActionNeeded ? 'w-63.75' : 'w-99.75';\n return html`\n <div class=\"flex flex-col gap-1 ${widthClass} shrink-0\">\n ${this._renderTitle(this.locationTitle)}\n <div\n class=\"${widthClass} h-19.75 box-border flex items-center justify-between gap-4 bg-(--axebow-base) rounded-md py-4.75 px-4\"\n >\n ${this.locationLogoUrl\n ? html`<img src=${this.locationLogoUrl} class=\"h-full aspect-square object-contain shrink-0\" />`\n : html`<div class=\"h-full aspect-square shrink-0\"></div>`}\n <div class=\"flex flex-col gap-0.5 min-w-0 flex-1\">\n <p class=\"m-0 text-base font-semibold text-(--axebow-primary) truncate\">${this.locationTenantAccount}</p>\n <h5 class=\"m-0 text-lg font-semibold text-(--axebow-primary) truncate\">${this.locationEnvironment}</h5>\n <p class=\"m-0 text-xs text-(--axebow-gray) truncate\">${this.locationProject}</p>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderLimitsTooltip(limits: ServiceHeaderResourceLimits) {\n return html`\n <axebow-tooltip class=\"p-0\" placement=\"right\">\n <div slot=\"content\">\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"database\" size=\"md\"></axebow-icon>\n <span>${this.storageLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.storage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.volatileLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.volatileStorage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.nonRepPersLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.nonReplicatedStorage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.persistentRepLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.persistentStorage} ${this.gbLabel}</span>\n </div>\n </div>\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </axebow-tooltip>\n `;\n }\n\n private _renderLimitsBlock(title: string, limits: ServiceHeaderResourceLimits) {\n return html`\n <div class=\"flex flex-col gap-1 w-66 shrink-0\">\n ${this._renderTitle(title)}\n <div\n class=\"w-66 h-19.75 box-border flex items-center justify-between gap-6 bg-(--axebow-base) rounded-md py-4.75 px-4\"\n >\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.cpu}</span>\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.vcpusLabel}</span>\n </div>\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.memory}</span>\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.gbRamLabel}</span>\n </div>\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.storage}</span>\n <div class=\"flex items-center gap-1\">\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.gbStorageLabel}</span>\n ${this._renderLimitsTooltip(limits)}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderRunningVersion() {\n return html`\n <div class=\"flex flex-col gap-1 w-41.75 shrink-0\">\n ${this._renderTitle(this.runningVersionTitle)}\n <div class=\"w-41.75 h-19.75 box-border flex flex-col gap-2\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n displayedRevision=${this.displayedRevision}\n ?disabled=${this.revisionsDisabled}\n maxWidth=\"10.4375rem\"\n ></axebow-card-version-selector>\n <div class=\"flex items-center gap-1.5\">\n <axebow-button\n variant=\"primary\"\n outline\n fixedWidth=\"8.75rem\"\n fixedHeight=\"2.375rem\"\n @click=${this._handleUpdateWithZip}\n >\n ${this.updateWithZipLabel}\n </axebow-button>\n <axebow-tooltip placement=\"top\">\n <div slot=\"content\" class=\"max-w-65\">${this.updateZipTooltip}</div>\n <div class=\"w-4.5 h-4.5 flex items-center justify-center\">\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"sm\"></axebow-icon>\n </div>\n </axebow-tooltip>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderActionNeeded() {\n if (!this.showActionNeeded) return '';\n return html`\n <div class=\"flex flex-col gap-1 w-32 shrink-0\">\n ${this._renderTitle(this.actionNeededTitle)}\n <div\n class=\"w-32 h-24.75 box-border flex items-center justify-center border border-solid border-(--axebow-light-gray) rounded-md\"\n >\n <axebow-button variant=\"success\" fixedWidth=\"5.625rem\" fixedHeight=\"2.375rem\" @click=${this._handleDeploy}>\n ${this.deployLabel}\n </axebow-button>\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"w-293.5 h-32.75 box-border flex items-start gap-4 bg-white rounded-md p-4\">\n ${this._renderLocation()} ${this._renderLimitsBlock(this.softLimitsTitle, this.softLimits)}\n ${this._renderLimitsBlock(this.hardLimitsTitle, this.hardLimits)} ${this._renderRunningVersion()}\n ${this._renderActionNeeded()}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-more-actions/axebow-more-actions.js';\nimport '../axebow-tenant-resource-table/axebow-tenant-resource-table.js';\nimport type { ActionMenuItem } from '../cards/card.models.js';\nimport type { ResourceTableRow, TenantResourceTableLabels } from '../axebow-tenant-resource-table/axebow-tenant-resource-table.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ResourceStat {\n icon: string;\n label: string;\n value: string | number;\n}\n\nexport type TenantCardContentState = 'invitation' | 'empty' | 'table';\n\n/**\n * Purely presentational tenant summary card. Every string, number,\n * callback and the content-area state (invitation / empty / table) are\n * supplied by the caller - the component only lays things out and\n * renders the nested resource table.\n */\n@customElement('axebow-tenant-card')\nexport class AxebowTenantCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) planLabel = '';\n @property({ type: Boolean }) isDeleting = false;\n @property({ type: String }) deletingLabel = '';\n @property({ type: Boolean }) isLeaving = false;\n @property({ type: String }) leavingLabel = '';\n\n @property({ type: String }) tenantName = '';\n @property({ type: String }) roleText = '';\n\n @property({ type: Boolean }) isPending = false;\n @property({ type: String }) rejectLabel = '';\n @property({ type: String }) acceptLabel = '';\n @property({ attribute: false }) onReject?: () => void;\n @property({ attribute: false }) onAccept?: () => void;\n\n @property({ type: Boolean }) showCreateAccount = false;\n @property({ type: String }) createAccountLabel = '';\n @property({ attribute: false }) onCreateAccount?: () => void;\n @property({ type: Array }) moreActions: ActionMenuItem[] = [];\n\n @property({ type: Array }) resourceStats: ResourceStat[] = [];\n @property({ type: Boolean }) showInvitedNotice = false;\n @property({ type: String }) invitedNoticeText = '';\n @property({ type: Boolean }) showNoAccountsWarning = false;\n @property({ type: String }) noAccountsWarningText = '';\n\n @property({ type: String }) contentState: TenantCardContentState = 'table';\n @property({ type: String }) invitationText = '';\n @property({ type: String }) emptyTextPrefix = '';\n @property({ type: String }) emptyCreateAccountLabel = '';\n @property({ type: String }) emptyTextSuffix = '';\n @property({ attribute: false }) onEmptyCreateAccount?: () => void;\n\n @property({ type: Array }) tableRows: ResourceTableRow[] = [];\n @property({ attribute: false }) tableLabels!: TenantResourceTableLabels;\n @property({ type: Boolean }) showActions = false;\n @property({ type: Boolean }) showMoreActionsColumn = false;\n @property({ type: String }) chartHeight?: string;\n @property({ type: String }) width?: string;\n @property({ type: Boolean }) fixedColumnWidths = false;\n\n private _renderPlanBadge() {\n if (this.isDeleting || this.isLeaving) {\n return html`\n <div class=\"flex items-center gap-2\">\n <p class=\"text-(--axebow-gray) text-base m-0\">${this.isDeleting ? this.deletingLabel : this.leavingLabel}</p>\n <sl-spinner style=\"font-size: 1rem; --indicator-color: var(--axebow-tertiary);\"></sl-spinner>\n </div>\n `;\n }\n return html`\n <div class=\"w-21.5 h-8 flex items-center justify-center rounded-md bg-gray-100 px-2\">\n <span class=\"text-base font-semibold capitalize text-(--axebow-gray) truncate\">${this.planLabel}</span>\n </div>\n `;\n }\n\n private _renderTopRightActions() {\n if (this.isPending) {\n return html`\n <div class=\"flex items-center gap-2\">\n <axebow-button\n variant=\"danger\"\n outline\n fixedWidth=\"9.9375rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onReject?.()}\n >\n ${this.rejectLabel}\n </axebow-button>\n <axebow-button variant=\"primary\" fixedWidth=\"9.9375rem\" fixedHeight=\"2rem\" @click=${() => this.onAccept?.()}>\n ${this.acceptLabel}\n </axebow-button>\n </div>\n `;\n }\n\n return html`\n <div class=\"flex items-center gap-4\">\n ${this.showCreateAccount\n ? html`<axebow-button\n variant=\"text\"\n fixedWidth=\"7.8125rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onCreateAccount?.()}\n >\n ${this.createAccountLabel}\n </axebow-button>`\n : ''}\n ${this.moreActions.length\n ? html`<axebow-more-actions\n class=\"w-9.5\"\n placement=\"bottom\"\n openToRight\n .options=${this.moreActions}\n iconName=\"more_horiz\"\n ></axebow-more-actions>`\n : ''}\n </div>\n `;\n }\n\n private _renderContent() {\n if (this.contentState === 'invitation') {\n return html`\n <div class=\"w-full h-14.25 rounded-md bg-(--axebow-base) flex items-center justify-center text-center px-4 box-border\">\n <span class=\"text-base\">${this.invitationText}</span>\n </div>\n `;\n }\n\n if (this.contentState === 'empty') {\n return html`\n <div class=\"w-full h-14.25 rounded-md bg-(--axebow-base) flex items-center justify-center text-center px-4 box-border\">\n <span class=\"text-base\">\n ${this.emptyTextPrefix}\n <span\n class=\"text-(--axebow-tertiary) font-bold cursor-pointer hover:underline\"\n @click=${() => this.onEmptyCreateAccount?.()}\n >${this.emptyCreateAccountLabel}</span\n >\n ${this.emptyTextSuffix}\n </span>\n </div>\n `;\n }\n\n return html`\n <axebow-tenant-resource-table\n .rows=${this.tableRows}\n .labels=${this.tableLabels}\n ?showActions=${this.showActions}\n ?showMoreActionsColumn=${this.showMoreActionsColumn}\n ?fixedColumnWidths=${this.fixedColumnWidths}\n chartHeight=${ifDefined(this.chartHeight)}\n ></axebow-tenant-resource-table>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"box-border flex flex-col gap-4 bg-white rounded-md border border-solid border-(--axebow-table-border) p-4\"\n style=\"width: ${this.width || '100%'};\"\n >\n <div class=\"flex items-center justify-between\">\n ${this._renderPlanBadge()}\n <div class=\"w-57.5 h-8\"><slot name=\"plan-selector\"></slot></div>\n </div>\n\n <div class=\"flex items-center justify-between flex-wrap gap-2\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-(--axebow-primary) font-bold text-lg\">${this.tenantName}</span>\n <span class=\"text-(--axebow-primary) text-lg\">|</span>\n <span class=\"text-(--axebow-primary) text-lg italic flex items-center gap-1\">\n ${this.roleText}\n <slot name=\"role-tooltip\" class=\"not-italic\"></slot>\n </span>\n </div>\n ${this._renderTopRightActions()}\n </div>\n\n <div class=\"flex items-center justify-between flex-wrap gap-2\">\n <div class=\"flex items-center gap-5 text-(--axebow-text-gray)\">\n ${this.resourceStats.map(\n (stat) => html`\n <span class=\"flex items-center gap-1 text-base whitespace-nowrap\">\n <axebow-icon iconName=${stat.icon} iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n ${stat.label} ${stat.value}\n </span>\n `\n )}\n </div>\n ${this.showInvitedNotice\n ? html`<span class=\"text-base text-black\">${this.invitedNoticeText}</span>`\n : this.showNoAccountsWarning\n ? html`<span class=\"flex items-center gap-1 text-base text-black\">\n <axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-warning)\" size=\"md\"></axebow-icon>\n ${this.noAccountsWarningText}\n </span>`\n : ''}\n </div>\n\n <div class=\"w-full\">\n <sl-divider style=\"width: 100%; margin: 0;\"></sl-divider>\n </div>\n\n ${this._renderContent()}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport '../../axebow-icon/axebow-icon.js';\n\nexport type CarouselSelectorVariant = 'account' | 'environment';\n\n@customElement('axebow-carousel-selector-item')\nexport class AxebowCarouselSelectorItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 14.1875rem;\n height: 4.5rem;\n }\n :host([variant='environment']) {\n width: 14.208125rem;\n height: 5.125rem;\n }\n .item-container:not(.selected):hover {\n border-color: var(--axebow-tertiary);\n }\n .item-checkbox::part(base) {\n padding: 0;\n }\n .item-checkbox::part(control) {\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 50%;\n }\n .item-checkbox::part(control--checked) {\n background-color: var(--axebow-primary);\n border-color: var(--axebow-primary);\n }\n `,\n ];\n\n @property({ type: String, reflect: true }) variant: CarouselSelectorVariant = 'account';\n @property({ type: String }) itemId = '';\n @property({ type: Boolean }) selected = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) planLabel = '';\n @property({ type: String }) name = '';\n @property({ type: String }) tenantName = '';\n @property({ type: String }) accountName = '';\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) logoAlt = '';\n\n private _handleCardClick() {\n if (this.disabled) return;\n if (this.selected) return;\n this.dispatchEvent(\n new CustomEvent('item-select', {\n detail: { id: this.itemId },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _renderCheck() {\n const insetClass = this.variant === 'environment' ? 'top-3 right-1.5' : 'top-3 right-3';\n return html`\n <div class=\"absolute ${insetClass} w-4.5 h-4.5 shrink-0 pointer-events-none\">\n <sl-checkbox\n class=\"item-checkbox\"\n .checked=${this.selected}\n ?disabled=${this.disabled}\n ></sl-checkbox>\n </div>\n `;\n }\n\n private _renderBadge() {\n if (!this.planLabel) return '';\n return html`\n <div class=\"absolute bottom-0 left-0 right-0 flex justify-center pointer-events-none\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-0.5 rounded-t-md bg-(--axebow-base) text-(--axebow-secondary) text-sm font-semibold truncate max-w-full\"\n >\n ${this.planLabel}\n </span>\n </div>\n `;\n }\n\n private _renderAccount() {\n return html`\n <div class=\"flex flex-col items-start w-full max-w-51.5 h-9.5 justify-center\">\n <p class=\"leading-tight text-md font-semibold text-(--axebow-primary) truncate w-full m-0\" title=${this.name}>\n ${this.name}\n </p>\n </div>\n `;\n }\n\n private _renderEnvironment() {\n const logo = this.logoSrc\n ? html`<img src=${this.logoSrc} alt=${this.logoAlt} class=\"w-12.5 h-12.5 shrink-0 object-contain\" />`\n : html`<axebow-icon iconName=\"cloud\" size=\"large\" class=\"w-12.5 h-12.5 shrink-0\"></axebow-icon>`;\n\n return html`\n <div class=\"flex flex-row items-start gap-2 w-full\">\n ${logo}\n <div class=\"flex flex-col items-start flex-1 min-w-0\">\n <div class=\"w-36 overflow-hidden\">\n <p class=\"text-sm font-semibold text-(--axebow-primary) truncate m-0\" title=${this.tenantName}>\n ${this.tenantName}\n </p>\n </div>\n <div class=\"w-full overflow-hidden\">\n <p\n class=\"leading-4.5 text-md font-semibold text-(--axebow-primary) truncate m-0\"\n title=${this.accountName}\n >\n ${this.accountName}\n </p>\n </div>\n </div>\n </div>\n `;\n }\n\n render() {\n const paddingClass = this.variant === 'environment' ? 'pt-3 px-1.5 pb-0' : 'pt-3 px-3 pb-0';\n\n return html`\n <div\n @click=${this._handleCardClick}\n class=\"item-container relative w-full h-full box-border rounded-md border border-solid overflow-hidden transition-colors ${paddingClass} ${this\n .selected\n ? 'selected cursor-default border-(--axebow-primary) bg-(--axebow-white)'\n : 'cursor-pointer border-(--axebow-light-gray) bg-(--axebow-base)'} ${this.disabled ? 'opacity-60 pointer-events-none' : ''}\"\n >\n ${this.variant === 'environment' ? this._renderEnvironment() : this._renderAccount()}\n ${this._renderCheck()}\n ${this._renderBadge()}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/carousel/carousel.js';\nimport '@shoelace-style/shoelace/dist/components/carousel-item/carousel-item.js';\nimport './parts/axebow-carousel-selector-item.js';\nimport type { CarouselSelectorVariant } from './parts/axebow-carousel-selector-item.js';\n\nexport type { CarouselSelectorVariant };\n\nexport interface CarouselSelectorTenantItem {\n id: string;\n selected: boolean;\n disabled?: boolean;\n planLabel: string;\n name?: string;\n tenantName?: string;\n accountName?: string;\n logoSrc?: string | null;\n logoAlt?: string;\n}\n\nconst ITEM_GAP_PX = 16;\nconst NAV_GAP_PX = 8;\n\nfunction itemWidthFor(variant: CarouselSelectorVariant): number {\n return variant === 'environment' ? 227.33 : 227;\n}\n\nfunction slidesPerPageFor(scrollContainerWidthPx: number, variant: CarouselSelectorVariant): number {\n const itemWidth = itemWidthFor(variant);\n return (scrollContainerWidthPx + ITEM_GAP_PX) / (itemWidth + ITEM_GAP_PX);\n}\n\n@customElement('axebow-carousel-selector-tenant')\nexport class AxebowCarouselSelectorTenant extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-carousel {\n display: block;\n width: 100%;\n --slide-gap: ${ITEM_GAP_PX / 16}rem;\n }\n sl-carousel::part(base) {\n gap: ${NAV_GAP_PX / 16}rem;\n }\n sl-carousel::part(navigation-button) {\n padding: 0;\n margin: 0;\n }\n sl-carousel::part(scroll-container) {\n height: 4.5rem;\n }\n :host([variant='environment']) sl-carousel::part(scroll-container) {\n height: 5.125rem;\n }\n sl-carousel-item {\n height: 100%;\n }\n `,\n ];\n\n @property({ type: String, reflect: true }) variant: CarouselSelectorVariant = 'account';\n @property({ type: Array }) items: CarouselSelectorTenantItem[] = [];\n\n @state() private _slidesPerPage = 3;\n\n @query('sl-carousel') private _carouselEl?: HTMLElement;\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width;\n if (width) this._slidesPerPage = slidesPerPageFor(width, this.variant);\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n protected firstUpdated() {\n const scrollContainer = this._carouselEl?.shadowRoot?.getElementById('scroll-container');\n if (scrollContainer) this._resizeObserver?.observe(scrollContainer);\n }\n\n private _onItemSelect(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('item-select', {\n detail: e.detail,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n return html`\n <sl-carousel navigation slides-per-page=\"${this._slidesPerPage}\">\n ${this.items.length === 0\n ? html`<sl-carousel-item><slot name=\"empty\"></slot></sl-carousel-item>`\n : this.items.map(\n (item) => html`\n <sl-carousel-item>\n <axebow-carousel-selector-item\n .variant=${this.variant}\n .itemId=${item.id}\n .selected=${item.selected}\n ?disabled=${item.disabled}\n .planLabel=${item.planLabel}\n .name=${item.name ?? ''}\n .tenantName=${item.tenantName ?? ''}\n .accountName=${item.accountName ?? ''}\n .logoSrc=${item.logoSrc ?? null}\n .logoAlt=${item.logoAlt ?? ''}\n @item-select=${this._onItemSelect}\n ></axebow-carousel-selector-item>\n </sl-carousel-item>\n `\n )}\n </sl-carousel>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-switch/axebow-switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-expandable-header')\nexport class AxebowExpandableHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n sl-divider {\n margin: 0;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: Boolean }) expanded = false;\n @property({ type: String }) stateLabel = '';\n @property({ type: String }) tooltipContent = '';\n @property({ attribute: false }) onToggle?: (expanded: boolean) => void;\n\n render() {\n return html`\n <sl-divider class=\"h-px bg-(--axebow-light-gray)\"></sl-divider>\n <div\n class=\"flex items-center gap-2 flex-wrap pt-4\"\n style=\"padding-bottom: ${this.expanded ? '1.09375rem' : '1rem'};\"\n >\n <h3 class=\"text-base font-semibold text-(--axebow-tertiary) hover:text-(--axebow-gray) cursor-pointer m-0\">\n ${this.title}\n </h3>\n <div class=\"w-10 h-5 shrink-0 overflow-hidden\">\n <axebow-switch\n width=\"2.5rem\"\n height=\"1.25rem\"\n .checked=${this.expanded}\n .onChange=${(checked: boolean) => this.onToggle?.(checked)}\n >\n </axebow-switch>\n </div>\n <span class=\"text-sm text-(--axebow-gray) italic\">${this.stateLabel}</span>\n <axebow-tooltip content=\"${this.tooltipContent}\">\n <axebow-icon iconName=\"help\" iconColor=\"var(--axebow-primary)\" size=\"md\" filled></axebow-icon>\n </axebow-tooltip>\n </div>\n <div class=\"${this.expanded ? 'block pb-4' : 'hidden'}\">\n <slot></slot>\n </div>\n <sl-divider class=\"h-px bg-(--axebow-light-gray)\"></sl-divider>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational wizard/step action bar: a divider followed by a\n * configurable row of buttons (cancel, optional previous, optional\n * secondary action, primary action). Owns no fixed positioning or\n * page-layout integration - the caller decides how and where to place it,\n * and the bar itself just grows/shrinks up to its 1174px design width.\n */\n@customElement('axebow-actions-footer')\nexport class AxebowActionsFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) cancelLabel = 'Cancel';\n @property({ attribute: false }) onCancel: () => void = () => {};\n\n @property({ type: String }) previousLabel = '';\n @property({ attribute: false }) onPrevious: () => void = () => {};\n\n @property({ type: Object }) actionLabel: string | TemplateResult<1> = 'Next step';\n @property({ attribute: false }) onAction: () => void = () => {};\n @property({ type: Boolean }) isActionDisabled = false;\n @property({ type: String }) actionVariant = 'primary';\n @property({ type: String }) actionClass = '';\n @property({ type: String }) actionFixedWidth = '8.5rem';\n @property({ type: String }) actionFixedHeight = '2.5rem';\n\n @property({ type: Object }) secondaryActionLabel: string | TemplateResult<1> = '';\n @property({ attribute: false }) onSecondaryAction: () => void = () => {};\n @property({ type: Boolean }) isSecondaryActionDisabled = false;\n @property({ type: String }) secondaryActionVariant = 'primary';\n @property({ type: Boolean }) secondaryActionOutline = false;\n @property({ type: String }) secondaryActionFixedWidth?: string;\n @property({ type: String }) secondaryActionFixedHeight?: string;\n\n @property({ type: String }) text = '';\n\n @property({ type: Boolean }) isOverlappingContent = false;\n\n render() {\n return html`\n <div\n class=\"w-full bg-(--axebow-base) box-border ${this.isOverlappingContent\n ? 'shadow-[0_-8px_8px_-8px_rgba(13,24,33,0.15)]'\n : ''}\"\n >\n <sl-divider class=\"h-px bg-(--axebow-light-gray)\" style=\"margin: 1rem 0;\"></sl-divider>\n <div class=\"h-10 box-content flex items-center pb-6\">\n <div class=\"flex items-center gap-8 shrink-0 mr-8\">\n <axebow-button\n class=\"axebow-red-button-text\"\n variant=\"text\"\n fixedWidth=\"3.25rem\"\n @click=${this.onCancel}\n >\n ${this.cancelLabel}\n </axebow-button>\n\n ${this.previousLabel\n ? html`\n <axebow-button variant=\"text\" fixedWidth=\"3.25rem\" @click=${this.onPrevious}>\n ${this.previousLabel}\n </axebow-button>\n `\n : ''}\n </div>\n\n <p class=\"flex-1 text-right font-semibold text-(--axebow-text-gray) m-0 mr-4\">${unsafeHTML(this.text)}</p>\n\n <div class=\"flex items-center gap-3 shrink-0\">\n ${this.secondaryActionLabel\n ? html`\n <axebow-button\n variant=\"${this.secondaryActionVariant}\"\n ?outline=${this.secondaryActionOutline}\n .fixedWidth=${this.secondaryActionFixedWidth}\n .fixedHeight=${this.secondaryActionFixedHeight}\n .disabled=${this.isSecondaryActionDisabled}\n @click=${this.onSecondaryAction}\n >\n ${this.secondaryActionLabel}\n </axebow-button>\n `\n : ''}\n <axebow-button\n class=\"${this.actionClass}\"\n variant=\"${this.actionVariant}\"\n .fixedWidth=${this.actionFixedWidth}\n .fixedHeight=${this.actionFixedHeight}\n .disabled=${this.isActionDisabled}\n @click=${this.onAction}\n >\n ${this.actionLabel}\n </axebow-button>\n </div>\n </div>\n </div>\n `;\n }\n}","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-step-header')\nexport class AxebowStepHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) step = '';\n @property({ type: String }) stepTitle = '';\n @property({ type: String }) stepCount = '';\n @property({ type: String }) stepLabel = 'STEP';\n @property({ type: String }) ofLabel = 'OF';\n\n render() {\n return html`\n <div class=\"w-194.25 h-6 flex items-center gap-2 box-border\">\n <axebow-icon iconName=\"counter_${this.step}\" iconColor=\"var(--axebow-primary)\" ?filled=${true}></axebow-icon>\n <h2 class=\"text-base font-semibold text-(--axebow-rich-black) m-0 truncate\">${this.stepTitle}</h2>\n <p class=\"ml-auto shrink-0 text-sm font-semibold text-(--axebow-primary) m-0 whitespace-nowrap\">\n ${this.stepLabel} ${this.step} ${this.ofLabel} ${this.stepCount}\n </p>\n </div>\n `;\n }\n}","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-underline-tab-selector')\nexport class AxebowUnderlineTabSelector extends LitElement {\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Number }) activeTab?: number;\n\n @state() private _activeTab = 0;\n @state() private _tabCount = 0;\n @state() private _tabDisabled: boolean[] = [];\n\n private _observer: MutationObserver | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n button {\n font-family: inherit;\n }\n :host([disabled]) {\n opacity: 0.6;\n pointer-events: none;\n cursor: not-allowed;\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this._updateTabCount());\n this._observer.observe(this, { childList: true, attributes: true, attributeFilter: ['disabled'], subtree: true });\n this._updateTabCount();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n }\n\n protected firstUpdated() {\n this._updateTabCount();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('activeTab') && this.activeTab !== undefined && this._activeTab !== this.activeTab) {\n this._activeTab = this.activeTab;\n }\n if (changedProperties.has('disabled')) {\n this.toggleAttribute('disabled', this.disabled);\n }\n }\n\n private _updateTabCount() {\n const labelEls = Array.from(this.children).filter((el) => el.getAttribute('slot')?.startsWith('tab-label-'));\n const count = labelEls.length;\n if (count !== this._tabCount) {\n if (this._activeTab >= count) this._activeTab = 0;\n this._tabCount = count;\n }\n this._tabDisabled = Array.from({ length: this._tabCount }, (_, i) => {\n const el = this.querySelector(`[slot=\"tab-label-${i}\"]`);\n return el?.hasAttribute('disabled') ?? false;\n });\n }\n\n private _selectTab(index: number) {\n if (this.disabled || this._tabDisabled[index]) return;\n this._activeTab = index;\n this.dispatchEvent(new CustomEvent('tab-change', { detail: { index }, bubbles: true, composed: true }));\n }\n\n render() {\n const tabs = Array.from({ length: this._tabCount }, (_, i) => i);\n return html`\n <div class=\"w-293.5 flex\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"shrink-0 h-8 px-8 flex items-center justify-center text-base bg-transparent\n transition-colors duration-200\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? 'font-semibold text-(--axebow-primary) border-b-2 border-solid border-(--axebow-primary) border-t-0 border-l-0 border-r-0'\n : 'font-medium text-[#8A94AE] border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n <div class=\"flex-1 border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0\"></div>\n </div>\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RoleCardResource {\n title: string;\n value: string;\n unit: string;\n}\n\n@customElement('axebow-role-card')\nexport class AxebowRoleCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-divider {\n --color: var(--axebow-gray);\n --width: 1px;\n }\n sl-input::part(base) {\n width: 100%;\n height: 2.5rem;\n }\n sl-input::part(input) {\n text-align: center;\n }\n `,\n ];\n\n @property({ type: String }) name = '';\n @property({ type: String }) logoUrl = '';\n @property({ type: String }) descriptionPrefix = '';\n @property({ type: String }) description = '';\n @property({ type: String }) resourceLimitsTitle = '';\n @property({ attribute: false }) resources: RoleCardResource[] = [];\n\n private _renderResource(resource: RoleCardResource) {\n return html`\n <div class=\"w-24.75 h-20.75 shrink-0 flex flex-col items-center justify-center gap-1\">\n <h3 class=\"m-0 text-base font-semibold self-start\">${resource.title}</h3>\n <sl-input class=\"w-full\" type=\"number\" value=${resource.value} disabled></sl-input>\n <p class=\"m-0 text-xs\">${resource.unit}</p>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"w-95 h-83.25 box-border bg-white rounded-md p-4 flex flex-col\">\n <div class=\"w-87 h-4.25 flex items-center\">\n <h1 class=\"m-0 uppercase text-left text-base font-semibold text-(--axebow-gray) truncate\">${this.name}</h1>\n </div>\n <sl-divider></sl-divider>\n <div class=\"w-12.5 h-12.5 shrink-0\">\n <img src=${this.logoUrl} class=\"w-full h-full object-contain\" />\n </div>\n <div class=\"w-87 h-12.75 mt-4 overflow-hidden\">\n <p class=\"m-0 wrap-break-word whitespace-normal\">\n <strong>${this.descriptionPrefix}</strong> ${this.description}\n </p>\n </div>\n <div class=\"w-27 h-4.25 mt-4 flex items-center\">\n <h4 class=\"m-0 text-base font-semibold text-black\">${this.resourceLimitsTitle}</h4>\n </div>\n <div class=\"w-87 h-22.75 mt-4 flex items-center gap-2.25\">\n ${this.resources.map(\n (resource, i) => html`\n ${i === 2\n ? html`<div class=\"w-6 h-full flex items-center justify-center shrink-0\">\n <axebow-icon iconName=\"border_horizontal\" size=\"md\"></axebow-icon>\n </div>`\n : ''}\n ${this._renderResource(resource)}\n `\n )}\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-search/axebow-search.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface TimeRangeItem {\n label: string;\n value: number;\n selected: boolean;\n}\n\n@customElement('axebow-time-range-panel')\nexport class AxebowTimeRangePanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-input::part(input) {\n font-size: 0.95rem;\n color: var(--axebow-strong-gray);\n background-color: #f3f4f6;\n }\n sl-input::part(base) {\n background-color: #f3f4f6;\n width: 100%;\n }\n .apply-button::part(base) {\n font-size: 0.875rem !important;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) searchValue = '';\n @property({ attribute: false }) ranges: TimeRangeItem[] = [];\n @property({ type: String }) absoluteTitle = '';\n @property({ type: String }) fromLabel = '';\n @property({ type: String }) fromValue = '';\n @property({ type: String }) toLabel = '';\n @property({ type: String }) toValue = '';\n @property({ type: String }) applyLabel = '';\n\n private _emit(eventName: string, detail?: unknown) {\n this.dispatchEvent(new CustomEvent(eventName, { detail, bubbles: true, composed: true }));\n }\n\n private _handleSearchChange = (e: CustomEvent<{ value: string }>) => {\n this._emit('search-change', { value: e.detail.value });\n };\n\n private _handleRangeSelect(range: TimeRangeItem) {\n this._emit('range-select', { value: range.value });\n }\n\n private _handleFromChange = (e: Event) => {\n this._emit('from-change', { value: (e.target as HTMLInputElement).value });\n };\n\n private _handleApply = () => {\n this._emit('apply');\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n };\n\n private _renderQuickRanges() {\n return html`\n <sl-menu class=\"w-53 h-112 box-border p-2 rounded-none!\">\n <axebow-search\n placeholder=${this.searchPlaceholder}\n .value=${this.searchValue}\n width=\"12.25rem\"\n height=\"2.5rem\"\n @search-change=${this._handleSearchChange}\n ></axebow-search>\n ${this.ranges.map(\n (range) => html`\n <sl-menu-item @click=${() => this._handleRangeSelect(range)} ?selected=${range.selected}>\n ${range.label}\n </sl-menu-item>\n `\n )}\n </sl-menu>\n `;\n }\n\n private _renderAbsoluteTimeSection() {\n return html`\n <div class=\"w-74.75 h-112 box-border flex flex-col p-4 gap-2 bg-white border-l border-solid border-gray-100\">\n <h2 class=\"font-bold\">${this.absoluteTitle}</h2>\n <label for=\"from-datetime\">${this.fromLabel}</label>\n <sl-input\n id=\"from-datetime\"\n type=\"datetime-local\"\n .value=${this.fromValue}\n @sl-change=${this._handleFromChange}\n ></sl-input>\n <label for=\"to-datetime\">${this.toLabel}</label>\n <sl-input id=\"to-datetime\" type=\"text\" value=${this.toValue} disabled></sl-input>\n <axebow-button\n variant=\"primary\"\n fixedWidth=\"16.421875rem\"\n fixedHeight=\"2.5rem\"\n class=\"mt-4 apply-button\"\n @click=${this._handleApply}\n >\n ${this.applyLabel}\n </axebow-button>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"w-70.5 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <sl-dropdown class=\"w-70.5\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"17.625rem\" fixedHeight=\"2.5rem\">\n ${this.buttonText}\n </axebow-button>\n <div\n class=\"w-127.75 h-112 box-border my-2 flex text-sm border border-solid border-(--axebow-primary) rounded-md overflow-hidden\"\n >\n ${this._renderQuickRanges()} ${this._renderAbsoluteTimeSection()}\n </div>\n </sl-dropdown>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RoleContainerItem {\n name: string;\n selected: boolean;\n}\n\nexport interface RoleContainerInstanceItem {\n name: string;\n logoUrl: string;\n selected: boolean;\n containers: RoleContainerItem[];\n}\n\nexport interface RoleContainerRoleItem {\n name: string;\n instances: RoleContainerInstanceItem[];\n}\n\nexport interface RoleContainerSelection {\n type: 'all' | 'instance' | 'container';\n role?: string;\n instanceIdx?: number;\n container?: string;\n}\n\n@customElement('axebow-role-container-dropdown')\nexport class AxebowRoleContainerDropdown extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-menu-item::part(base) {\n padding-top: 0.71875rem !important;\n padding-bottom: 0.71875rem !important;\n padding-left: 0.75rem !important;\n padding-right: 0.75rem !important;\n }\n sl-checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n sl-checkbox::part(control) {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n sl-checkbox::part(label) {\n display: flex;\n align-items: center;\n }\n .role-container-panel::part(popup) {\n z-index: var(--sl-z-index-dropdown);\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) allContainersLabel = '';\n @property({ type: Boolean }) allContainersSelected = false;\n @property({ attribute: false }) roles: RoleContainerRoleItem[] = [];\n @property({ type: String }) clearAllLabel = '';\n @property({ type: String }) applyFilterLabel = '';\n\n private _emitToggle(selection: RoleContainerSelection) {\n this.dispatchEvent(new CustomEvent('item-toggle', { detail: { selection }, bubbles: true, composed: true }));\n }\n\n private _handleClearAll = () => {\n this.dispatchEvent(new CustomEvent('clear-all', { bubbles: true, composed: true }));\n };\n\n private _handleApplyFilter = () => {\n this.dispatchEvent(new CustomEvent('apply-filter', { bubbles: true, composed: true }));\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n };\n\n private _renderAllContainersOption() {\n return html`\n <sl-menu-item @click=${(e: Event) => this._handleItemClick(e, { type: 'all' })}>\n <sl-checkbox .checked=${this.allContainersSelected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}\n >${this.allContainersLabel}</sl-checkbox\n >\n </sl-menu-item>\n `;\n }\n\n private _handleItemClick(e: Event, selection: RoleContainerSelection) {\n e.preventDefault();\n e.stopPropagation();\n this._emitToggle(selection);\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n }\n\n private _renderInstance(role: RoleContainerRoleItem, instance: RoleContainerInstanceItem, instanceIdx: number) {\n return html`\n <sl-menu-item\n @click=${(e: Event) => this._handleItemClick(e, { type: 'instance', role: role.name, instanceIdx })}\n >\n <sl-checkbox .checked=${instance.selected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}>\n <div class=\"flex items-center gap-2\">\n <img src=\"${instance.logoUrl}\" alt=\"role-logo\" class=\"w-8 h-8\" />\n <p>${instance.name}</p>\n </div>\n </sl-checkbox>\n ${instance.containers.length\n ? html`\n <div class=\"flex flex-col ml-4\">\n ${instance.containers.map((container) => this._renderContainer(role.name, instanceIdx, container))}\n </div>\n `\n : ''}\n </sl-menu-item>\n `;\n }\n\n private _renderContainer(roleName: string, instanceIdx: number, container: RoleContainerItem) {\n return html`\n <div\n class=\"cursor-pointer hover:bg-gray-50 p-1 rounded\"\n @click=${(e: Event) =>\n this._handleItemClick(e, { type: 'container', role: roleName, instanceIdx, container: container.name })}\n >\n <sl-checkbox .checked=${container.selected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}>\n <div class=\"flex items-center gap-2\">\n <axebow-icon class=\"font-light\" iconName=\"subdirectory_arrow_right\" size=\"base\"></axebow-icon>\n <p>${container.name}</p>\n </div>\n </sl-checkbox>\n </div>\n `;\n }\n\n private _renderFooter() {\n return html`\n <div class=\"w-70.5 h-10.25 box-border flex items-center border-t border-solid border-(--axebow-gray)\">\n <div\n class=\"w-34.25 h-10 box-border flex items-center text-base text-(--axebow-gray) cursor-pointer\"\n style=\"padding: 0.71875rem 1.5rem 0.71875rem 1.75rem;\"\n @click=${this._handleClearAll}\n >\n ${this.clearAllLabel}\n </div>\n <span class=\"w-px h-full bg-(--axebow-light-gray) shrink-0\"></span>\n <div\n class=\"w-34.25 h-10 box-border flex items-center text-base text-(--axebow-tertiary) cursor-pointer\"\n style=\"padding: 0.71875rem 1.5rem 0.71875rem 1.75rem;\"\n @click=${this._handleApplyFilter}\n >\n ${this.applyFilterLabel}\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2\">\n <div class=\"w-70.5 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <sl-dropdown class=\"w-70.5\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"17.625rem\" fixedHeight=\"2.5rem\">\n ${this.buttonText}\n </axebow-button>\n <div\n class=\"role-container-panel w-70.5 h-89.25 box-border flex flex-col bg-white border border-solid border-(--axebow-tertiary) rounded-md overflow-hidden\"\n >\n <sl-menu class=\"w-70.5 h-79 box-border overflow-y-auto\">\n ${this._renderAllContainersOption()}\n ${this.roles.map((role) =>\n role.instances.map((instance, instanceIdx) => this._renderInstance(role, instance, instanceIdx))\n )}\n </sl-menu>\n ${this._renderFooter()}\n </div>\n </sl-dropdown>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RefreshPeriodItem {\n label: string;\n value: number;\n selected: boolean;\n}\n\n@customElement('axebow-refresh-period-panel')\nexport class AxebowRefreshPeriodPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .refresh-spin {\n animation: spin 1s linear infinite;\n }\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) offLabel = '';\n @property({ type: Boolean }) offSelected = false;\n @property({ attribute: false }) periods: RefreshPeriodItem[] = [];\n @property({ type: String }) refreshNowLabel = '';\n @property({ type: Boolean }) isManualRefreshing = false;\n\n private _handleSelect(value: number | null) {\n this.dispatchEvent(new CustomEvent('period-select', { detail: { value }, bubbles: true, composed: true }));\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n }\n\n private _handleRefreshNow = () => {\n this.dispatchEvent(new CustomEvent('refresh-now-click', { bubbles: true, composed: true }));\n };\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2\">\n <div class=\"w-45 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <div class=\"flex gap-4 items-center justify-center flex-wrap\">\n <sl-dropdown class=\"w-45\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"11.25rem\" fixedHeight=\"2.5rem\">\n <div class=\"flex items-center gap-2\">${this.buttonText}</div>\n </axebow-button>\n <sl-menu class=\"w-45 my-2\">\n <sl-menu-item @click=${() => this._handleSelect(null)} ?selected=${this.offSelected}>\n <div class=\"flex items-center gap-2\">${this.offLabel}</div>\n </sl-menu-item>\n <sl-divider></sl-divider>\n ${this.periods.map(\n (period) => html`\n <sl-menu-item @click=${() => this._handleSelect(period.value)} ?selected=${period.selected}>\n <div class=\"flex items-center gap-2\">${period.label}</div>\n </sl-menu-item>\n `\n )}\n </sl-menu>\n </sl-dropdown>\n <button\n class=\"text-[var(--axebow-tertiary)] flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity ${this\n .isManualRefreshing\n ? 'opacity-70'\n : ''}\"\n @click=${this._handleRefreshNow}\n ?disabled=${this.isManualRefreshing}\n >\n <p class=\"font-bold\">${this.refreshNowLabel}</p>\n <axebow-icon\n iconName=\"cached\"\n size=\"3xl\"\n iconColor=\"var(--axebow-tertiary)\"\n class=\"${this.isManualRefreshing ? 'refresh-spin' : ''}\"\n ></axebow-icon>\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../../styles/axebow-theme.js';\nimport '../../axebow-input/axebow-input.js';\n\n@customElement('axebow-resource-limit-input')\nexport class AxebowResourceLimitInput extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: String }) label = '';\n @property({ type: String }) unit = '';\n @property({ type: String }) value = '';\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) hasError = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n\n render() {\n return html`\n <div class=\"flex flex-col items-center gap-2 w-24.75 shrink-0\">\n <div class=\"flex items-center gap-1\">\n ${this.required ? html`<span class=\"text-(--axebow-error)\">*</span>` : ''}\n <span class=\"text-sm font-semibold text-center\">${this.label}</span>\n </div>\n <axebow-input\n controlType=\"integer\"\n .compact=${true}\n .value=${this.value}\n .max=${this.max}\n .min=${this.min}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .callback=${this.callback}\n fixedWidth=\"6.1875rem\"\n fixedHeight=\"2.5rem\"\n ></axebow-input>\n <span class=\"text-sm text-(--axebow-secondary)\">${this.unit}</span>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport './parts/axebow-resource-limit-input.js';\nimport type { ResourceLimitField } from './axebow-resource-limits.models.js';\n\nexport type { ResourceLimitField };\n\n@customElement('axebow-resource-limits-panel')\nexport class AxebowResourceLimitsPanel extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Object }) cpu!: ResourceLimitField;\n @property({ type: Object }) memory!: ResourceLimitField;\n @property({ type: Array }) storageFields: ResourceLimitField[] = [];\n\n private _handleChange(field: ResourceLimitField, e: Event) {\n const target = e.target as HTMLInputElement;\n let value = Math.trunc(Number(target.value));\n if (value > field.max) value = field.max;\n target.value = value.toString();\n this.dispatchEvent(\n new CustomEvent('resource-limit-change', {\n detail: { key: field.key, value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _renderField(field: ResourceLimitField) {\n return html`\n <axebow-resource-limit-input\n label=${field.label}\n unit=${field.unit}\n value=${field.value?.toString() ?? ''}\n .max=${field.max}\n .min=${field.min ?? 0}\n ?required=${field.required}\n ?disabled=${field.disabled}\n ?hasError=${field.hasError}\n .callback=${(e: Event) => this._handleChange(field, e)}\n ></axebow-resource-limit-input>\n `;\n }\n\n render() {\n if (!this.cpu || !this.memory) return html``;\n\n return html`\n <div class=\"flex items-center flex-wrap gap-19\">\n <div class=\"flex items-start gap-6\">${this._renderField(this.cpu)} ${this._renderField(this.memory)}</div>\n <div class=\"flex items-start gap-4 w-100.5 p-4 border border-(--axebow-table-header-border) rounded-md box-border\">\n ${this.storageFields.map((field) => this._renderField(field))}\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nexport type SelectorSliderPosition = number | 'min' | 'middle' | 'max';\n\n@customElement('axebow-selector-slider')\nexport class AxebowSelectorSlider extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Number, reflect: true }) quantity: SelectorSliderPosition = 0;\n @property() minTag: string | number = 0;\n @property() mediumTag: string | number = 'Y';\n @property() maxTag: string | number = 'X';\n @property({ type: Number }) min?: number;\n @property({ type: Number }) max?: number;\n @property({ type: Number }) step = 1;\n @property({ type: Boolean }) disabled = false;\n\n @property()\n get value(): SelectorSliderPosition {\n return this.quantity;\n }\n set value(val: SelectorSliderPosition) {\n this.quantity = val;\n }\n\n @query('.slider-track-container') private _trackContainer!: HTMLElement;\n\n private _isDragging = false;\n\n private get _minVal(): number {\n if (typeof this.min === 'number') return this.min;\n const n = Number(this.minTag);\n return isNaN(n) ? 0 : n;\n }\n\n private get _maxVal(): number {\n if (typeof this.max === 'number') return this.max;\n const n = Number(this.maxTag);\n return isNaN(n) ? 100 : n;\n }\n\n private get _numericQuantity(): number {\n if (typeof this.quantity === 'string') {\n const str = (this.quantity as string).toLowerCase();\n if (str === 'min') return this._minVal;\n if (str === 'max') return this._maxVal;\n if (str === 'middle') return Math.round((this._minVal + this._maxVal) / 2);\n const parsed = Number(this.quantity);\n if (!isNaN(parsed)) return parsed;\n }\n return typeof this.quantity === 'number' ? this.quantity : this._minVal;\n }\n\n private get _percentage(): number {\n const min = this._minVal;\n const max = this._maxVal;\n if (max <= min) return 0;\n const val = Math.max(min, Math.min(max, this._numericQuantity));\n return ((val - min) / (max - min)) * 100;\n }\n\n private _setValue(newValue: number) {\n const min = this._minVal;\n const max = this._maxVal;\n const clamped = Math.max(min, Math.min(max, newValue));\n if (this._numericQuantity !== clamped) {\n this.quantity = clamped;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: clamped, quantity: clamped },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _handlePointerDown(e: PointerEvent) {\n if (this.disabled) return;\n this._isDragging = true;\n this._updateFromPointer(e);\n\n const handlePointerMove = (moveEv: PointerEvent) => {\n if (this._isDragging) {\n this._updateFromPointer(moveEv);\n }\n };\n\n const handlePointerUp = () => {\n this._isDragging = false;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n private _updateFromPointer(e: PointerEvent) {\n if (!this._trackContainer) return;\n const rect = this._trackContainer.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const width = rect.width;\n if (width <= 0) return;\n\n const ratio = Math.max(0, Math.min(1, x / width));\n const min = this._minVal;\n const max = this._maxVal;\n const rawVal = min + ratio * (max - min);\n\n const step = this.step || 1;\n const stepped = Math.round((rawVal - min) / step) * step + min;\n this._setValue(stepped);\n }\n\n private _handleKeyDown(e: KeyboardEvent) {\n if (this.disabled) return;\n const min = this._minVal;\n const max = this._maxVal;\n const step = this.step || 1;\n const current = this._numericQuantity;\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault();\n this._setValue(Math.min(max, current + step));\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault();\n this._setValue(Math.max(min, current - step));\n } else if (e.key === 'Home') {\n e.preventDefault();\n this._setValue(min);\n } else if (e.key === 'End') {\n e.preventDefault();\n this._setValue(max);\n }\n }\n\n render() {\n const percent = this._percentage;\n const currentVal = this._numericQuantity;\n const min = this._minVal;\n const max = this._maxVal;\n const mid = Math.round((min + max) / 2);\n\n return html`\n <div class=\"w-full flex flex-col gap-2 select-none ${this.disabled ? 'opacity-50 pointer-events-none' : ''}\">\n <!-- Slider Track Container -->\n <div\n class=\"relative w-full h-8 flex items-center cursor-pointer touch-none focus:outline-none focus-visible:ring-2 focus-visible:ring-[#006BFF] rounded-full\"\n tabindex=${this.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin=${min}\n aria-valuemax=${max}\n aria-valuenow=${currentVal}\n aria-valuetext=${String(currentVal)}\n @pointerdown=${this._handlePointerDown}\n @keydown=${this._handleKeyDown}\n >\n <!-- Outer track padding container for exact knob alignment -->\n <div class=\"slider-track-container relative w-full h-3 rounded-full bg-[#C7DCFA] overflow-visible\">\n <!-- Active Fill Track -->\n <div\n class=\"absolute left-0 top-0 bottom-0 rounded-full bg-[#006BFF] transition-all duration-150 ease-out\"\n style=\"width: ${percent}%;\"\n ></div>\n\n <!-- Slider Thumb Knob -->\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-7 h-7 rounded-full bg-[#006BFF] border-2 border-white shadow-[0_2px_6px_rgba(0,0,0,0.2)] transition-all duration-150 ease-out cursor-grab active:cursor-grabbing hover:scale-105\"\n style=\"left: ${percent}%;\"\n ></div>\n </div>\n </div>\n\n <!-- Labels below -->\n <div class=\"flex justify-between items-center text-sm font-semibold text-[#78787A] px-1\">\n <span class=\"w-1/3 text-left cursor-pointer\" @click=${() => !this.disabled && this._setValue(min)}>\n ${this.minTag}\n </span>\n <span class=\"w-1/3 text-center cursor-pointer\" @click=${() => !this.disabled && this._setValue(mid)}>\n ${this.mediumTag}\n </span>\n <span class=\"w-1/3 text-right cursor-pointer\" @click=${() => !this.disabled && this._setValue(max)}>\n ${this.maxTag}\n </span>\n </div>\n </div>\n `;\n }\n}","import { html, css, LitElement, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport type {\n DeploySummaryInfo,\n DeploySummaryResourceLimits,\n DeploySummaryIdentificationStep,\n DeploySummaryResourcesStep,\n DeploySummaryScalingStep,\n DeploySummaryChannelsStep,\n DeploySummaryChannelGroup,\n DeploySummaryConfigurationStep,\n DeploySummaryConfigItem,\n} from './axebow-deploy-summary.models.js';\n\n/**\n * Purely presentational deploy-wizard summary panel. Every figure, label\n * and per-step visibility/validity flag comes in via properties, already\n * computed and translated by the caller - this component only lays the\n * sections out and forwards the `axebow-summary-step` toggle/edit events\n * (which already bubble+compose on their own) and the download click.\n *\n * Body copy is uniformly 14px (text-base in this design system's scale) -\n * only step titles and the \"Autoscaling\" section title keep their larger\n * size. Every field name renders in black, every value in axebow-gray.\n */\n@customElement('axebow-deploy-summary')\nexport class AxebowDeploySummary extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n height: 100%;\n }\n axebow-summary-card {\n display: block;\n height: 100%;\n }\n /* The plain, solid divider used between every summary section -\n matches whatever separates the step titles. */\n sl-divider.summary-title-divider {\n --color: var(--axebow-table-header-border, #dbdde4);\n --spacing: 0.75rem;\n }\n /* Dashed variant used inside the autoscaling summary. */\n sl-divider.summary-dashed-divider {\n --color: var(--axebow-base);\n --spacing: 0.75rem;\n border-top-style: dashed !important;\n }\n `,\n ];\n\n @property({ type: String }) summaryTitle = '';\n @property({ type: Boolean }) showDownloadButton = false;\n @property({ type: String }) downloadLabel = '';\n\n @property({ attribute: false }) deploymentInfo?: DeploySummaryInfo;\n @property({ attribute: false }) resourceLimits?: DeploySummaryResourceLimits;\n\n @property({ attribute: false }) identification?: DeploySummaryIdentificationStep;\n @property({ attribute: false }) resources?: DeploySummaryResourcesStep;\n @property({ attribute: false }) scaling?: DeploySummaryScalingStep;\n @property({ attribute: false }) channels?: DeploySummaryChannelsStep;\n @property({ attribute: false }) configuration?: DeploySummaryConfigurationStep;\n\n /** Bumped by the caller whenever the wizard advances a step, to scroll the summary into view. */\n @property({ type: Number }) currentStep = 0;\n\n protected updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n if (changedProperties.has('currentStep')) {\n const oldStep = changedProperties.get('currentStep') as number | undefined;\n if (oldStep !== undefined && this.currentStep > oldStep) {\n this._scrollToBottom();\n }\n }\n }\n\n private _scrollToBottom() {\n setTimeout(() => {\n const summaryCard = this.renderRoot.querySelector('axebow-summary-card') as any;\n if (summaryCard && summaryCard.scrollToBottom) {\n summaryCard.scrollToBottom();\n }\n\n const container = this.renderRoot.querySelector('.overflow-y-auto');\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n }, 100);\n }\n\n render() {\n return html`\n <axebow-summary-card title=\"${this.summaryTitle}\">\n ${this.showDownloadButton\n ? html`\n <axebow-button slot=\"header-actions\" variant=\"text\" size=\"medium\" @click=${this._handleDownloadBundle}>\n <axebow-icon\n iconName=\"download_for_offline\"\n slot=\"suffix\"\n size=\"xl\"\n ></axebow-icon>\n <span class=\"text-sm lg:text-base hidden lg:inline\">${this.downloadLabel}</span>\n </axebow-button>\n `\n : ''}\n ${this._renderDeploymentInfo()}\n <div class=\"h-px border-t border-dashed border-gray-400 my-4\"></div>\n ${this._renderResourceLimits()}\n <sl-divider class=\"summary-title-divider\"></sl-divider>\n <div class=\"flex-1 overflow-y-auto flex flex-col\">\n ${this._renderIdentificationStep()} ${this._renderResourcesStep()} ${this._renderScalingStep()}\n ${this._renderChannelsStep()} ${this._renderConfigurationStep()}\n </div>\n </axebow-summary-card>\n `;\n }\n\n private _renderDeploymentInfo() {\n const info = this.deploymentInfo;\n if (!info) return '';\n return html`\n <div class=\"flex flex-col gap-2\">\n <axebow-summary-key-value\n label=\"${info.subscriptionPlan.label}\"\n value=\"${info.subscriptionPlan.value}\"\n ></axebow-summary-key-value>\n <axebow-summary-key-value label=\"${info.tenant.label}\" value=\"${info.tenant.value}\"></axebow-summary-key-value\n ><axebow-summary-key-value\n label=\"${info.account.label}\"\n value=\"${info.account.value}\"\n ></axebow-summary-key-value>\n <div class=\"flex gap-4 items-center mb-1\">\n <p class=\"text-base text-(--axebow-black)\">${info.cloudProviderLabel}</p>\n ${info.cloudProviderLogoSrc\n ? html`<img src=\"${info.cloudProviderLogoSrc}\" class=\"h-6\" alt=\"${info.cloudProviderLogoAlt ?? ''}\" />`\n : ''}\n </div>\n <axebow-summary-key-value\n label=\"${info.environment.label}\"\n value=\"${info.environment.value}\"\n ></axebow-summary-key-value>\n </div>\n `;\n }\n\n private _renderResourceLimits() {\n const limits = this.resourceLimits;\n if (!limits) return '';\n return html`\n <div class=\"flex flex-col gap-2 flex-wrap\">\n <p class=\"text-base text-(--axebow-black)\">${limits.limitsAvailableLabel}</p>\n <div>\n <axebow-resource-bar\n icon=\"${limits.cpu.icon}\"\n label=\"${limits.cpu.label}\"\n .current=${limits.cpu.current}\n .limit=${limits.cpu.limit}\n .percentage=${limits.cpu.percentage}\n iconSize=\"base\"\n iconBoxSize=\"0.875rem\"\n fixedWidth=\"20.875rem\"\n fixedHeight=\"1.75rem\"\n valuesWidth=\"14.1875rem\"\n valuesHeight=\"1rem\"\n barWidth=\"8.75rem\"\n barHeight=\"0.6875rem\"\n ></axebow-resource-bar>\n <axebow-resource-bar\n icon=\"${limits.memory.icon}\"\n label=\"${limits.memory.label}\"\n .current=${limits.memory.current}\n .limit=${limits.memory.limit}\n .percentage=${limits.memory.percentage}\n rotate=\"${limits.memory.rotate ?? '0'}\"\n unit=\"${limits.memory.unit ?? ''}\"\n iconSize=\"base\"\n iconBoxSize=\"0.875rem\"\n fixedWidth=\"20.875rem\"\n fixedHeight=\"1.75rem\"\n valuesWidth=\"14.1875rem\"\n valuesHeight=\"1rem\"\n barWidth=\"8.75rem\"\n barHeight=\"0.6875rem\"\n ></axebow-resource-bar>\n </div>\n </div>\n `;\n }\n\n /** label:value pair with the shared black-name/gray-value convention. */\n private _field(label: string, value: unknown, hasError = false) {\n return html`\n <p class=\"text-base\">\n <span class=\"text-(--axebow-black)\">${label}</span>\n <strong class=\"${hasError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${value}</strong>\n </p>\n `;\n }\n\n private _renderIdentificationStep() {\n const step = this.identification;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-1\">\n ${step.imageName ? this._field(step.imageNameLabel, step.imageName) : ''}\n ${step.serviceName ? this._field(step.serviceNameLabel, step.serviceName) : ''}\n ${step.project ? this._field(step.projectLabel, step.project) : ''}\n ${step.registry ? this._renderRegistrySummary(step.registry) : ''}\n ${step.entrypoint\n ? html`<div class=\"border-t border-dashed border-gray-300 pt-2 flex items-center gap-1 min-w-0 text-base\">\n <span class=\"shrink-0 text-(--axebow-black)\">${step.entrypointLabel}</span>\n <axebow-tooltip content=\"${step.entrypoint}\">\n <strong class=\"text-(--axebow-gray) block truncate max-w-36\">${step.entrypoint}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n ${step.cmd\n ? html`<div class=\"flex items-center gap-1 min-w-0 text-base\">\n <span class=\"shrink-0 text-(--axebow-black)\">${step.commandLabel}</span>\n <axebow-tooltip content=\"${step.cmd}\">\n <strong class=\"text-(--axebow-gray) block truncate max-w-36\">${step.cmd}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderRegistrySummary(registry: NonNullable<DeploySummaryIdentificationStep['registry']>) {\n return html`\n <div class=\"flex items-center gap-2 min-w-0 text-base\">\n <p class=\"shrink-0 text-(--axebow-black)\">${registry.containerRegistryLabel}</p>\n ${!registry.logoSrc\n ? html`<axebow-tooltip content=\"${registry.value}\">\n <strong class=\"text-(--axebow-gray) block truncate w-full\">${registry.value}</strong>\n </axebow-tooltip>`\n : html`<img src=\"${registry.logoSrc}\" class=\"w-6 h-4 object-contain\" />`}\n </div>\n ${registry.credentialSecret\n ? html` <div class=\"flex items-center gap-2 min-w-0 text-base\">\n <p class=\"shrink-0 text-(--axebow-black)\">${registry.registryCredentialsLabel}</p>\n <axebow-tooltip content=\"${registry.credentialSecret}\">\n <strong class=\"text-(--axebow-gray) block truncate w-full\">${registry.credentialSecret}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n `;\n }\n\n private _renderResourcesStep() {\n const step = this.resources;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"pr-2 space-y-2\">\n <div class=\"flex flex-row gap-x-4 flex-wrap\">\n ${this._field(step.cpus.label, `${step.cpus.value} ${step.cpus.unit}`, step.cpus.hasError)}\n ${this._field(step.memory.label, `${step.memory.value} ${step.memory.unit}`, step.memory.hasError)}\n </div>\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderScalingStep() {\n const step = this.scaling;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-1\">\n ${step.isAutoscaling && step.autoscaling\n ? this._renderAutoscalingInfo(step.autoscaling)\n : this._field(step.fixedReplicasLabel, step.fixedReplicas)}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderAutoscalingInfo(config: NonNullable<DeploySummaryScalingStep['autoscaling']>) {\n const hasScaleDownInfo = config.cpuDown || config.memoryDown;\n return html`\n <div class=\"border-t border-dashed border-gray-300 pt-3 space-y-1\">\n <p class=\"font-semibold text-base lg:text-lg text-(--axebow-black) mb-2\">${config.title}</p>\n ${config.minReplicas ? this._field(config.minLabel, config.minReplicas.value, config.minReplicas.hasError) : ''}\n ${config.maxReplicas ? this._field(config.maxLabel, config.maxReplicas.value) : ''}\n ${hasScaleDownInfo ? html`<sl-divider class=\"summary-dashed-divider\"></sl-divider>` : ''}\n ${config.cpuDown ? this._field(config.scaleDownCpuLabel, `${config.cpuDown}%`) : ''}\n ${config.cpuDown && config.memoryDown\n ? html`<p class=\"text-base text-(--axebow-black)\">${config.andLabel}</p>`\n : ''}\n ${config.memoryDown ? this._field(config.scaleDownMemoryLabel, `${config.memoryDown}%`) : ''}\n ${hasScaleDownInfo ? html`<sl-divider class=\"summary-dashed-divider\"></sl-divider>` : ''}\n ${config.histeresys ? this._field(config.cooldownLabel, config.histeresys) : ''}\n </div>\n `;\n }\n\n private _renderChannelsStep() {\n const step = this.channels;\n if (!step?.visible) return '';\n\n const hasAny = step.serverChannels || step.clientChannels || step.duplexChannels;\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-2 text-base\">\n ${hasAny\n ? html`\n ${step.serverChannels ? this._renderChannelGroup(step.serverChannels, step.linkedToLabel) : ''}\n ${step.clientChannels\n ? html`\n ${step.serverChannels ? html`<div class=\"border-t border-dashed border-gray-300\"></div>` : ''}\n ${this._renderChannelGroup(step.clientChannels, step.linkedToLabel)}\n `\n : ''}\n ${step.duplexChannels\n ? html`\n ${step.serverChannels || step.clientChannels\n ? html`<div class=\"border-t border-dashed border-gray-300\"></div>`\n : ''}\n ${this._renderChannelGroup(step.duplexChannels, step.linkedToLabel)}\n `\n : ''}\n `\n : html`<p class=\"text-gray-500 italic\">${step.noChannelsLabel}</p>`}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderChannelGroup(group: DeploySummaryChannelGroup, linkedToLabel: string) {\n const hasAnyLink = group.channels.some((ch) => ch.linked.length > 0);\n const totalLinked = group.channels.reduce((acc, ch) => acc + ch.linked.length, 0);\n\n return html`\n <div class=\"grid gap-x-4 gap-y-1 items-center\" style=\"grid-template-columns: 1fr ${hasAnyLink ? '1fr' : ''}\">\n <span class=\"font-medium text-(--axebow-black)\">${group.label} (${group.channels.length}):</span>\n ${hasAnyLink\n ? html`<span class=\"font-medium text-(--axebow-black)\">${linkedToLabel} (${totalLinked}):</span>`\n : ''}\n ${group.channels.map(\n (ch) => html`\n <div class=\"flex items-center min-w-0\">\n <strong class=\"text-(--axebow-gray) flex items-center gap-1 min-w-0 truncate\">\n <span class=\"truncate\">${ch.name}${ch.port ? `:${ch.port}` : ''}</span>\n ${ch.isPublic\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"captive_portal\"\n iconColor=\"var(--axebow-gray)\"\n size=\"md\"\n title=\"Gateway\"\n ></axebow-icon>`\n : ''}\n </strong>\n </div>\n ${hasAnyLink\n ? html`<span class=\"text-(--axebow-gray) font-semibold truncate\">${ch.linked.join(', ') || '—'}</span>`\n : ''}\n `\n )}\n </div>\n `;\n }\n\n private _renderNameValueGrid(items: { name: string; value: string }[], nameLabel: string, valueLabel: string) {\n return html`\n <div class=\"grid gap-x-6 gap-y-1 text-base\" style=\"grid-template-columns: 1fr auto 1fr\">\n <span class=\"text-(--axebow-black)\">${nameLabel}:</span>\n <span></span>\n <span class=\"text-(--axebow-black)\">${valueLabel}:</span>\n ${items.map(\n (item) => html`\n <span class=\"truncate font-normal text-(--axebow-primary)\">${item.name}</span>\n <span class=\"font-normal text-(--axebow-primary)\">=</span>\n <span class=\"font-normal truncate text-(--axebow-primary)\">${item.value}</span>\n `\n )}\n </div>\n `;\n }\n\n private _renderConfigurationStep() {\n const step = this.configuration;\n if (!step?.visible) return '';\n\n const pathItems = step.items.filter((item): item is DeploySummaryConfigItem & { path: string } => !!item.path);\n const plainItems = step.items.filter((item) => !item.path);\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div>\n ${step.items.length\n ? html`\n ${plainItems.length\n ? this._renderNameValueGrid(plainItems, step.variableNameLabel, step.variableValueLabel)\n : ''}\n ${pathItems.length && plainItems.length ? html`<sl-divider class=\"summary-title-divider\"></sl-divider>` : ''}\n ${pathItems.length\n ? this._renderNameValueGrid(\n pathItems.map((item) => ({ name: item.name, value: item.path })),\n step.pathNameLabel,\n step.pathValueLabel\n )\n : ''}\n `\n : html`<p class=\"text-base text-gray-500 italic\">${step.noConfigVarsLabel}</p>`}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _handleDownloadBundle() {\n this.dispatchEvent(new CustomEvent('download-bundle', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-summary-key-value')\nexport class AxebowSummaryKeyValue extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n margin-bottom: 0.25rem;\n }\n `,\n ];\n\n @property({ type: String }) label!: string;\n @property({ type: String }) value!: string;\n\n render() {\n return html`\n <p class=\"text-base\">\n <span class=\"text-(--axebow-black)\">${this.label}:</span>\n <span class=\"font-normal text-(--axebow-primary)\">${this.value}</span>\n </p>\n `;\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-resource-bar')\nexport class AxebowResourceBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) icon = '';\n @property({ type: String }) label = '';\n @property({ type: Number }) current = 0;\n @property({ type: Number }) limit = 0;\n @property({ type: Number }) percentage = 0;\n @property({ type: String }) rotate = '0';\n\n @property({ type: String }) iconSize = 'xl';\n @property({ type: String }) iconBoxSize?: string;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) valuesWidth?: string;\n @property({ type: String }) valuesHeight?: string;\n @property({ type: String }) barWidth?: string;\n @property({ type: String }) barHeight?: string;\n @property({ type: String }) unit?: string;\n\n private _renderIcon() {\n const icon = html`\n <axebow-icon\n iconName=\"${this.icon}\"\n iconColor=\"var(--axebow-strong-gray)\"\n size=\"${this.iconSize}\"\n rotate=\"${Number(this.rotate)}\"\n ></axebow-icon>\n `;\n\n return this.iconBoxSize\n ? html`\n <div\n class=\"flex items-center justify-center shrink-0\"\n style=\"width:${this.iconBoxSize};height:${this.iconBoxSize};\"\n >\n ${icon}\n </div>\n `\n : icon;\n }\n\n private get _isFixedVariant(): boolean {\n return !!(this.valuesWidth || this.barWidth);\n }\n\n private _formatValue(value: number): string {\n const hundredths = Math.round(value * 100);\n const decimals = hundredths % 10 === 0 ? 1 : 2;\n return (hundredths / 100).toFixed(decimals);\n }\n\n private _renderCurrent() {\n const value = this._isFixedVariant ? this._formatValue(this.current) : this.current.toFixed(2);\n const colorClass = this._isFixedVariant ? 'text-(--axebow-primary)' : 'text-(--axebow-gray)';\n return html`<p class=\"text-base ${colorClass}\">${value}</p>`;\n }\n\n private _renderBar() {\n return html`\n <div\n class=\"relative rounded-md bg-gray-200 overflow-hidden ${this.barWidth ? 'shrink-0' : 'flex-1 max-w-38'}\"\n style=\"height:${this.barHeight ?? '0.5rem'};${this.barWidth ? `width:${this.barWidth};` : ''}\"\n >\n <div\n class=\"absolute h-full ${this.percentage > 100\n ? 'bg-(--axebow-error)'\n : this.percentage === 100\n ? 'bg-(--axebow-warning)'\n : 'bg-(--axebow-gray)'}\"\n style=\"width: ${this.percentage}%;\"\n ></div>\n </div>\n `;\n }\n\n private _renderLimit() {\n const value = this.limit == null ? '-' : this._isFixedVariant ? this._formatValue(this.limit) : this.limit;\n const colorClass = this._isFixedVariant ? 'text-(--axebow-black)' : 'text-(--axebow-gray)';\n const weightClass = this._isFixedVariant ? 'font-normal' : 'font-bold';\n return html`\n <p class=\"text-base ${weightClass} ${colorClass}\">${value}</p>\n ${this.unit ? html`<span class=\"text-xs ${weightClass} ${colorClass}\">${this.unit}</span>` : ''}\n `;\n }\n\n private _renderValues() {\n if (!this._isFixedVariant) {\n return html` ${this._renderCurrent()} ${this._renderBar()} ${this._renderLimit()} `;\n }\n\n return html`\n <div class=\"flex items-center gap-2.75\">${this._renderCurrent()} ${this._renderBar()}</div>\n <div class=\"flex items-baseline gap-0.5\">${this._renderLimit()}</div>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"flex justify-between items-center gap-2 ${this.fixedWidth || this.fixedHeight ? '' : 'flex-wrap'}\"\n style=\"${this.fixedWidth ? `width:${this.fixedWidth};` : ''}${this.fixedHeight\n ? `height:${this.fixedHeight};`\n : ''}\"\n >\n <div class=\"flex items-center gap-1\">\n ${this._renderIcon()}\n <p class=\"text-base font-semibold text-(--axebow-black)\">${this.label}</p>\n </div>\n <div\n class=\"flex items-center ${this.valuesWidth || this.barWidth\n ? 'justify-between shrink-0'\n : 'gap-1 flex-1 max-w-43 min-w-20 justify-end'}\"\n style=\"${this.valuesWidth ? `width:${this.valuesWidth};` : ''}${this.valuesHeight\n ? `height:${this.valuesHeight};`\n : ''}\"\n >\n ${this._renderValues()}\n </div>\n </div>\n `;\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-summary-step-header')\nexport class AxebowSummaryStepHeader extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Number }) stepNumber!: number;\n @property({ type: String }) stepTitle = '';\n @property({ type: Boolean }) valid = false;\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) canEdit = true;\n @property({ type: Boolean }) isEditing = false;\n @property({ type: String }) editLabel = 'Edit';\n @property({ type: String }) editingLabel = 'Editing';\n @property({ type: Boolean }) enabled = true;\n\n render() {\n return html`\n <div class=\"flex gap-2 items-center justify-between\">\n <div class=\"flex items-center gap-0.5 min-w-0\">\n ${this.valid && this.enabled\n ? html`\n <axebow-icon\n iconName=\"${this.collapsed ? 'expand_all' : 'collapse_all'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n clickable\n class=\"shrink-0\"\n @click=${this._handleToggle}\n ></axebow-icon>\n `\n : ''}\n <h5\n class=\"my-2 min-w-0 flex-1 truncate text-base uppercase ${this.enabled\n ? 'font-semibold'\n : 'font-normal text-(--axebow-gray)'}\"\n >\n STEP ${this.stepNumber}: ${this.stepTitle}\n </h5>\n ${this.valid && this.enabled && !this.isEditing\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"check_circle\"\n iconColor=\"var(--axebow-success)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n <div class=\"flex items-center gap-2 shrink-0\">\n ${this.isEditing\n ? html`<span class=\"w-11.25 h-4.25 shrink-0 text-base text-(--axebow-gray)\">${this.editingLabel}</span>`\n : ''}\n ${this.enabled && this.valid && this.canEdit && !this.isEditing\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer\"\n title=\"${this.editLabel}\"\n @click=${this._handleEdit}\n >\n <axebow-icon iconName=\"edit_square\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private _handleToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, composed: true }));\n }\n\n private _handleEdit() {\n this.dispatchEvent(new CustomEvent('edit', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport './axebow-summary-step-header.js';\n\n@customElement('axebow-summary-step')\nexport class AxebowSummaryStep extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Number }) stepNumber!: number;\n @property({ type: String }) stepTitle = '';\n @property({ type: Boolean }) valid = false;\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) visible = false;\n @property({ type: Boolean }) isEditing = false;\n /** Whether the user has reached this step yet. Unreached steps still render\n * their title and divider, just greyed out and without the expand affordance. */\n @property({ type: Boolean }) enabled = true;\n\n render() {\n if (!this.visible) return html``;\n\n return html`\n <axebow-summary-step-header\n .stepNumber=${this.stepNumber}\n .stepTitle=${this.stepTitle}\n .valid=${this.valid}\n .collapsed=${this.collapsed}\n .isEditing=${this.isEditing}\n .enabled=${this.enabled}\n @toggle=${this._handleToggle}\n @edit=${this._handleEdit}\n ></axebow-summary-step-header>\n ${!this.collapsed && this.enabled\n ? html`\n <div class=\"step-summary-body mt-2\">\n <slot></slot>\n </div>\n `\n : ''}\n <sl-divider></sl-divider>\n `;\n }\n\n private _handleToggle() {\n if (!this.enabled) return;\n this.dispatchEvent(\n new CustomEvent('toggle-step', {\n detail: { step: this.stepNumber },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleEdit() {\n this.dispatchEvent(\n new CustomEvent('edit-step', {\n detail: { step: this.stepNumber },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/card/card.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\n\n@customElement('axebow-summary-card')\nexport class AxebowSummaryCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n height: 100%;\n }\n sl-card {\n --border-color: transparent !important;\n border: none !important;\n }\n sl-card::part(base) {\n width: 100%;\n height: 100%;\n }\n sl-card::part(body) {\n height: 100%;\n }\n `,\n ];\n\n @property({ type: String }) title = 'Summary';\n @property({ type: String }) cardWidth = '24.125rem';\n @property({ type: String }) cardHeight = '';\n\n @state() isSummaryOpen = true;\n\n render() {\n return html`\n <div\n class=\"w-full lg:w-(--card-width) lg:sticky static top-25 h-auto ${this.cardHeight\n ? 'lg:min-h-(--card-height)'\n : 'lg:min-h-[calc(100vh-6.25rem)]'} rounded-md z-10 transition-all duration-300\"\n style=\"--card-width: ${this.cardWidth}; --card-height: ${this.cardHeight};\"\n >\n <sl-card\n class=\"w-full h-full shadow-none border-t border-l-0 border-r-0 border-b-0 rounded-none lg:shadow lg:border lg:rounded-md\"\n >\n <div class=\"h-full flex flex-col\">\n ${this._renderHeader()}\n <sl-divider></sl-divider>\n <div class=\"${this.isSummaryOpen ? '' : 'hidden'} lg:block flex-1 mt-4\">\n <slot></slot>\n </div>\n </div>\n </sl-card>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"flex items-center justify-between lg:cursor-default cursor-pointer\">\n <div class=\"flex-1 flex items-center justify-between gap-2\" @click=\"${this._toggleMobileSummary}\">\n <div class=\"flex items-center gap-2\">\n <h4 class=\"text-xl font-semibold text-(--axebow-primary)\">${this.title}</h4>\n <axebow-icon\n class=\"lg:hidden\"\n iconName=\"${this.isSummaryOpen ? 'keyboard_arrow_up' : 'keyboard_arrow_down'}\"\n ></axebow-icon>\n </div>\n </div>\n <div class=\"flex items-center gap-2\">\n <slot name=\"header-actions\"></slot>\n </div>\n </div>\n `;\n }\n\n private _toggleMobileSummary() {\n if (window.innerWidth < 1024) {\n this.isSummaryOpen = !this.isSummaryOpen;\n }\n }\n\n public scrollToBottom() {\n const scrollContainers = this.shadowRoot?.querySelectorAll('.overflow-y-auto');\n scrollContainers?.forEach((container) => {\n container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });\n });\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\n\nexport interface SummaryLimitsData {\n cpu: { max: number; min: number };\n memory: { max: number; min: number };\n volatileStorage: { max: number; min: number };\n nonReplicatedStorage: { max: number; min: number };\n persistentStorage: { max: number; min: number };\n}\n\nexport interface SummaryLimitsLabels {\n hardLimits: string;\n softLimits: string;\n vcpus: string;\n memory: string;\n volatile: string;\n nonReplicated: string;\n persistent: string;\n}\n\n@customElement('axebow-summary-limits')\nexport class AxebowSummaryLimits extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Object }) limits!: SummaryLimitsData;\n @property({ type: Array }) supportedStorage: string[] = [];\n @property({ type: Object }) labels!: SummaryLimitsLabels;\n\n private renderSection(title: string, limitKey: 'max' | 'min') {\n return html`\n <div class=\"w-full flex flex-col gap-2\">\n <p class=\"font-semibold text-base m-0\">${title}</p>\n <div class=\"flex gap-1.5\">\n <div class=\"w-41 h-4.25 text-base\">\n ${this.labels.vcpus}: <span class=\"text-(--axebow-gray)\">${this.limits.cpu[limitKey]}</span>\n </div>\n <div class=\"w-41 h-4.25 text-base\">\n ${this.labels.memory} <span class=\"text-(--axebow-gray)\">${this.limits.memory[limitKey]} GB</span>\n </div>\n </div>\n ${this.supportedStorage.includes('volatile')\n ? html`\n <p class=\"text-base m-0\">\n ${this.labels.volatile}:\n <span class=\"text-(--axebow-gray)\">${this.limits.volatileStorage[limitKey]} GB</span>\n </p>\n `\n : ''}\n ${this.supportedStorage.includes('nonReplicated')\n ? html`\n <p class=\"text-base m-0\">\n ${this.labels.nonReplicated}:\n <span class=\"text-(--axebow-gray)\">${this.limits.nonReplicatedStorage[limitKey]} GB</span>\n </p>\n `\n : ''}\n ${this.supportedStorage.includes('persistent')\n ? html`\n <p class=\"text-base m-0\">\n ${this.labels.persistent}:\n <span class=\"text-(--axebow-gray)\">${this.limits.persistentStorage[limitKey]} GB</span>\n </p>\n `\n : ''}\n </div>\n `;\n }\n\n render() {\n if (!this.limits || !this.labels) return html``;\n\n return html`\n ${this.renderSection(this.labels.hardLimits, 'max')}\n <sl-divider></sl-divider>\n ${this.renderSection(this.labels.softLimits, 'min')}\n `;\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface SummaryFlavorsLabels {\n workload: string;\n runtimePlane: string;\n numberOfVms: string;\n controlPlane: string;\n highAvailable: string;\n selectedFlavor: string;\n storage: string;\n volatile: string;\n nonReplPersistent: string;\n persistentReplicated: string;\n yes: string;\n no: string;\n}\n\n@customElement('axebow-summary-flavors')\nexport class AxebowSummaryFlavors extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Object }) flavors: Record<string, string[]> | undefined;\n @property({ type: Object }) nodes: { max?: number; min?: number } | undefined;\n @property({ type: Boolean }) highAvailable: boolean | undefined;\n @property({ type: Boolean }) autoscale: boolean | undefined;\n @property({ type: Array }) supportedStorage: string[] = [];\n @property({ type: Boolean }) hasFlavors: boolean = true;\n @property({ type: Object }) labels!: SummaryFlavorsLabels;\n\n render() {\n if (!this.labels) return html``;\n\n return html`\n ${this.hasFlavors ||\n this.nodes ||\n this.highAvailable !== undefined ||\n this.autoscale !== undefined ||\n this.supportedStorage.some((s) => (this.flavors as Record<string, string[]>)?.[s]?.[0])\n ? html`\n <div class=\"flex w-full gap-[2%]\">\n <div class=\"flex-1 flex flex-col gap-2\">\n <p><strong>${this.labels.workload}</strong></p>\n ${this.hasFlavors && this.flavors?.small?.[0] ? html`<p>${this.labels.runtimePlane}</p>` : ''}\n <p>${this.labels.numberOfVms}</p>\n ${this.hasFlavors && this.flavors?.medium?.[0] ? html`<p>${this.labels.controlPlane}</p>` : ''}\n ${this.highAvailable !== undefined ? html`<p>${this.labels.highAvailable}</p>` : ''}\n </div>\n <div class=\"flex-1 flex flex-col gap-2\">\n <p><strong>${this.labels.selectedFlavor}</strong></p>\n ${this.hasFlavors && this.flavors?.small?.[0]\n ? html`<p><strong class=\"text-(--axebow-primary)\">${this.flavors?.small?.[0]}</strong></p>`\n : ''}\n <p><strong class=\"text-(--axebow-primary)\">${this.nodes?.max || '0'}</strong></p>\n\n ${this.hasFlavors && this.flavors?.medium?.[0]\n ? html`<p><strong class=\"text-(--axebow-primary)\">${this.flavors?.medium?.[0]}</strong></p>`\n : ''}\n ${this.highAvailable !== undefined\n ? html`<p>\n <strong class=\"text-(--axebow-primary)\"\n >${this.highAvailable ? this.labels.yes : this.labels.no}</strong\n >\n </p>`\n : ''}\n </div>\n </div>\n ${this.supportedStorage.some((s) => (this.flavors as Record<string, string[]>)?.[s]?.[0])\n ? html`\n <div class=\"flex w-full gap-[2%] mt-2\">\n <div class=\"flex-1 flex flex-col gap-2\">\n <p><strong>${this.labels.storage}</strong></p>\n ${this.supportedStorage.includes('volatile') && this.flavors?.volatile?.[0]\n ? html`<p>${this.labels.volatile}</p>`\n : ''}\n ${this.supportedStorage.includes('nonReplicated') && this.flavors?.nonReplicated?.[0]\n ? html`<p>${this.labels.nonReplPersistent}</p>`\n : ''}\n ${this.supportedStorage.includes('persistent') && this.flavors?.persistent?.[0]\n ? html`<p>${this.labels.persistentReplicated}</p>`\n : ''}\n </div>\n <div class=\"flex-1 flex flex-col gap-2\">\n <p><strong>${this.labels.selectedFlavor}</strong></p>\n ${this.supportedStorage.includes('volatile') && this.flavors?.volatile?.[0]\n ? html`<p>\n <strong class=\"text-(--axebow-primary)\">${this.flavors?.volatile?.[0]}</strong>\n </p>`\n : ''}\n ${this.supportedStorage.includes('nonReplicated') && this.flavors?.nonReplicated?.[0]\n ? html`<p>\n <strong class=\"text-(--axebow-primary)\">${this.flavors?.nonReplicated?.[0]}</strong>\n </p>`\n : ''}\n ${this.supportedStorage.includes('persistent') && this.flavors?.persistent?.[0]\n ? html`<p>\n <strong class=\"text-(--axebow-primary)\">${this.flavors?.persistent?.[0]}</strong>\n </p>`\n : ''}\n </div>\n </div>\n `\n : ''}\n `\n : ''}\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('deploy-modal-header')\nexport class DeployModalHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 76.125rem;\n height: 7.6875rem;\n }\n `,\n ];\n\n private _onClose() {\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n render() {\n return html`\n <div\n class=\"w-full h-full box-border pt-4 pr-4 pb-3.5 pl-5 border-b border-solid border-(--axebow-light-gray) flex items-start justify-between gap-4 overflow-hidden\"\n >\n <div class=\"flex-1 min-w-0\">\n <slot></slot>\n </div>\n <div class=\"w-6 h-6 shrink-0 flex items-center justify-center cursor-pointer\" @click=${this._onClose}>\n <axebow-icon iconName=\"cancel\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('deploy-modal-footer')\nexport class DeployModalFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 76.125rem;\n height: 4.5rem;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"w-full h-full box-border pt-3 pr-5 pb-4 pl-5 border-t border-solid border-(--axebow-light-gray) flex items-center justify-between gap-4\"\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport './parts/deploy-modal-header.js';\nimport './parts/deploy-modal-footer.js';\n\n@customElement('deploy-modal-component')\nexport class DeployModalComponent extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n .content-scroll {\n scrollbar-gutter: stable;\n }\n ::-webkit-scrollbar {\n width: 0.625rem;\n height: 0.625rem;\n }\n ::-webkit-scrollbar-track {\n background: transparent;\n border: none;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #dbdde4;\n border: none;\n border-radius: 8.854375rem;\n min-width: 12.8125rem;\n min-height: 12.8125rem;\n }\n `,\n ];\n\n @property({ type: String }) width = '76.1875rem';\n @property({ type: String }) height = '44.875rem';\n\n render() {\n return html`\n <div class=\"flex flex-col box-border overflow-hidden\" style=\"width:${this.width};height:${this.height};\">\n <slot name=\"header\"></slot>\n <div class=\"content-scroll flex-1 min-h-0 overflow-y-auto overflow-x-hidden pt-6 pr-4.5 pb-6 pl-4\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../deploy-modal-component/deploy-modal-component.js';\n\n@customElement('deploy-page-body')\nexport class DeployPageBody extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n render() {\n return html`\n <deploy-modal-component width=\"73.1875rem\" height=\"48.1875rem\">\n <slot></slot>\n </deploy-modal-component>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../deploy-modal-component/deploy-modal-component.js';\n\n@customElement('custom-home-page-body')\nexport class CustomHomePageBody extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n render() {\n return html`\n <deploy-modal-component width=\"73.5rem\" height=\"66.270625rem\">\n <slot></slot>\n </deploy-modal-component>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { css, html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-status')\nexport class AxebowStatus extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n width: 100%;\n }\n `\n ];\n\n @property({ type: Boolean }) showTrash = false;\n @property({ type: String }) statusText = 'Free';\n @property({ type: String }) statusColor = 'var(--axebow-success)';\n @property({ type: Boolean }) deleting = false;\n\n private _handleDelete(e: Event) {\n if (this.deleting) return;\n e.stopPropagation();\n this.dispatchEvent(new CustomEvent('delete', { bubbles: true, composed: true }));\n }\n\n render() {\n return html`\n <div class=\"flex items-center justify-between h-fit gap-2\">\n <div class=\"flex items-center gap-1.5\">\n ${this.statusColor ? html`<div class=\"h-2 w-2 rounded-full shrink-0\" style=\"background-color: ${this.statusColor};\"></div>` : \"\"}\n <span class=\"font-medium text-(--axebow-strong-gray)\">${this.statusText}</span>\n </div>\n ${this.showTrash ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-error) hover:text-(--axebow-gray) transition-colors ${this.deleting ? 'opacity-40 cursor-not-allowed' : ''}\"\n @click=${this._handleDelete}\n >\n <axebow-icon iconName=\"delete\" .iconColor=\"${this.deleting ? \"var(--axebow-gray)\" : \"currentColor\"}\" size=\"lg\"></axebow-icon>\n </button>\n ` : \"\"}\n </div>\n `;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type FormPanelFieldStyle = 'Placeholder' | 'Filled';\n\n@customElement('axebow-form-panel-field')\nexport class AxebowFormPanelField extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n width: 234px;\n position: relative;\n }\n .field-container {\n width: 100%;\n min-height: 51.33px;\n border-radius: 0.375rem;\n padding: 6px 8px;\n box-sizing: border-box;\n transition: border-color 0.2s ease, background-color 0.2s ease;\n }\n `,\n ];\n\n @property({ type: String }) styleVariant: FormPanelFieldStyle = 'Placeholder';\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) label = 'Field label';\n @property({ type: String }) value = '';\n @property({ type: Boolean }) mandatory = true;\n @property({ type: Boolean }) showDropdown = false;\n @property({ type: Boolean }) showCloseIcon = false;\n @property({ type: String }) placeholderCopy = 'Placeholder (examples)';\n @property({ type: Boolean }) showActionIcon = false;\n @property({ type: String }) actionIcon = 'content_copy';\n @property({ type: String }) copyValue = '';\n @property({ type: Boolean }) showSecondaryActionIcon = false;\n @property({ type: String }) secondaryActionIcon = 'open_in_new';\n\n /** Array of dropdown options (vector of strings) */\n @property({ type: Array }) options: string[] = [];\n\n @state() private _isDropdownOpen = false;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('click', this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this._isDropdownOpen && !e.composedPath().includes(this)) {\n this._isDropdownOpen = false;\n }\n };\n\n private _handleFocus(_e: Event) {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('focus', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleBlur(_e: Event) {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('blur', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleInput(e: Event) {\n if (this.disabled) return;\n const target = e.target as HTMLInputElement;\n this.value = target.value;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleActionClick(e: Event) {\n e.stopPropagation();\n const textToCopy = this.copyValue !== undefined && this.copyValue !== '' ? this.copyValue : this.value;\n if (textToCopy) {\n navigator.clipboard.writeText(textToCopy);\n }\n this.dispatchEvent(\n new CustomEvent('action-click', {\n detail: { value: textToCopy },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleSecondaryActionClick(e: Event) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent('secondary-action-click', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleCloseClick(e: Event) {\n e.stopPropagation();\n this.value = '';\n this.dispatchEvent(\n new CustomEvent('close-click', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleDropdownClick(e: Event) {\n e.stopPropagation();\n if (this.disabled) return;\n if (this.options && this.options.length > 0) {\n this._isDropdownOpen = !this._isDropdownOpen;\n }\n this.dispatchEvent(\n new CustomEvent('dropdown-click', {\n detail: { isOpen: this._isDropdownOpen },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _selectOption(opt: string, e: Event) {\n e.stopPropagation();\n this.value = opt;\n this._isDropdownOpen = false;\n\n this.dispatchEvent(\n new CustomEvent('select', {\n detail: { value: opt },\n bubbles: true,\n composed: true,\n })\n );\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: opt },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n const isFilled = (this.styleVariant && this.styleVariant.toLowerCase() === 'filled') || !!this.value;\n const bgClass = this.disabled\n ? 'bg-(--axebow-base) border border-solid border-(--axebow-border-gray)'\n : 'bg-white border border-solid border-(--axebow-border-gray) focus-within:border-(--axebow-tertiary)';\n const textColor = this.disabled\n ? 'text-(--axebow-gray)'\n : isFilled\n ? 'text-(--axebow-strong-gray)'\n : 'text-(--axebow-gray)';\n\n return html`\n <div class=\"relative w-full\">\n <!-- Field Container -->\n <div\n class=\"field-container border flex items-center justify-between gap-2 ${bgClass} ${this.showDropdown && !this.disabled ? 'cursor-pointer' : ''}\"\n @click=${this.showDropdown ? this._handleDropdownClick : null}\n >\n <div class=\"flex flex-col justify-center flex-1 min-w-0\">\n <!-- Top Label -->\n <div class=\"flex items-center text-xs text-(--axebow-gray) leading-tight select-none\">\n ${this.mandatory ? html`<span class=\"text-(--axebow-error) font-bold mr-0.5\">*</span>` : ''}\n <span class=\"truncate\">${this.label}</span>\n </div>\n\n <!-- Value / Input -->\n <input\n type=\"text\"\n class=\"w-full bg-transparent border-0 p-0 text-sm font-normal ${textColor} focus:outline-none truncate\"\n .value=${this.value}\n placeholder=${this.placeholderCopy}\n ?disabled=${this.disabled}\n @input=${this._handleInput}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n />\n </div>\n\n <!-- Action Icons Suffix -->\n <div class=\"flex items-center gap-1 shrink-0\">\n ${this.showSecondaryActionIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleSecondaryActionClick}\n >\n <axebow-icon iconName=${this.secondaryActionIcon} iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${this.showActionIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleActionClick}\n >\n <axebow-icon iconName=${this.actionIcon} iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${this.showCloseIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-gray) hover:text-black transition-colors\"\n @click=${this._handleCloseClick}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${this.showDropdown\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleDropdownClick}\n >\n <axebow-icon\n iconName=\"keyboard_arrow_down\"\n iconColor=\"currentColor\"\n size=\"xl\"\n class=\"transition-transform duration-200 ${this._isDropdownOpen ? 'rotate-180' : ''}\"\n ></axebow-icon>\n </button>\n `\n : ''}\n </div>\n </div>\n\n <!-- Dropdown Menu Overlay -->\n ${this.showDropdown && this._isDropdownOpen && this.options && this.options.length > 0\n ? html`\n <div\n class=\"absolute left-0 top-full mt-1 w-full bg-white border border-solid border-(--axebow-border-gray) rounded-md shadow-lg z-50 max-h-48 overflow-y-auto py-1 box-border\"\n >\n ${this.options.map((opt) => {\n const isSelected = opt === this.value;\n return html`\n <div\n class=\"px-3 py-1.5 text-sm text-(--axebow-strong-gray) hover:bg-(--axebow-base) cursor-pointer transition-colors flex items-center justify-between ${isSelected ? 'font-semibold bg-(--axebow-base) text-(--axebow-tertiary)' : ''}\"\n @click=${(e: Event) => this._selectOption(opt, e)}\n >\n <span>${opt}</span>\n ${isSelected ? html`<axebow-icon iconName=\"check\" iconColor=\"var(--axebow-tertiary)\" size=\"sm\"></axebow-icon>` : ''}\n </div>\n `;\n })}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-form-panel-field': AxebowFormPanelField;\n }\n}\n","import tailwindCss from \"../../styles/tailwind.css?inline\";\nimport { LitElement, unsafeCSS, html } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport \"../axebow-icon/axebow-icon.js\";\nimport \"../axebow-status/axebow-status.js\";\nimport \"../axebow-form-panel-field/axebow-form-panel-field.js\";\nimport type {\n ResourceBoxFormItem,\n ResourceBoxFormItemMenuOption,\n} from \"./axebow-box-form.models.js\";\n\nexport * from \"./axebow-box-form.models.js\";\n\n@customElement(\"axebow-resource-box-form\")\nexport class AxebowResourceBoxForm extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) statusText = \"Free\";\n @property({ type: String }) statusColor = \"var(--axebow-success)\";\n @property({ type: Boolean }) showTrash = true;\n @property({ type: Boolean }) deleting = false;\n @property({ type: Array }) items: ResourceBoxFormItem[] = [];\n\n @state() private _openMenuId: string | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"click\", this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._closeMenu();\n }\n };\n\n private _copyToClipboard(text: string, e?: Event) {\n e?.stopPropagation();\n if (!text) return;\n navigator.clipboard.writeText(text);\n this.dispatchEvent(\n new CustomEvent(\"copy\", {\n detail: { text },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _openLink(url?: string, e?: Event) {\n e?.stopPropagation();\n if (!url) return;\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n this.dispatchEvent(\n new CustomEvent(\"link-click\", {\n detail: { url },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _handleDelete() {\n this.dispatchEvent(\n new CustomEvent(\"delete\", { bubbles: true, composed: true }),\n );\n }\n\n private _downloadFile(content: string, fileName: string) {\n if (!content) return;\n const blob = new Blob([content], { type: \"text/plain\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = fileName || \"file.txt\";\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n private _closeMenu() {\n this._openMenuId = null;\n }\n\n private _toggleMenu(\n item: ResourceBoxFormItem,\n hasContent: boolean,\n e: Event,\n ) {\n e.stopPropagation();\n\n if (!item.menuId) return;\n\n if (!hasContent) {\n // If no content, find the first custom action and emit it, or emit a generic add event\n const customOption = item.menuOptions?.find(\n (opt) => opt.action === \"custom\" || !opt.action,\n );\n if (customOption) {\n this.dispatchEvent(\n new CustomEvent(\"item-menu-select\", {\n detail: { item, option: customOption },\n bubbles: true,\n composed: true,\n }),\n );\n }\n this._closeMenu();\n return;\n }\n\n if (this._openMenuId === item.menuId) {\n this._closeMenu();\n } else {\n this._openMenuId = item.menuId;\n }\n }\n\n private _handleMenuOption(\n item: ResourceBoxFormItem,\n option: ResourceBoxFormItemMenuOption,\n textToCopy: string,\n e: Event,\n ) {\n e.stopPropagation();\n this._closeMenu();\n\n const action = option.action || \"custom\";\n\n switch (action) {\n case \"copy\":\n this._copyToClipboard(textToCopy);\n break;\n case \"download\":\n this._downloadFile(textToCopy, option.fileName || \"file.txt\");\n break;\n case \"custom\":\n default:\n this.dispatchEvent(\n new CustomEvent(\"item-menu-select\", {\n detail: { item, option },\n bubbles: true,\n composed: true,\n }),\n );\n break;\n }\n }\n\n private _renderField(item: ResourceBoxFormItem) {\n const itemType = item.type || \"enabled\";\n const textToCopy =\n item.copyValue !== undefined ? item.copyValue : item.value;\n const hasMenu =\n !!item.menuOptions && item.menuOptions.length > 0 && !!item.menuId;\n const hasContent = !!textToCopy;\n const isMenuOpen = this._openMenuId === item.menuId && hasContent;\n\n if (itemType === \"text\") {\n return html`\n <div class=\"flex items-start justify-between gap-2 w-full relative pt-1\">\n <div class=\"flex flex-col gap-0.5 min-w-0 flex-1\">\n <span\n class=\"text-sm font-semibold text-(--axebow-strong-gray) leading-tight flex items-center gap-1 break-all\"\n >\n ${item.required\n ? html`<span class=\"text-(--axebow-error) font-bold\">* </span>`\n : \"\"}\n ${item.tag}\n </span>\n ${item.value\n ? html`<p\n class=\"m-0 text-sm text-(--axebow-gray) leading-snug break-all font-normal\"\n >\n ${item.value}\n </p>`\n : \"\"}\n </div>\n <div class=\"flex items-center gap-1 shrink-0 pt-0.5\">\n ${hasMenu\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Options\"\n @click=${(e: Event) => this._toggleMenu(item, hasContent, e)}\n >\n <axebow-icon\n iconName=\"add_circle\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n ${isMenuOpen\n ? html`\n <div\n class=\"absolute right-0 top-full mt-1 z-50 min-w-50 bg-white rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.1)] border border-solid border-(--axebow-border-gray) py-1.5 flex flex-col axebow-scrollbar\"\n style=\"max-height: 250px; overflow-y: auto;\"\n >\n ${item.menuOptions!.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2.5 px-4 py-2 cursor-pointer hover:bg-(--axebow-anti-flash-white) transition-colors\"\n @click=${(e: Event) =>\n this._handleMenuOption(\n item,\n option,\n textToCopy,\n e,\n )}\n >\n <axebow-icon\n .iconName=${option.icon}\n .iconColor=${option.variant === \"danger\"\n ? \"var(--axebow-error)\"\n : \"var(--axebow-primary)\"}\n size=\"md\"\n ></axebow-icon>\n <span\n class=\"text-sm font-medium ${option.variant ===\n \"danger\"\n ? \"text-(--axebow-error)\"\n : \"text-(--axebow-primary)\"}\"\n >\n ${option.label}\n </span>\n </div>\n `,\n )}\n </div>\n `\n : \"\"}\n `\n : item.canCopy\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Copy\"\n @click=${(e: Event) => this._copyToClipboard(textToCopy, e)}\n >\n <axebow-icon\n iconName=\"content_copy\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n `\n : \"\"}\n ${item.canLink && !hasMenu\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Open link\"\n @click=${(e: Event) =>\n this._openLink(item.linkHref || item.value, e)}\n >\n <axebow-icon\n iconName=\"open_in_new\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n `\n : \"\"}\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"relative w-full\">\n <axebow-form-panel-field\n class=\"w-full\"\n style=\"width: 100%;\"\n .label=${item.tag}\n .value=${item.value || \"\"}\n .copyValue=${item.copyValue !== undefined ? item.copyValue : \"\"}\n .mandatory=${Boolean(item.required)}\n ?disabled=${itemType === \"disabled\"}\n .showActionIcon=${Boolean(hasMenu || item.canCopy)}\n actionIcon=${hasMenu ? \"add_circle\" : \"content_copy\"}\n .showSecondaryActionIcon=${Boolean(item.canLink)}\n secondaryActionIcon=\"open_in_new\"\n .showDropdown=${Boolean(item.options && item.options.length > 0)}\n .options=${item.options || []}\n @focus=${(_e: CustomEvent) => {\n this.dispatchEvent(\n new CustomEvent(\"item-focus\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @blur=${(_e: CustomEvent) => {\n this.dispatchEvent(\n new CustomEvent(\"item-blur\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @change=${(e: CustomEvent) => {\n item.value = e.detail?.value ?? (e.target as any).value;\n this.dispatchEvent(\n new CustomEvent(\"item-change\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @action-click=${(e: Event) => {\n if (hasMenu) {\n this._toggleMenu(item, hasContent, e);\n } else {\n this._copyToClipboard(textToCopy, e);\n }\n }}\n @secondary-action-click=${(e: Event) =>\n this._openLink(item.linkHref || item.value, e)}\n ></axebow-form-panel-field>\n ${hasMenu && isMenuOpen\n ? html`\n <div\n class=\"absolute right-0 top-full mt-1 z-50 min-w-50 bg-white rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.1)] border border-solid border-(--axebow-border-gray) py-1.5 flex flex-col axebow-scrollbar\"\n style=\"max-height: 250px; overflow-y: auto;\"\n >\n ${item.menuOptions!.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2.5 px-4 py-2 cursor-pointer hover:bg-(--axebow-anti-flash-white) transition-colors\"\n @click=${(e: Event) =>\n this._handleMenuOption(item, option, textToCopy, e)}\n >\n <axebow-icon\n .iconName=${option.icon}\n .iconColor=${option.variant === \"danger\"\n ? \"var(--axebow-error)\"\n : \"var(--axebow-primary)\"}\n size=\"md\"\n ></axebow-icon>\n <span\n class=\"text-sm font-medium ${option.variant === \"danger\"\n ? \"text-(--axebow-error)\"\n : \"text-(--axebow-primary)\"}\"\n >\n ${option.label}\n </span>\n </div>\n `,\n )}\n </div>\n `\n : \"\"}\n </div>\n `;\n }\n\n render() {\n const isDeleting = this.deleting;\n const computedStatusColor = isDeleting\n ? \"var(--axebow-error)\"\n : this.statusColor;\n const borderClass = isDeleting\n ? \"border border-solid border-[var(--axebow-error)]\"\n : \"\";\n const disabledClass = isDeleting\n ? \"pointer-events-none opacity-70 select-none\"\n : \"\";\n\n return html`\n <div\n class=\"flex flex-col gap-3 w-70.5 p-4 bg-white rounded-md ${borderClass} ${disabledClass} axebow-shadow-hover box-border\"\n >\n <!-- Top Status Header -->\n <axebow-status\n .statusText=${this.statusText}\n .statusColor=${computedStatusColor}\n ?showTrash=${this.showTrash}\n ?deleting=${this.deleting}\n @delete=${this._handleDelete}\n ></axebow-status>\n\n <!-- Form Fields List -->\n <div class=\"flex flex-col gap-2.5 w-full\">\n ${this.items && this.items.length > 0\n ? this.items.map((item) =>\n this._renderField(\n isDeleting ? { ...item, type: \"disabled\" } : item,\n ),\n )\n : html`\n <div\n class=\"p-3 border border-dashed border-(--axebow-border-gray) rounded-md text-center text-(--axebow-gray) text-xs\"\n >\n No items configured.\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"axebow-resource-box-form\": AxebowResourceBoxForm;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-manage-hyperlinks')\nexport class AxebowManageHyperlinks extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n button:hover:not(:disabled) {\n color: var(--axebow-gray) !important;\n }\n `\n ];\n\n @property({ type: String }) text: string = '';\n @property({ type: String }) icon: string = '';\n @property({ type: String }) color: string = 'var(--axebow-tertiary)';\n @property({ type: String }) iconColor: string = '';\n @property({ type: Boolean }) disabled: boolean = false;\n\n private _handleClick(e: MouseEvent) {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n this.dispatchEvent(new CustomEvent('hyperlink-click', {\n bubbles: true,\n composed: true,\n detail: { text: this.text }\n }));\n }\n\n render() {\n const buttonColor = this.color || 'var(--axebow-tertiary)';\n const iconColorProp = this.iconColor || 'currentColor';\n\n return html`\n <button\n type=\"button\"\n ?disabled=${this.disabled}\n @click=${this._handleClick}\n style=\"color: ${buttonColor};\"\n class=\"inline-flex items-center gap-1.5 bg-transparent border-none p-0 cursor-pointer font-semibold text-sm focus:outline-none transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <span>${this.text}</span>\n ${this.icon ? html`<axebow-icon iconName=\"${this.icon}\" iconColor=\"${iconColorProp}\"></axebow-icon>` : ''}\n </button>`;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-manage-hyperlinks/axebow-manage-hyperlinks.js';\n\nexport interface BoxSectionHyperlink {\n id?: string;\n text: string;\n icon?: string;\n color?: string;\n disabled?: boolean;\n onClick?: () => void;\n}\n\n@customElement('axebow-box-section')\nexport class AxebowBoxSection extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) title = '';\n @property({ type: Array }) hyperlinks: BoxSectionHyperlink[] = [];\n\n // Fallback single hyperlink properties for convenience\n @property({ type: Boolean }) showHyperlink = false;\n @property({ type: String }) hyperlinkText = '';\n @property({ type: String }) hyperlinkIcon = '';\n @property({ type: String }) hyperlinkColor = '';\n @property({ type: Boolean }) hyperlinkDisabled = false;\n\n private _handleItemClick(item: BoxSectionHyperlink, index: number) {\n if (item.onClick) {\n item.onClick();\n }\n this.dispatchEvent(new CustomEvent('hyperlink-click', {\n bubbles: true,\n composed: true,\n detail: { item, index, text: item.text }\n }));\n }\n\n render() {\n const itemsToRender: BoxSectionHyperlink[] = this.hyperlinks.length > 0\n ? this.hyperlinks\n : (this.showHyperlink || Boolean(this.hyperlinkText))\n ? [{\n text: this.hyperlinkText,\n icon: this.hyperlinkIcon,\n color: this.hyperlinkColor,\n disabled: this.hyperlinkDisabled\n }]\n : [];\n\n return html`\n <div class=\"flex flex-col rounded-md p-5 gap-4 bg-white\">\n <div class=\"w-full flex justify-between items-center border-b border-solid border-[#DBDDE4] pb-3 gap-2\">\n <span class=\"font-semibold uppercase text-(--axebow-primary)\">${this.title}</span>\n <slot name=\"hyperlink\">\n ${itemsToRender.length > 0\n ? html`\n <div class=\"flex items-center gap-4\">\n ${itemsToRender.map((item, index) => html`\n <axebow-manage-hyperlinks\n text=\"${item.text}\"\n icon=\"${item.icon}\"\n color=\"${item.color ?? ''}\"\n ?disabled=${Boolean(item.disabled)}\n @hyperlink-click=${() => this._handleItemClick(item, index)}\n ></axebow-manage-hyperlinks>\n `)}\n </div>\n `\n : ''\n }\n </slot>\n </div>\n <slot></slot>\n </div>`;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-copy-box')\nexport class AxebowCopyBox extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) value = '';\n @property({ type: String }) copyValue = '';\n @property({ type: String }) iconName = 'content_copy';\n @property({ type: String }) size = 'lg';\n @property({ type: Boolean }) disabled = false;\n\n @state() private _copied = false;\n\n private async _handleCopy(e: MouseEvent) {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n let textToCopy = this.copyValue || this.value;\n\n if (!textToCopy) {\n const slot = this.shadowRoot?.querySelector('slot');\n if (slot) {\n const nodes = slot.assignedNodes({ flatten: true });\n textToCopy = nodes.map(n => n.textContent ?? '').join('').trim();\n }\n if (!textToCopy) {\n textToCopy = this.textContent?.trim() ?? '';\n }\n }\n\n if (textToCopy) {\n try {\n await navigator.clipboard.writeText(textToCopy);\n this._copied = true;\n setTimeout(() => {\n this._copied = false;\n }, 2000);\n } catch (err) {\n console.error('Failed to copy text:', err);\n }\n }\n\n this.dispatchEvent(new CustomEvent('copy', {\n bubbles: true,\n composed: true,\n detail: { value: textToCopy }\n }));\n }\n\n render() {\n const iconToShow = this._copied ? 'check' : this.iconName;\n\n return html`\n <div\n @click=${this._handleCopy}\n class=\"h-10 w-10 bg-(--axebow-tertiary) hover:bg-(--axebow-gray) rounded-r-md flex items-center justify-center cursor-pointer transition-colors select-none ${this.disabled ? 'opacity-50 cursor-not-allowed pointer-events-none' : ''}\"\n title=${this._copied ? 'Copied!' : 'Copy'}\n >\n <axebow-icon iconName=\"${iconToShow}\" iconColor=\"white\" size=\"${this.size}\"></axebow-icon>\n <slot class=\"hidden\"></slot>\n </div>\n `;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-tab-selector/axebow-tab-selector.js';\n\nexport interface TabsSubmenuTab {\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Submenu navigation tab bar using axebow-tab-selector with variant=\"sections-tab\".\n * Active: tertiary color text + 2px bottom border.\n * Hover: tertiary color text.\n * Inactive: secondary/gray text + 1px light gray bottom border.\n * Emits 'tab-change' with { index } on selection.\n */\n@customElement('axebow-tabs-submenu')\nexport class AxebowTabsSubmenu extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: Array }) tabs: TabsSubmenuTab[] = [];\n @property({ type: Number }) activeTab = 0;\n @property({ type: Boolean }) disabled = false;\n /** When true (default) tabs fill the full bar. When false they are compact at the start. */\n @property({ type: Boolean }) stretch = true;\n\n private _handleTabChange(e: CustomEvent<{ index: number }>) {\n this.activeTab = e.detail.index;\n this.dispatchEvent(new CustomEvent('tab-change', {\n bubbles: true,\n composed: true,\n detail: e.detail\n }));\n }\n\n render() {\n return html`\n <axebow-tab-selector\n variant=\"sections-tab\"\n .activeTab=${this.activeTab}\n ?disabled=${this.disabled}\n .stretch=${this.stretch}\n @tab-change=${this._handleTabChange}\n >\n ${this.tabs.map((tab, i) => html`\n <span slot=\"tab-label-${i}\" ?disabled=${tab.disabled ?? false}>\n ${tab.label}\n </span>\n `)}\n </axebow-tab-selector>\n `;\n }\n}","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/progress-bar/progress-bar.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-progress-bar')\nexport class AxebowProgressBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-progress-bar {\n flex: 1;\n max-width: 120px;\n }\n :host([compact]) sl-progress-bar {\n flex: none;\n width: 3.75rem;\n max-width: 3.75rem;\n }\n `,\n ];\n\n @property({ type: Number }) current = 0;\n @property({ type: Number }) max = 100;\n @property({ type: Boolean, reflect: true }) compact = false;\n\n private _percentage(): number {\n return Math.min((this.current / this.max) * 100, 100);\n }\n\n private _indicatorColor(): string {\n const pct = (this.current / this.max) * 100;\n if (pct < 70) return 'var(--axebow-tertiary)';\n if (pct < 90) return 'var(--axebow-warning)';\n return 'var(--axebow-error)';\n }\n\n render() {\n return html`\n <div class=\"flex items-center ${this.compact ? 'gap-1.25' : 'gap-2 min-w-50'}\">\n <span class=\"${this.compact ? 'text-base' : 'text-sm min-w-10 text-right'} text-(--axebow-gray)\"\n >${this.current.toFixed(2)}</span\n >\n <sl-progress-bar\n style=\"--height: ${this.compact ? '0.6875rem' : '10px'}; --indicator-color: ${this._indicatorColor()};\"\n value=\"${this._percentage()}\"\n ></sl-progress-bar>\n <span class=\"${this.compact ? 'text-base' : 'text-sm min-w-10'} text-(--axebow-gray)\"\n >${this.max.toFixed(2)}</span\n >\n </div>\n `;\n }\n}\n","import { LitElement, html, unsafeCSS, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-usage-tooltip')\nexport class AxebowUsageTooltip extends LitElement {\n @property({ type: Object }) usage!: Usage;\n @property({ type: String }) color = 'var(--axebow-primary)';\n @property({ type: String }) storageLabel = '';\n @property({ type: String }) volatileLabel = '';\n @property({ type: String }) nonRepPersLabel = '';\n @property({ type: String }) persistentRepLabel = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n axebow-tooltip::part(body) {\n background-color: var(--axebow-white);\n color: var(--axebow-primary);\n padding: 1rem;\n border: 3px solid var(--axebow-table-border);\n width: 300px;\n }\n sl-divider.dotted-divider {\n border-top: 1.5px dashed var(--axebow-light-gray);\n }\n `,\n ];\n\n render() {\n if (!this.usage) return null;\n\n const { current, limit } = this.usage;\n return html`\n <axebow-tooltip placement=\"right\">\n <div slot=\"content\" class=\"mt-3\">\n <div class=\"flex justify-between items-center\">\n <axebow-icon iconName=\"database\" size=\"xl\"></axebow-icon>\n <span>${this.storageLabel} </span>\n <span class=\"tooltip-value\"> ${current.storage} / ${limit.storage.max} GB</span>\n </div>\n <sl-divider class=\"dotted-divider\"></sl-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.volatileLabel} </span>\n <span class=\"tooltip-value\"> ${current.volatileStorage} / ${limit.volatileStorage.max} GB</span>\n </div>\n <sl-divider class=\"dotted-divider\"></sl-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.nonRepPersLabel} </span>\n <span class=\"tooltip-value\"> ${current.nonReplicatedStorage} / ${limit.nonReplicatedStorage.max} GB</span>\n </div>\n <sl-divider class=\"dotted-divider\"></sl-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.persistentRepLabel} </span>\n <span class=\"tooltip-value\"> ${current.persistentStorage} / ${limit.persistentStorage.max} GB</span>\n </div>\n </div>\n <axebow-icon iconName=\"info\" size=\"md\" class=\"cursor-pointer\" iconColor=\"${this.color}\"></axebow-icon>\n </axebow-tooltip>\n `;\n }\n}\n","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-progress-bar/axebow-progress-bar.js';\nimport '../axebow-usage-tooltip/axebow-usage-tooltip.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface TableProgress {\n current: number;\n max: number;\n}\n\nexport interface TableInstanceContainer {\n name: string;\n statusLabel: string;\n isReady: boolean;\n cpu: TableProgress;\n memory: TableProgress;\n}\n\nexport interface TableInstance {\n id: string;\n name: string;\n statusLabel: string;\n isRunning: boolean;\n cpu: TableProgress;\n memory: TableProgress;\n storageLabel: string;\n usage: Usage;\n containers: TableInstanceContainer[];\n}\n\nexport interface StorageTooltipLabels {\n storage: string;\n volatile: string;\n nonRepPers: string;\n persistentRep: string;\n}\n\n@customElement('axebow-instances-table')\nexport class AxebowInstancesTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .restart-button::part(base) {\n color: var(--axebow-tertiary);\n font-size: 0.875rem !important;\n }\n .restart-button::part(base):hover {\n color: var(--axebow-error);\n background-color: white;\n }\n .reboot-all-button::part(base) {\n color: var(--axebow-error);\n background-color: transparent;\n border-color: var(--axebow-error);\n }\n .reboot-all-button::part(base):hover {\n color: white;\n background-color: var(--axebow-error);\n border-color: var(--axebow-error);\n }\n `,\n ];\n\n @property({ attribute: false }) instances: TableInstance[] = [];\n @property({ type: String }) descriptionLabel = '';\n @property({ type: String }) noInstancesLabel = '';\n @property({ type: String }) colInstanceLabel = '';\n @property({ type: String }) colCpuLabel = '';\n @property({ type: String }) colMemoryLabel = '';\n @property({ type: String }) colStorageLabel = '';\n @property({ type: String }) colActionsLabel = '';\n @property({ type: String }) rebootLabel = '';\n @property({ type: String }) rebootAllLabel = '';\n @property({ attribute: false }) storageTooltipLabels!: StorageTooltipLabels;\n\n @state() private _expandedInstances: Set<string> = new Set();\n\n private _toggleInstance(instanceId: string) {\n if (this._expandedInstances.has(instanceId)) {\n this._expandedInstances.delete(instanceId);\n } else {\n this._expandedInstances.add(instanceId);\n }\n this.requestUpdate();\n }\n\n private _isInstanceExpanded(instanceId: string): boolean {\n return this._expandedInstances.has(instanceId);\n }\n\n private _requestReboot(instanceName: string | null) {\n this.dispatchEvent(\n new CustomEvent('reboot-request', { detail: { instanceName }, bubbles: true, composed: true })\n );\n }\n\n private _renderHeaderSeparator() {\n return html`<span class=\"w-px h-4 bg-(--axebow-gray) shrink-0\"></span>`;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"w-186.5 h-7.25 box-border flex items-center p-1.5 gap-1 bg-white\">\n <span class=\"w-48.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colInstanceLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-38.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colCpuLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-38.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colMemoryLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-25.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colStorageLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-25.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colActionsLabel}</span>\n </div>\n `;\n }\n\n private _renderStatusBadge(text: string, isPositive: boolean) {\n return html`\n <div\n class=\"w-16.5 h-4.75 box-border flex items-center justify-center rounded ${isPositive\n ? 'bg-(--axebow-success) text-white uppercase text-sm'\n : 'bg-red-100 text-red-800 text-base'}\"\n >\n ${text}\n </div>\n `;\n }\n\n private _renderProgressCell(progress: TableProgress) {\n return html`\n <div class=\"w-39.5 h-4.25 box-border\">\n <axebow-progress-bar compact current=\"${progress.current}\" max=\"${progress.max}\"></axebow-progress-bar>\n </div>\n `;\n }\n\n private _renderStorageCell(storageLabel: string, usage: Usage) {\n return html`\n <div class=\"w-25.25 h-4.25 box-border flex items-center gap-1.5\">\n <div class=\"w-12.75 h-4.25 box-border flex items-center text-base pl-4.25 shrink-0\">${storageLabel}</div>\n <div class=\"w-3.5 h-3.5 flex items-center justify-center pr-3.25 shrink-0\">\n <axebow-usage-tooltip\n .usage=${usage}\n storageLabel=${this.storageTooltipLabels.storage}\n volatileLabel=${this.storageTooltipLabels.volatile}\n nonRepPersLabel=${this.storageTooltipLabels.nonRepPers}\n persistentRepLabel=${this.storageTooltipLabels.persistentRep}\n ></axebow-usage-tooltip>\n </div>\n </div>\n `;\n }\n\n private _renderInstanceRow(instance: TableInstance) {\n return html`\n <div\n class=\"w-186.5 h-14 box-border flex items-center gap-1 p-1.5 border-t border-(--axebow-table-border) cursor-pointer\"\n @click=\"${() => this._toggleInstance(instance.id)}\"\n >\n <div class=\"w-48 h-10 box-border flex flex-col gap-1 text-(--axebow-tertiary)\">\n <div class=\"flex items-center gap-1 min-w-0\">\n <axebow-icon\n iconName=\"${this._isInstanceExpanded(instance.id) ? 'collapse_all' : 'expand_all'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n class=\"shrink-0\"\n ></axebow-icon>\n <span class=\"text-base truncate\">${instance.name}</span>\n </div>\n ${this._renderStatusBadge(instance.statusLabel, instance.isRunning)}\n </div>\n ${this._renderProgressCell(instance.cpu)} ${this._renderProgressCell(instance.memory)}\n ${this._renderStorageCell(instance.storageLabel, instance.usage)}\n <div class=\"w-25.5 h-4.25 box-border flex items-center\">\n <axebow-button\n class=\"restart-button\"\n variant=\"text\"\n fixedWidth=\"5.5625rem\"\n fixedHeight=\"1.0625rem\"\n @click=\"${(e: Event) => {\n e.stopPropagation();\n this._requestReboot(instance.name);\n }}\"\n >\n ${this.rebootLabel}\n </axebow-button>\n </div>\n </div>\n ${this._isInstanceExpanded(instance.id) && instance.containers.length > 0\n ? instance.containers.map(\n (container) => html`\n <div\n class=\"w-186.5 h-14 box-border flex items-center gap-1 p-1.5 border-t border-(--axebow-table-border)\"\n >\n <div class=\"w-48 h-10 box-border flex flex-col gap-1\">\n <div class=\"flex items-center gap-1 min-w-0\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\" class=\"shrink-0\"></axebow-icon>\n <span class=\"text-base truncate\">${container.name}</span>\n </div>\n ${this._renderStatusBadge(container.statusLabel, container.isReady)}\n </div>\n ${this._renderProgressCell(container.cpu)} ${this._renderProgressCell(container.memory)}\n <div class=\"w-25.25 h-4.25 box-border flex items-center text-base\">-</div>\n <div class=\"w-25.5 h-4.25 box-border flex items-center text-base\">-</div>\n </div>\n `\n )\n : ''}\n `;\n }\n\n render() {\n if (!this.instances.length) {\n return html`<p>${this.noInstancesLabel}</p>`;\n }\n\n return html`\n <p class=\"text-black mb-4\">${this.descriptionLabel}</p>\n <div class=\"w-full\">\n <div class=\"w-186.5 rounded-md overflow-hidden border border-black/10\">\n ${this._renderHeader()} ${this.instances.map((instance) => this._renderInstanceRow(instance))}\n </div>\n </div>\n <div class=\"flex justify-end mt-4\">\n <axebow-button variant=\"primary\" outlined class=\"reboot-all-button\" @click=\"${() => this._requestReboot(null)}\">\n ${this.rebootAllLabel}\n </axebow-button>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-usage-tooltip/axebow-usage-tooltip.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport type { StorageTooltipLabels } from '../axebow-instances-table/axebow-instances-table.js';\n\nexport interface TableEnvironment {\n name: string;\n cpu: number;\n memory: number;\n storageTotal: number;\n usage: Usage;\n}\n\nexport interface TableAccount {\n name: string;\n cpu: number;\n memory: number;\n storage: number;\n usage: Usage;\n environments: TableEnvironment[];\n}\n\n@customElement('axebow-tenants-table')\nexport class AxebowTenantsTable extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ attribute: false }) accounts: TableAccount[] = [];\n @property({ type: String }) noAccountsLabel = '';\n @property({ type: String }) colAccountLabel = '';\n @property({ type: String }) colVcpuLabel = '';\n @property({ type: String }) colMemoryLabel = '';\n @property({ type: String }) colStorageLabel = '';\n @property({ attribute: false }) storageTooltipLabels!: StorageTooltipLabels;\n\n @state() private _expandedAccounts: Set<string> = new Set();\n\n private _toggleAccount(accountName: string) {\n if (this._expandedAccounts.has(accountName)) {\n this._expandedAccounts.delete(accountName);\n } else {\n this._expandedAccounts.add(accountName);\n }\n this.requestUpdate();\n }\n\n private _isAccountExpanded(accountName: string): boolean {\n return this._expandedAccounts.has(accountName);\n }\n\n private _renderTooltip(usage: Usage) {\n return html`\n <axebow-usage-tooltip\n .usage=${usage}\n storageLabel=${this.storageTooltipLabels.storage}\n volatileLabel=${this.storageTooltipLabels.volatile}\n nonRepPersLabel=${this.storageTooltipLabels.nonRepPers}\n persistentRepLabel=${this.storageTooltipLabels.persistentRep}\n ></axebow-usage-tooltip>\n `;\n }\n\n render() {\n if (!this.accounts.length) {\n return html`<p>${this.noAccountsLabel}</p>`;\n }\n\n return html`\n <table class=\"w-full border-collapse bg-white rounded-md\">\n <thead>\n <tr>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colAccountLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colVcpuLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colMemoryLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colStorageLabel}</th>\n </tr>\n </thead>\n <tbody>\n ${this.accounts.map(\n (account) => html`\n <tr class=\"cursor-pointer\" @click=\"${() => this._toggleAccount(account.name)}\">\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md text-(--axebow-tertiary)\">\n ${this._isAccountExpanded(account.name)\n ? html`<axebow-icon\n iconName=\"collapse_all\"\n class=\"mr-1\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>`\n : html`<axebow-icon\n iconName=\"expand_all\"\n class=\"mr-1\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>`}\n ${account.name}\n </td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${account.cpu}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${account.memory}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n ${account.storage} ${this._renderTooltip(account.usage)}\n </td>\n </tr>\n ${this._isAccountExpanded(account.name)\n ? account.environments.map(\n (environment) => html`\n <tr>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" class=\"mr-1\" size=\"md\"></axebow-icon>\n <span>${environment.name}</span>\n </td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${environment.cpu}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${environment.memory}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n ${environment.storageTotal} ${this._renderTooltip(environment.usage)}\n </td>\n </tr>\n `\n )\n : ''}\n `\n )}\n </tbody>\n </table>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-expandable-card')\nexport class AxebowExpandableCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"box-border p-4 bg-white rounded-md shadow-sm border border-gray-200 overflow-hidden\">\n <slot></slot>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/spinner/spinner.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-undeploy-card')\nexport class AxebowUndeployCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) deletePrefix = '';\n @property({ type: String }) serviceName = '';\n @property({ type: String }) deleteSuffix = '';\n @property({ type: String }) warningPrefix = '';\n @property({ type: String }) warningBold = '';\n @property({ type: String }) confirmText = '';\n @property({ type: String }) confirmLabelPrefix = '';\n @property({ type: String }) confirmLabelHighlight = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) value = '';\n @property({ type: String }) buttonLabel = '';\n @property({ type: Boolean }) buttonDisabled = false;\n @property({ type: Boolean }) isSubmitting = false;\n @property({ type: String }) loadingLabel = '';\n\n private _handleInput(e: Event) {\n const target = e.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('confirm-input', { detail: { value: target.value }, bubbles: true, composed: true })\n );\n }\n\n private _handleConfirm() {\n this.dispatchEvent(new CustomEvent('confirm', { bubbles: true, composed: true }));\n }\n\n render() {\n return html`\n <div class=\"w-198.25 h-auto box-border bg-white rounded-md p-6 flex flex-col gap-8\">\n <div class=\"w-186.25 flex gap-4\">\n <div class=\"w-8 h-full flex flex-col items-start shrink-0\">\n <div class=\"w-8 h-8 shrink-0 flex items-center justify-center\">\n <axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"2rem\"></axebow-icon>\n </div>\n </div>\n <div class=\"flex-1 min-w-0 flex flex-col gap-6\">\n <div class=\"w-full\">\n <h2 class=\"m-0 text-[1.25rem] font-semibold text-black\">${this.title}</h2>\n </div>\n <div class=\"w-full flex flex-col gap-2\">\n <p class=\"m-0\">${this.deletePrefix} <strong>${this.serviceName}</strong> ${this.deleteSuffix}</p>\n <p class=\"m-0\">${this.warningPrefix} <strong>${this.warningBold}</strong></p>\n <p class=\"m-0\">${this.confirmText}</p>\n </div>\n </div>\n </div>\n <div class=\"w-186.25 flex items-end gap-4 pl-11.75 box-border\">\n <div class=\"w-102 flex flex-col gap-1\">\n <p class=\"m-0 text-sm\">\n ${this.confirmLabelPrefix} <span class=\"text-(--axebow-primary)\">${this.confirmLabelHighlight}</span>\n </p>\n <axebow-input\n controlType=\"input\"\n .value=${this.value}\n placeholder=${this.placeholder}\n .callback=${(e: Event) => this._handleInput(e)}\n ></axebow-input>\n </div>\n <axebow-button variant=\"danger\" .disabled=${this.buttonDisabled || this.isSubmitting} @click=${this._handleConfirm}>\n ${this.isSubmitting\n ? html`\n <div class=\"flex gap-1 items-center\">\n <sl-spinner style=\"--indicator-color: red;\"></sl-spinner>\n <p class=\"m-0\">${this.loadingLabel}</p>\n </div>\n `\n : this.buttonLabel}\n </axebow-button>\n </div>\n </div>\n `;\n }\n}\n","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-switch/axebow-switch.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/divider/divider.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ObservabilityLogFilter {\n options: string[];\n selected: string | null;\n}\n\n@customElement('axebow-observability-container')\nexport class AxebowObservabilityContainer extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-input::part(input) {\n font-size: 0.95rem;\n color: var(--axebow-strong-gray);\n background-color: #f3f4f6;\n }\n sl-input::part(base) {\n background-color: #f3f4f6;\n width: 100%;\n }\n .log-filter-dropdown {\n display: block;\n width: 100%;\n }\n .log-filter-dropdown::part(trigger) {\n display: block !important;\n width: 100% !important;\n }\n .log-filter-dropdown::part(panel) {\n width: 17rem !important;\n }\n sl-divider {\n height: 0.0625rem !important;\n border-top: none !important;\n background-color: var(--axebow-light-gray);\n margin-bottom: 0.90625rem !important;\n }\n `,\n ];\n\n @property({ type: String }) containerName = '';\n @property({ type: Boolean }) isLogsOn = true;\n @property({ type: Boolean }) isTerminalOn = false;\n @property({ type: String }) logsLabel = '';\n @property({ type: String }) logsOnLabel = '';\n @property({ type: String }) logsOffLabel = '';\n @property({ type: String }) terminalLabel = '';\n @property({ type: String }) terminalOnLabel = '';\n @property({ type: String }) terminalOffLabel = '';\n\n @property({ attribute: false }) logFilters: ObservabilityLogFilter[] = [];\n @property({ type: String }) logFilterTitle = '';\n @property({ type: String }) cleanFilterLabel = '';\n @property({ type: String }) addFilterLabel = '';\n @property({ type: String }) selectOptionLabel = '';\n @property({ type: String }) filterPlaceholder = '';\n @property({ type: String }) cleanHistoryLabel = '';\n\n @property({ type: Boolean }) followLogs = false;\n @property({ type: String }) autoScrollLabel = '';\n @property({ type: String }) autoScrollOnLabel = '';\n @property({ type: String }) autoScrollOffLabel = '';\n\n @property({ type: String }) logsTitle = '';\n @property({ type: String }) terminalTitle = '';\n @property({ type: String }) logsUrl = '';\n @property({ type: String }) terminalUrl = '';\n @property({ type: String }) logsIframeId = '';\n @property({ type: String }) terminalIframeId = '';\n\n render() {\n return html`\n <div class=\"w-full flex flex-col gap-4\">\n ${this._renderHeader()} ${this.isTerminalOn ? this._renderColumns() : this._renderStacked()}\n </div>\n `;\n }\n\n private _renderStacked() {\n return html` ${this.isLogsOn ? this._renderLogFilters() : null} ${this.isLogsOn ? this._renderLogsIframe() : null} `;\n }\n\n private _renderColumns() {\n return html`\n <div class=\"flex gap-4\">\n <div class=\"w-140.75 flex flex-col gap-4\">\n ${this.isLogsOn ? this._renderLogFilters() : null} ${this.isLogsOn ? this._renderLogsIframe() : null}\n </div>\n <div class=\"w-148.75\">${this._renderTerminalIframe()}</div>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"flex justify-between w-full border-b border-solid border-gray-200 pb-2 gap-4 items-center\">\n <h2 class=\"font-semibold text-lg text-ellipsis text-(--axebow-primary)\">${this.containerName}</h2>\n <div class=\"flex items-center gap-4\">\n ${this._renderToggle(\n this.logsLabel,\n this.isLogsOn,\n this.logsOnLabel,\n this.logsOffLabel,\n (checked) => this._dispatch('logs-toggle', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n ${this._renderToggle(\n this.terminalLabel,\n this.isTerminalOn,\n this.terminalOnLabel,\n this.terminalOffLabel,\n (checked) => this._dispatch('terminal-toggle', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"open_in_new\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._dispatch('open-in-new')}\n ></axebow-icon>\n </div>\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div\n class=\"w-6 h-6 flex items-center justify-center cursor-pointer\"\n @click=${() => this._dispatch('remove-container')}\n >\n <axebow-icon iconName=\"cancel\" size=\"2xl\" iconColor=\"var(--axebow-gray)\"></axebow-icon>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderToggle(\n label: string,\n checked: boolean,\n onLabel: string,\n offLabel: string,\n onChange: (checked: boolean) => void\n ) {\n return html`\n <div class=\"flex items-center gap-2\">\n <p class=\"m-0 text-(--axebow-tertiary) font-bold\">${label}</p>\n <axebow-switch .checked=${checked} .onChange=${(checked: boolean) => onChange(checked)}></axebow-switch>\n <p class=\"m-0 italic text-gray-400\">${checked ? onLabel : offLabel}</p>\n </div>\n `;\n }\n\n private _renderLogFilters() {\n return html`\n <div class=\"flex flex-wrap gap-4 items-start\">\n ${this.logFilters.map((_, index) => this._renderLogFilterDropdown(index))}\n <axebow-button\n class=\"shrink-0 mt-6.75\"\n variant=\"primary\"\n outline\n fixedWidth=\"7.4375rem\"\n fixedHeight=\"2.5rem\"\n @click=${() => this._dispatch('add-filter')}\n >\n ${this.addFilterLabel}\n </axebow-button>\n </div>\n `;\n }\n\n private _renderLogFilterDropdown(index: number) {\n const filter = this.logFilters[index];\n\n return html`\n <div class=\"w-68 h-auto flex flex-col gap-2\">\n <div class=\"w-68 h-4.75 flex items-center justify-between\">\n <h1 class=\"m-0 font-bold\">${this.logFilterTitle}</h1>\n <button\n class=\"m-0 text-base text-(--axebow-tertiary) cursor-pointer\"\n @click=${() => this._dispatch('clean-filter', { index })}\n >\n ${this.cleanFilterLabel}\n </button>\n </div>\n <sl-dropdown class=\"log-filter-dropdown\" id=\"log-filter-dropdown-${index}\">\n <axebow-button slot=\"trigger\" caret fixedWidth=\"17rem\" fixedHeight=\"2.5rem\">\n ${filter.selected ?? this.selectOptionLabel}\n </axebow-button>\n <sl-menu class=\"w-full my-2\">\n <sl-input\n type=\"text\"\n placeholder=${this.filterPlaceholder}\n clearable\n .value=${''}\n @sl-change=${(e: CustomEvent) => this._handleFilterInputChange(e, index)}\n @keydown=${(e: KeyboardEvent) => this._handleFilterInputKeydown(e, index)}\n ></sl-input>\n ${filter.options.map(\n (option) => html`\n <sl-menu-item @click=${() => this._selectFilterOption(index, option)}>${option}</sl-menu-item>\n `\n )}\n ${filter.options.length > 0\n ? html`\n <button\n class=\"p-2 w-full border-t border-solid border-gray-200 text-center text-gray-500 hover:bg-gray-100 cursor-pointer\"\n @click=${() => this._cleanFilterHistory(index)}\n >\n ${this.cleanHistoryLabel}\n </button>\n `\n : null}\n </sl-menu>\n </sl-dropdown>\n </div>\n `;\n }\n\n private _renderLogsIframe() {\n return html`\n <div class=\"w-full h-full px-4 py-8 rounded-md flex flex-col bg-white\">\n <div class=\"flex justify-between items-center\">\n <h1 class=\"m-0 text-base uppercase font-semibold text-(--axebow-gray)\">${this.logsTitle}</h1>\n <div class=\"flex items-center gap-4\">\n ${this._renderToggle(\n this.autoScrollLabel,\n this.followLogs,\n this.autoScrollOnLabel,\n this.autoScrollOffLabel,\n (checked) => this._dispatch('follow-logs-change', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"download_for_offline\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._dispatch('download-logs')}\n ></axebow-icon>\n </div>\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"content_copy\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._copyLogs()}\n ></axebow-icon>\n </div>\n </div>\n </div>\n <sl-divider class=\"w-full\"></sl-divider>\n <iframe\n id=\"${this.logsIframeId}\"\n allow=\"storage-access\"\n sandbox=\"${'allow-same-origin allow-scripts' as any}\"\n class=\"w-full h-screen\"\n src=\"${this.logsUrl}\"\n ></iframe>\n </div>\n `;\n }\n\n private async _copyLogs() {\n try {\n const iframe = this.renderRoot?.querySelector(`#${this.logsIframeId}`) as HTMLIFrameElement | null;\n const text = iframe?.contentDocument?.body?.innerText ?? '';\n if (!text) {\n this._dispatch('logs-copy-failed');\n return;\n }\n await navigator.clipboard.writeText(text);\n this._dispatch('logs-copied');\n } catch (_) {\n this._dispatch('logs-copy-failed');\n }\n }\n\n private _renderTerminalIframe() {\n return html`\n <div class=\"w-full h-full px-4 py-8 rounded-md flex flex-col bg-white\">\n <div class=\"flex justify-between items-center\">\n <h1 class=\"m-0 text-base uppercase font-semibold text-(--axebow-gray)\">${this.terminalTitle}</h1>\n </div>\n <sl-divider class=\"w-full\"></sl-divider>\n <iframe\n id=\"${this.terminalIframeId}\"\n allow=\"storage-access\"\n sandbox=\"${'allow-same-origin allow-scripts' as any}\"\n class=\"w-full h-screen\"\n src=\"${this.terminalUrl}\"\n ></iframe>\n </div>\n `;\n }\n\n private _handleFilterInputChange(e: CustomEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const value = input.value.trim();\n input.value = '';\n if (value) this._dispatch('filter-input-change', { index, value });\n }\n\n private _handleFilterInputKeydown(e: KeyboardEvent, index: number) {\n if (e.key !== 'Enter') return;\n\n e.preventDefault();\n e.stopPropagation();\n\n const input = e.target as HTMLInputElement;\n const value = input.value.trim();\n input.value = '';\n if (value) this._dispatch('filter-input-change', { index, value });\n this._closeDropdown(index);\n }\n\n private _selectFilterOption(index: number, option: string) {\n this._dispatch('select-filter-option', { index, option });\n this._closeDropdown(index);\n }\n\n private _cleanFilterHistory(index: number) {\n this._dispatch('clean-filter-history', { index });\n this._closeDropdown(index);\n }\n\n private _closeDropdown(index: number) {\n const dropdown = this.renderRoot?.querySelector(`#log-filter-dropdown-${index}`);\n if (dropdown) (dropdown as any).hide();\n }\n\n private _dispatch(eventName: string, detail: Record<string, unknown> = {}) {\n this.dispatchEvent(new CustomEvent(eventName, { detail, bubbles: true, composed: true }));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/styles/axebow-theme.ts","../src/components/axebow-icon/axebow-icon.ts","../src/components/axebow-filter-bar/axebow-filter-bar.ts","../src/components/axebow-button/axebow-button.ts","../src/components/axebow-search/axebow-search.ts","../src/components/axebow-search-bar-filters/axebow-search-bar-filters.ts","../src/components/axebow-header/parts/axebow-quick-action-card.ts","../src/components/axebow-header/parts/axebow-quick-actions.ts","../src/components/axebow-header/parts/axebow-header-actions.ts","../src/components/axebow-header/axebow-header.ts","../src/components/axebow-divider/axebow-divider.ts","../src/components/axebow-sidebar/axebow-sidebar.ts","../src/components/axebow-footer/axebow-footer.ts","../src/components/axebow-breadcrumb-header/axebow-breadcrumb-header.ts","../src/components/axebow-input/axebow-input-base.ts","../src/components/axebow-input/axebow-text-input.ts","../src/components/axebow-input/axebow-numeric-input.ts","../src/components/axebow-input/axebow-checkbox-input.ts","../src/components/axebow-input/axebow-switch-input.ts","../src/components/axebow-input/axebow-carousel-input.ts","../src/components/axebow-selector-card/axebow-selector-card.ts","../src/components/axebow-input/axebow-providers-input.ts","../src/components/axebow-input/axebow-select-input.ts","../src/components/axebow-input/axebow-select-input-with-divider.ts","../src/components/axebow-input/axebow-input.ts","../src/components/axebow-input/axebow-plan-select-field.ts","../src/components/axebow-input/axebow-tags-input.ts","../src/components/axebow-tab-selector/axebow-tab-selector.ts","../src/components/axebow-registry-selector/axebow-registry-selector.ts","../src/components/axebow-dialog/axebow-dialog.ts","../src/components/axebow-collaborators-dialog/axebow-collaborators-dialog.ts","../src/components/axebow-manage-hyperlinks/axebow-manage-hyperlinks.ts","../src/components/axebow-modals-confirmation/axebow-modals-confirmation.ts","../src/components/axebow-limits-counter/axebow-limits-counter.ts","../src/components/axebow-resources-counter/axebow-resources-counter.ts","../src/components/axebow-tooltip/axebow-tooltip.ts","../src/components/axebow-adjustment-resources-counter/axebow-adjustment-resources-counter.ts","../src/components/axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.ts","../src/components/axebow-banner/axebow-banner.ts","../src/components/axebow-switch/axebow-switch.ts","../src/components/axebow-runtime-zip-dialog/axebow-runtime-zip-dialog.ts","../src/components/axebow-more-actions/axebow-more-actions.ts","../src/components/cards/parts/axebow-card-cloud-logo.ts","../src/components/cards/parts/axebow-card-version-selector.ts","../src/components/cards/parts/axebow-role-tooltip.ts","../src/components/cards/parts/axebow-card-header.ts","../src/components/cards/parts/axebow-card-stat-item.ts","../src/components/cards/parts/axebow-card-stats-row.ts","../src/components/cards/parts/axebow-card-filter-item.ts","../src/components/cards/parts/axebow-card-filter.ts","../src/components/cards/parts/axebow-card-table-header.ts","../src/components/cards/parts/axebow-card-resource-row.ts","../src/components/cards/parts/axebow-card-resource-table.ts","../src/components/cards/parts/axebow-card-attention-banner.ts","../src/components/cards/parts/axebow-card-action-banner.ts","../src/components/cards/parts/axebow-card-status.ts","../src/components/cards/parts/axebow-card-footer.ts","../src/components/cards/axebow-base-card.ts","../src/components/cards/parts/axebow-card-special-link.ts","../src/components/axebow-alert/axebow-alert.ts","../src/components/axebow-draggable-service/axebow-draggable-service.ts","../src/components/axebow-services-panel/axebow-services-panel.ts","../src/components/axebow-channel-config-panel/axebow-channel-config-panel.ts","../src/components/axebow-mesh-node-renderer/axebow-mesh-node-renderer.ts","../src/components/axebow-help-bubble/axebow-help-bubble.ts","../src/components/axebow-number-card/axebow-number-card.ts","../src/components/axebow-numbers-section/axebow-numbers-section.ts","../src/components/axebow-pill/axebow-pill.ts","../src/components/axebow-quick-tip-button/axebow-quick-tip-button.ts","../src/components/axebow-infrastructure-card/axebow-infrastructure-card.ts","../src/components/axebow-getting-started-card/axebow-getting-started-card.ts","../src/components/axebow-marketplace-card/axebow-marketplace-card.ts","../src/components/axebow-deploy-card/axebow-deploy-card.ts","../src/components/axebow-resource-card/axebow-resource-card.ts","../src/components/axebow-quick-tip-section/axebow-quick-tip-section.ts","../src/components/axebow-tenant-resource-table/axebow-tenant-resource-table.ts","../src/components/table-chart/table-chart.ts","../src/components/axebow-service-detail-header/axebow-service-detail-header.ts","../src/components/axebow-tenant-card/axebow-tenant-card.ts","../src/components/axebow-carousel-selector-tenant/parts/axebow-carousel-selector-item.ts","../src/components/axebow-carousel-selector-tenant/axebow-carousel-selector-tenant.ts","../src/components/axebow-expandable-header/axebow-expandable-header.ts","../src/components/axebow-actions-footer/axebow-actions-footer.ts","../src/components/axebow-step-header/axebow-step-header.ts","../src/components/axebow-underline-tab-selector/axebow-underline-tab-selector.ts","../src/components/axebow-role-card/axebow-role-card.ts","../src/components/axebow-time-range-panel/axebow-time-range-panel.ts","../src/components/axebow-role-container-dropdown/axebow-role-container-dropdown.ts","../src/components/axebow-refresh-period-panel/axebow-refresh-period-panel.ts","../src/components/axebow-resource-limits/parts/axebow-resource-limit-input.ts","../src/components/axebow-resource-limits/axebow-resource-limits-panel.ts","../src/components/axebow-selector-slider/axebow-selector-slider.ts","../src/components/axebow-deploy-summary/axebow-deploy-summary.ts","../src/components/axebow-summary/axebow-summary-key-value.ts","../src/components/axebow-summary/axebow-resource-bar.ts","../src/components/axebow-summary/axebow-summary-step-header.ts","../src/components/axebow-summary/axebow-summary-step.ts","../src/components/axebow-summary/axebow-summary-card.ts","../src/components/axebow-summary/axebow-summary-limits.ts","../src/components/axebow-summary/axebow-summary-flavors.ts","../src/components/deploy-modal-component/parts/deploy-modal-header.ts","../src/components/deploy-modal-component/parts/deploy-modal-footer.ts","../src/components/deploy-modal-component/deploy-modal-component.ts","../src/components/deploy-page-body/deploy-page-body.ts","../src/components/custom-home-page-body/custom-home-page-body.ts","../src/components/axebow-status/axebow-status.ts","../src/components/axebow-form-panel-field/axebow-form-panel-field.ts","../src/components/axebow-box-form/axebow-box-form.ts","../src/components/axebow-box-section/axebow-box-section.ts","../src/components/axebow-copy-box/axebow-copy-box.ts","../src/components/axebow-tabs-submenu/axebow-tabs-submenu.ts","../src/components/axebow-progress-bar/axebow-progress-bar.ts","../src/components/axebow-usage-tooltip/axebow-usage-tooltip.ts","../src/components/axebow-instances-table/axebow-instances-table.ts","../src/components/axebow-tenants-table/axebow-tenants-table.ts","../src/components/axebow-expandable-card/axebow-expandable-card.ts","../src/components/axebow-undeploy-card/axebow-undeploy-card.ts","../src/components/axebow-observability-container/axebow-observability-container.ts"],"sourcesContent":["import { css } from 'lit';\n\nexport const axebowTheme = css`\n :host, .theme {\n --axebow-primary: var(--color-primary, #34495e);\n --axebow-primary-light: var(--color-primary-light, #b4cded);\n --axebow-tertiary: var(--color-tertiary, #006bff);\n --axebow-success: var(--color-success, #0ecd9a);\n --axebow-secondary: var(--color-secondary, #78787a);\n --axebow-base: var(--color-base, #f0f1f5);\n --axebow-error: var(--color-error, #e93a3a);\n --axebow-white: var(--color-white, #ffffff);\n --axebow-black: var(--color-black, #000000);\n --axebow-warning: var(--color-warning, #f9cf6c);\n --axebow-warning-bg: var(--color-warning-bg, #fffbe6);\n --axebow-error-bg: var(--color-error-bg, #fff2f0);\n --axebow-error-border: var(--color-error-border, #ffccc7);\n --axebow-dark-yellow: var(--color-dark-yellow, #b9935a);\n --axebow-table-border: var(--color-table-border, #ddd);\n --axebow-table-header-border: var(--color-table-header-border, #dbdde4);\n --axebow-gray: var(--color-gray, #8a94ae);\n --axebow-light-gray: var(--color-light-gray, #d9d9d9);\n\n --axebow-clickable-blue: var(--color-clickable-blue, #006bff);\n --axebow-sky-gray: var(--color-sky-gray, #8a94ee);\n --axebow-rich-black: var(--color-rich-black, #0d1821);\n --axebow-anti-flash-white: var(--color-anti-flash-white, #f0f1f5);\n --axebow-strong-gray: var(--color-strong-gray, #78787a);\n\n --axebow-bg-primary: var(--color-bg-primary, #f0f1f5);\n\n --axebow-text-gray: var(--color-text-gray, #78787a);\n\n --axebow-premium-label: var(--color-premium-label, #b9935a33);\n --axebow-premium-text: var(--color-premium-text, #b9935a);\n --axebow-deleting-link: var(--color-deleting-link, #a0a0a0);\n --axebow-border-gray: var(--color-border-gray, #9ca3af);\n font-family: var(--font-sans, \"Open Sans\", sans-serif);\n font-size: var(--text-base, 0.75rem);\n line-height: var(--text-base--line-height, 1rem);\n }\n\n /** Axebow switch */\n sl-switch::part(control) {\n background-color: var(--axebow-light-gray);\n }\n sl-switch[checked]::part(control) {\n background-color: var(--axebow-tertiary);\n }\n sl-switch::part(thumb) {\n background-color: white;\n }\n\n /** Axebow checkbox */\n sl-checkbox[checked]::part(control) {\n background-color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n }\n\n /** Axebow select and input global focus */\n sl-input:focus-within::part(base),\n sl-select:focus-within::part(combobox) {\n border-color: var(--axebow-black) !important;\n border-width: 1px !important;\n box-shadow: none !important;\n }\n sl-select sl-option:hover::part(base) {\n background-color: #e9ecef;\n }\n sl-select {\n --sl-color-primary-50: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n }\n sl-select sl-option[checked]::part(base),\n sl-select sl-option[current]::part(base),\n sl-select sl-option[aria-selected='true']::part(base) {\n background-color: var(--axebow-tertiary) !important;\n color: white !important;\n }\n\n /** Axebow tab group */\n sl-tab-group {\n --indicator-color: var(--axebow-tertiary);\n }\n sl-tab {\n --sl-font-size-small: var(--text-base); /* 12px */\n }\n sl-tab::part(base) {\n font-size: var(--text-base); /* 12px */\n }\n sl-tab[active]::part(base) {\n color: var(--axebow-tertiary);\n }\n sl-tab:hover::part(base) {\n color: var(--axebow-tertiary);\n }\n\n /* Custom Scrollbar Styles for Shoelace Dropdown, Select, and Menu */\n :host, .theme {\n --axebow-scrollbar-line-color: var(--axebow-tertiary, #e51c8e);\n --axebow-scrollbar-track-color: #f0f1f5;\n --axebow-scrollbar-thumb-color: #cbd5e1;\n --axebow-scrollbar-thumb-hover-color: #94a3b8;\n }\n\n /* Webkit/Blink Scrollbars */\n sl-select::part(listbox)::-webkit-scrollbar,\n sl-dropdown::part(panel)::-webkit-scrollbar,\n sl-menu::part(base)::-webkit-scrollbar {\n width: 11px;\n height: 11px;\n border-left: 2px solid var(--axebow-scrollbar-line-color);\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-button,\n sl-dropdown::part(panel)::-webkit-scrollbar-button,\n sl-menu::part(base)::-webkit-scrollbar-button {\n display: none;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-track,\n sl-dropdown::part(panel)::-webkit-scrollbar-track,\n sl-menu::part(base)::-webkit-scrollbar-track {\n background-color: var(--axebow-scrollbar-track-color);\n background-clip: padding-box;\n border-left: 3px solid transparent; /* Gap between pink line and track */\n border-right: 2px solid transparent;\n border-top: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: 9999px;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-thumb,\n sl-dropdown::part(panel)::-webkit-scrollbar-thumb,\n sl-menu::part(base)::-webkit-scrollbar-thumb {\n background-color: var(--axebow-scrollbar-thumb-color);\n background-clip: padding-box;\n border-left: 3px solid transparent; /* Gap between pink line and thumb */\n border-right: 2px solid transparent;\n border-top: 2px solid transparent;\n border-bottom: 2px solid transparent;\n border-radius: 9999px;\n }\n\n sl-select::part(listbox)::-webkit-scrollbar-thumb:hover,\n sl-dropdown::part(panel)::-webkit-scrollbar-thumb:hover,\n sl-menu::part(base)::-webkit-scrollbar-thumb:hover {\n background-color: var(--axebow-scrollbar-thumb-hover-color);\n }\n\n /* Firefox Scrollbars */\n sl-select::part(listbox),\n sl-dropdown::part(panel),\n sl-menu::part(base) {\n scrollbar-width: thin;\n scrollbar-color: var(--axebow-scrollbar-thumb-color) transparent;\n }\n\n sl-select::part(listbox),\n sl-select::part(menu) {\n min-width: 100% !important;\n width: max-content !important;\n max-width: 90vw !important;\n }\n`;\n\nexport const STATUS_COLORS = {\n HEALTHY: 'var(--axebow-success)',\n ERROR: 'var(--axebow-error)',\n WARNING: 'var(--axebow-warning)',\n DEFAULT: 'var(--axebow-gray)',\n} as const;\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, unsafeCSS, LitElement, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-icon')\nexport class AxebowIcon extends LitElement {\n @property({ type: String }) iconName = 'home';\n @property({ type: String }) iconColor = 'var(--axebow-primary)';\n @property({ type: Number }) rotate = 0;\n @property({ type: Boolean }) filled = false;\n @property({ type: String }) size: string = 'medium';\n @property({ type: Number }) marginBottom = 0;\n @property({ type: Boolean, reflect: true }) clickable = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n }\n :host([clickable]),\n span.is-clickable {\n cursor: pointer;\n transition: opacity 0.15s ease, filter 0.15s ease;\n }\n :host([clickable]):hover,\n span.is-clickable:hover {\n opacity: 0.6;\n filter: grayscale(0.4);\n }\n `,\n ];\n\n private _getFontSize(): string {\n const s = this.size.replace(/^text-/, '');\n switch (s) {\n case 'xs':\n return 'var(--text-xs, 0.75rem)';\n case 'sm':\n case 'xx-small':\n return 'var(--text-sm, 0.875rem)';\n case 'base':\n case 'x-small':\n return 'var(--text-base, 1rem)';\n case 'md':\n case 'small':\n return 'var(--text-md, 0.875rem)';\n case 'lg':\n return 'var(--text-lg, 1.125rem)';\n case 'xl':\n case 'medium':\n return '18px';\n case '2xl':\n return '1.5rem';\n case '3xl':\n case 'large':\n return 'var(--text-3xl, 1.875rem)';\n case '4xl':\n return '2.25rem';\n case '5xl':\n case 'x-large':\n return 'var(--text-5xl, 3rem)';\n default:\n return this.size;\n }\n }\n\n render() {\n const filled = \"[font-variation-settings:'FILL'_1,'wght'_400,'GRAD'_0,'opsz'_24]\";\n const outlined = \"[font-variation-settings:'FILL'_0,'wght'_400,'GRAD'_0,'opsz'_24]\";\n const fontSize = this._getFontSize();\n return html`\n <span\n class=\"font-[Material_Symbols_Outlined] inline-block align-middle whitespace-nowrap ${this.clickable ? 'is-clickable' : ''} ${this.filled\n ? filled\n : outlined}\"\n style=\"color: var(--axebow-icon-color, ${this.iconColor}); transform: rotate(${this.rotate}deg); font-size: ${fontSize}; margin-bottom: ${this.size === 'large' || this.size === '3xl'\n ? '0.375rem'\n : this.size === 'x-large' || this.size === '5xl'\n ? '0.5rem'\n : `${this.marginBottom}px`};\"\n >\n ${this.iconName}\n </span>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\nexport interface AxebowFilterBarOption {\n label: string;\n value: string;\n}\n\nexport interface AxebowFilterBarItem {\n key: string;\n label: string;\n placeholder: string;\n value: string;\n options: AxebowFilterBarOption[];\n separate?: boolean;\n lockable?: boolean;\n}\n\n/**\n * Purely presentational row of dropdown filters. Receives fully-resolved\n * items to render and only emits `option-change`; it holds no business\n * state, that is the responsibility of the consumer.\n */\n@customElement('axebow-filter-bar')\nexport class AxebowFilterBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-select {\n --sl-color-primary-500: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n --sl-focus-ring-width: 0px;\n }\n sl-select::part(combobox) {\n min-height: 2.5rem;\n border: 1px solid #dbdde4;\n border-radius: 0.375rem;\n padding-inline: 0.75rem;\n padding-block: 0.5rem;\n gap: 0.5rem;\n box-shadow: none;\n background-color: var(--axebow-white, white);\n }\n sl-select:hover::part(combobox) {\n border-color: var(--axebow-gray);\n }\n sl-select[open]::part(combobox),\n sl-select:focus-within::part(combobox) {\n border-color: var(--axebow-black);\n }\n sl-select::part(display-input) {\n color: var(--axebow-secondary);\n font-size: 0.875rem;\n padding: 0;\n }\n sl-select::part(expand-icon) {\n width: 1rem;\n height: 1rem;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n sl-option::part(checked-icon) {\n display: none;\n }\n sl-option::part(base) {\n font-size: 0.875rem;\n }\n sl-select[lockable][has-value]::part(expand-icon) {\n display: none !important;\n }\n sl-select[lockable][has-value]::part(combobox) {\n pointer-events: none;\n }\n sl-select[lockable][has-value]::part(clear-button),\n sl-select[lockable][has-value]::part(clear-icon) {\n pointer-events: auto;\n }\n sl-select:not([has-value])::part(clear-button) {\n display: none !important;\n }\n `,\n ];\n\n @property({ type: Array }) items: AxebowFilterBarItem[] = [];\n @property({ type: String }) clearFilterLabel = '';\n @property({ type: Boolean }) compact = false;\n\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this._updateSeparateLayout());\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n firstUpdated() {\n const container = this.shadowRoot?.querySelector<HTMLElement>('.filter-bar');\n if (container) this._resizeObserver?.observe(container);\n this._updateSeparateLayout();\n }\n\n updated(changedProperties: any) {\n super.updated(changedProperties);\n requestAnimationFrame(() => this._updateSeparateLayout());\n this._updateHasValueAttributes();\n }\n\n private _updateHasValueAttributes() {\n const selects = this.shadowRoot?.querySelectorAll('sl-select');\n selects?.forEach((select) => {\n const isLockable = select.hasAttribute('lockable');\n const val = (select as any).value;\n const hasValue = isLockable && val && val !== 'all' && val !== '';\n if (hasValue) {\n select.setAttribute('has-value', '');\n } else {\n select.removeAttribute('has-value');\n }\n });\n }\n\n private _onSelectShow(e: CustomEvent) {\n const target = e.target as any;\n if (target.hasAttribute('lockable') && target.hasAttribute('has-value')) {\n target.hide();\n }\n }\n\n private _updateSeparateLayout() {\n const container = this.shadowRoot?.querySelector<HTMLElement>('.filter-bar');\n if (!container) return;\n const items = Array.from(container.querySelectorAll<HTMLElement>('.filter-bar-item'));\n if (items.length < 2) return;\n const firstTop = items[0].offsetTop;\n const isSingleRow = items.every((item) => item.offsetTop === firstTop);\n const firstSeparate = container.querySelector<HTMLElement>('.filter-bar-item[data-separate]');\n if (firstSeparate) {\n firstSeparate.style.marginLeft = isSingleRow ? 'auto' : '';\n }\n }\n\n private _onChange(e: CustomEvent, key: string) {\n const target = e.target as any;\n const value = target.value;\n const isLockable = target.hasAttribute('lockable');\n const hasValue = isLockable && value && value !== 'all' && value !== '';\n if (hasValue) {\n target.setAttribute('has-value', '');\n } else {\n target.removeAttribute('has-value');\n }\n this.dispatchEvent(new CustomEvent('option-change', { detail: { key, value }, bubbles: true, composed: true }));\n }\n\n private _clearItem(key: string) {\n this.dispatchEvent(\n new CustomEvent('option-change', { detail: { key, value: 'all' }, bubbles: true, composed: true })\n );\n }\n\n private _renderItem(item: AxebowFilterBarItem) {\n const isLockable = item.lockable !== false;\n const hasValue = isLockable && item.value && item.value !== 'all' && item.value !== '';\n return html`\n <div\n class=\"filter-bar-item flex flex-col gap-2 flex-1 min-w-36 max-w-95\"\n ?data-separate=${item.separate}\n >\n <div class=\"flex items-center justify-between gap-2\">\n <h4 class=\"m-0 text-base font-semibold text-black\">${item.label}</h4>\n ${hasValue && this.clearFilterLabel\n ? html`\n <div class=\"w-17 h-4.25 shrink-0\">\n <button\n type=\"button\"\n class=\"w-full h-full p-0 border-0 bg-transparent cursor-pointer text-(--axebow-tertiary) text-base text-right hover:underline\"\n @click=${() => this._clearItem(item.key)}\n >\n ${this.clearFilterLabel}\n </button>\n </div>\n `\n : ''}\n </div>\n <sl-select\n class=\"w-full\"\n placeholder=${item.placeholder}\n .value=${item.value}\n ?lockable=${isLockable}\n ?has-value=${hasValue}\n ?clearable=${isLockable && !this.clearFilterLabel}\n data-key=${item.key}\n @sl-change=${(e: CustomEvent) => this._onChange(e, item.key)}\n @sl-show=${this._onSelectShow}\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n <axebow-icon\n slot=\"expand-icon\"\n iconName=\"chevron_right\"\n rotate=\"90\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${item.options.map((option) => html`<sl-option value=${option.value}>${option.label}</sl-option>`)}\n </sl-select>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"filter-bar flex items-end gap-4 flex-wrap ${this.compact ? '' : 'py-8'}\">\n ${this.items.map((item) => this._renderItem(item))}\n </div>\n `;\n }\n}\n","import { html, LitElement, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '@shoelace-style/shoelace/dist/components/button/button.js';\n\n@customElement('axebow-button')\nexport class AxebowButton extends LitElement {\n @property({ type: String, reflect: true }) variant:\n | 'default'\n | 'primary'\n | 'success'\n | 'neutral'\n | 'warning'\n | 'danger'\n | 'text'\n | 'tertiary' = 'default';\n\n @property({ type: String, reflect: true }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: Boolean, reflect: true }) outline = false;\n @property({ type: Boolean, reflect: true }) pill = false;\n @property({ type: Boolean, reflect: true }) circle = false;\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Boolean, reflect: true }) loading = false;\n @property({ type: Boolean, reflect: true }) caret = false;\n @property({ type: String }) type: 'button' | 'submit' | 'reset' = 'button';\n @property({ type: String }) href?: string;\n @property({ type: String }) target?: string;\n @property({ type: String }) name?: string;\n @property({ type: String }) value?: string;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) iconGap?: string;\n @property({ type: String }) paddingTop?: string;\n @property({ type: String }) paddingRight?: string;\n @property({ type: String }) paddingBottom?: string;\n @property({ type: String }) paddingLeft?: string;\n\n /**\n * 'simple' keeps each variant's own hover treatment (the default,\n * unchanged). 'border' switches to the boxed hover look shared by\n * axebow-more-actions: an anti-flash-white background with rounded\n * corners, regardless of variant.\n */\n @property({ type: String }) hoverStyle: 'simple' | 'border' = 'simple';\n\n constructor() {\n super();\n this.addEventListener('click', this._guardDisabledClick, { capture: true });\n }\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('fixedWidth')) {\n if (this.fixedWidth) this.style.setProperty('--axebow-button-width', this.fixedWidth);\n else this.style.removeProperty('--axebow-button-width');\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) this.style.setProperty('--axebow-button-height', this.fixedHeight);\n else this.style.removeProperty('--axebow-button-height');\n }\n if (changed.has('iconGap')) {\n if (this.iconGap) this.style.setProperty('--axebow-button-gap', this.iconGap);\n else this.style.removeProperty('--axebow-button-gap');\n }\n this._syncPaddingVar(changed, 'paddingTop', '--axebow-button-padding-top');\n this._syncPaddingVar(changed, 'paddingRight', '--axebow-button-padding-right');\n this._syncPaddingVar(changed, 'paddingBottom', '--axebow-button-padding-bottom');\n this._syncPaddingVar(changed, 'paddingLeft', '--axebow-button-padding-left');\n }\n\n private _syncPaddingVar(changed: Map<string, unknown>, prop: 'paddingTop' | 'paddingRight' | 'paddingBottom' | 'paddingLeft', cssVar: string) {\n if (!changed.has(prop)) return;\n const value = this[prop];\n if (value) this.style.setProperty(cssVar, value);\n else this.style.removeProperty(cssVar);\n }\n\n private _guardDisabledClick = (event: MouseEvent) => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n sl-button {\n width: 100%;\n }\n sl-button::part(base) {\n height: var(--axebow-button-height, 2.5rem);\n min-height: var(--axebow-button-height, 2.5rem);\n line-height: calc(var(--axebow-button-height, 2.5rem) - var(--sl-input-border-width) * 2);\n width: var(--axebow-button-width, auto);\n min-width: var(--axebow-button-width, 9.375rem);\n gap: var(--axebow-button-gap, 0.25rem);\n }\n\n /**\n * Hover is always a plain recolor to axebow-gray, no matter the\n * variant - nothing else about the button's structure changes.\n */\n\n /** Default / neutral button */\n sl-button[variant='default']:not([disabled]):hover::part(base),\n sl-button[variant='neutral']:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Primary button */\n sl-button[variant='primary']::part(base) {\n background: var(--axebow-tertiary);\n color: white;\n border-color: transparent;\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='primary']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Outlined primary button */\n sl-button[variant='primary'][outline]::part(base) {\n background: transparent;\n color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='primary'][outline]:not([disabled]):hover::part(base) {\n background: color-mix(in srgb, var(--axebow-gray) 15%, transparent);\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Text button */\n sl-button[variant='text']::part(base) {\n color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n sl-button[variant='text']:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n border-radius: 0.375rem;\n }\n\n /** Tertiary button */\n sl-button[variant='tertiary']::part(base) {\n background: transparent;\n border-color: transparent;\n color: var(--axebow-tertiary);\n outline-color: transparent;\n box-shadow: none;\n }\n sl-button[variant='tertiary']:not([disabled]):hover::part(base) {\n background-color: var(--axebow-anti-flash-white);\n color: var(--axebow-gray);\n border-radius: 0.375rem;\n border-color: transparent;\n outline-color: transparent;\n }\n\n /** Success button */\n sl-button[variant='success']::part(base) {\n background: var(--axebow-success);\n border-color: var(--axebow-success);\n color: white;\n border-radius: 0.375rem;\n outline-color: var(--axebow-success);\n }\n sl-button[variant='success']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger button */\n sl-button[variant='danger']::part(base) {\n background: var(--axebow-error);\n border-color: var(--axebow-error);\n color: white;\n outline-color: var(--axebow-error);\n }\n sl-button[variant='danger']:not([disabled]):hover::part(base) {\n background: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger outlined */\n sl-button[variant='danger'][outline]::part(base) {\n background: transparent;\n color: var(--axebow-error);\n border-color: var(--axebow-error);\n outline-color: var(--axebow-error);\n }\n sl-button[variant='danger'][outline]:not([disabled]):hover::part(base) {\n background: color-mix(in srgb, var(--axebow-gray) 15%, transparent);\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Danger text (host class) */\n :host(.axebow-red-button-text) sl-button::part(base) {\n color: var(--axebow-error);\n outline-color: var(--axebow-error);\n }\n :host(.axebow-red-button-text) sl-button:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /** Warning button (host class) */\n :host(.axebow-warning-button-bg) sl-button::part(base) {\n color: var(--axebow-tertiary);\n border-color: var(--axebow-tertiary);\n outline-color: var(--axebow-tertiary);\n }\n :host(.axebow-warning-button-bg) sl-button:not([disabled]):hover::part(base) {\n color: var(--axebow-gray);\n border-color: var(--axebow-gray);\n outline-color: var(--axebow-gray);\n }\n\n /**\n * Boxed hover look shared with axebow-more-actions, opt-in via\n * hoverStyle=\"border\". Declared last so it wins over every\n * variant's own hover rule above, regardless of which variant\n * it's combined with.\n */\n sl-button[hoverstyle='border']:not([disabled]):hover::part(base) {\n background-color: var(--axebow-anti-flash-white) !important;\n color: var(--axebow-gray) !important;\n border-radius: 0.375rem !important;\n outline-color: transparent !important;\n border-color: transparent !important;\n }\n\n sl-button::part(label) {\n padding: 0 !important;\n color: inherit;\n }\n\n sl-button::part(prefix),\n sl-button::part(suffix) {\n display: none !important;\n color: inherit;\n }\n\n :host([has-prefix]) sl-button::part(prefix) {\n display: flex !important;\n }\n\n :host([has-suffix]) sl-button::part(suffix) {\n display: flex !important;\n }\n\n ::slotted(axebow-icon) {\n --axebow-icon-color: currentColor;\n }\n `,\n ];\n\n private _handlePrefixChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes().some(node => {\n return node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '');\n });\n if (hasContent) {\n this.setAttribute('has-prefix', '');\n } else {\n this.removeAttribute('has-prefix');\n }\n }\n\n private _handleSuffixChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const hasContent = slot.assignedNodes().some(node => {\n return node.nodeType === Node.ELEMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.textContent?.trim() !== '');\n });\n if (hasContent) {\n this.setAttribute('has-suffix', '');\n } else {\n this.removeAttribute('has-suffix');\n }\n }\n\n render() {\n return html`\n <sl-button\n exportparts=\"base, label, prefix, suffix, caret\"\n hoverstyle=${this.hoverStyle}\n variant=${this.variant}\n size=${this.size}\n ?outline=${this.outline}\n ?pill=${this.pill}\n ?circle=${this.circle}\n ?disabled=${this.disabled}\n ?loading=${this.loading}\n ?caret=${this.caret}\n type=${this.type}\n href=${ifDefined(this.href)}\n target=${ifDefined(this.target)}\n name=${ifDefined(this.name)}\n value=${ifDefined(this.value)}\n >\n <slot name=\"prefix\" slot=\"prefix\" @slotchange=${this._handlePrefixChange}></slot>\n <slot></slot>\n <slot name=\"suffix\" slot=\"suffix\" @slotchange=${this._handleSuffixChange}></slot>\n </sl-button>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\n\n@customElement('axebow-search')\nexport class AxebowSearch extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n sl-input {\n width: 20rem;\n --sl-focus-ring-width: 0px;\n }\n :host(.axebow-fixed-width) sl-input {\n width: var(--axebow-search-width);\n }\n sl-input::part(base) {\n height: var(--axebow-search-height, 2.5rem);\n border: 1px solid #dbdde4;\n border-radius: 0.375rem;\n box-shadow: none;\n }\n sl-input::part(input) {\n height: var(--axebow-search-height, 2.5rem) !important;\n }\n sl-input:focus-within::part(base) {\n border-color: var(--axebow-tertiary);\n }\n sl-input::part(input) {\n color: var(--axebow-rich-black, #0d1821);\n font-size: 0.875rem;\n }\n sl-input::part(prefix) {\n padding-inline-start: 0.75rem;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) width?: string;\n @property({ type: String }) height?: string;\n\n protected updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('width')) {\n if (this.width) {\n this.style.setProperty('--axebow-search-width', this.width);\n this.classList.add('axebow-fixed-width');\n } else {\n this.style.removeProperty('--axebow-search-width');\n this.classList.remove('axebow-fixed-width');\n }\n }\n if (changed.has('height')) {\n if (this.height) this.style.setProperty('--axebow-search-height', this.height);\n else this.style.removeProperty('--axebow-search-height');\n }\n }\n\n private _emitChange(value: string) {\n this.dispatchEvent(\n new CustomEvent('search-change', { detail: { value }, bubbles: true, composed: true })\n );\n }\n\n private _onInput(e: Event) {\n this._emitChange((e.target as HTMLInputElement).value);\n }\n\n private _onClear() {\n this._emitChange('');\n }\n\n render() {\n return html`\n <sl-input placeholder=${this.placeholder} .value=${this.value} clearable @sl-input=${this._onInput} @sl-clear=${this._onClear}>\n <axebow-icon slot=\"prefix\" iconName=\"search\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </sl-input>\n `;\n }\n}\n","import { LitElement, css, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-search/axebow-search.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface AxebowSearchBarFiltersValues {\n search: string;\n role: string;\n provider: string;\n plan: string;\n sortBy: string;\n lockable?: boolean;\n}\n\nexport interface AxebowSearchBarFiltersOption {\n label: string;\n value: string;\n logo?: string;\n}\n\n@customElement('axebow-search-bar-filters')\nexport class AxebowSearchBarFilters extends LitElement {\n @property({ type: Object })\n values: AxebowSearchBarFiltersValues = {\n search: '',\n role: 'all',\n provider: 'all',\n plan: 'all',\n sortBy: 'newToOlder',\n lockable: true\n };\n\n @property({ type: Array }) roleOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) providerOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) planOptions: AxebowSearchBarFiltersOption[] = [];\n @property({ type: Array }) sortOptions: AxebowSearchBarFiltersOption[] = [];\n\n @property({ type: Boolean }) hideSearchAndCreate = false;\n\n @property({ type: String }) createTenantLabel = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) rolePlaceholder = '';\n @property({ type: String }) providerPlaceholder = '';\n @property({ type: String }) planPlaceholder = '';\n @property({ type: String }) clearAllLabel = '';\n\n private get _activeControlsCount() {\n const { search, role, provider, plan } = this.values;\n return [search !== '', role !== 'all', provider !== 'all', plan !== 'all'].filter(Boolean).length;\n }\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n width: 100%;\n }\n axebow-button:hover axebow-icon {\n --icon-btn-color: var(--axebow-gray);\n }\n sl-select::part(combobox):hover {\n border-color: black;\n }\n sl-input::part(base):hover {\n border-color: black;\n }\n .clear-all-link {\n cursor: pointer;\n color: var(--axebow-tertiary);\n font-size: 0.875rem;\n text-decoration: underline;\n }\n .clear-all-link:hover {\n opacity: 0.75;\n }\n .create-tenant-button::part(base) {\n font-size: 0.875rem !important;\n }\n .filter-select::part(combobox) {\n height: 2.5rem !important;\n min-height: 2.5rem !important;\n }\n .filter-select[lockable][has-value]::part(expand-icon) {\n display: none !important;\n }\n .filter-select[lockable][has-value]::part(combobox) {\n pointer-events: none;\n }\n .filter-select[lockable][has-value]::part(clear-button),\n .filter-select[lockable][has-value]::part(clear-icon) {\n pointer-events: auto;\n }\n .filter-select:not([has-value])::part(clear-button) {\n display: none !important;\n }\n `,\n ];\n\n private _dispatch(key: keyof AxebowSearchBarFiltersValues, value: string) {\n this.values = { ...this.values, [key]: value };\n this.dispatchEvent(\n new CustomEvent('filter-change', {\n detail: { key, value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _onSearchChange(e: CustomEvent<{ value: string }>) {\n this._dispatch('search', e.detail.value);\n }\n\n updated(changedProperties: any) {\n super.updated(changedProperties);\n this._updateHasValueAttributes();\n }\n\n private _updateHasValueAttributes() {\n const selects = this.shadowRoot?.querySelectorAll('sl-select');\n selects?.forEach((select) => {\n const isLockable = select.hasAttribute('lockable');\n const val = (select as any).value;\n const hasValue = isLockable && val && val !== 'all' && val !== '';\n if (hasValue) {\n select.setAttribute('has-value', '');\n } else {\n select.removeAttribute('has-value');\n }\n });\n }\n\n private _onSelectShow(e: CustomEvent) {\n const target = e.target as any;\n if (target.hasAttribute('lockable') && target.hasAttribute('has-value')) {\n target.hide();\n }\n }\n\n private _onSelectChange(e: CustomEvent, key: keyof AxebowSearchBarFiltersValues) {\n const target = e.target as any;\n const value = target.value;\n const isLockable = target.hasAttribute('lockable');\n const hasValue = isLockable && value && value !== 'all' && value !== '';\n if (hasValue) {\n target.setAttribute('has-value', '');\n } else {\n target.removeAttribute('has-value');\n }\n this._dispatch(key, value || 'all');\n }\n\n private _onSelectClear(key: keyof AxebowSearchBarFiltersValues) {\n this._dispatch(key, 'all');\n }\n\n private _onCreateTenant() {\n this.dispatchEvent(new CustomEvent('create-tenant', { bubbles: true, composed: true }));\n }\n\n private _onClearAll() {\n this.dispatchEvent(new CustomEvent('clear-all', { bubbles: true, composed: true }));\n }\n\n render() {\n const showClearAll = this._activeControlsCount >= 2;\n const isLockable = this.values.lockable !== false;\n const roleValue = this.values.role !== 'all' ? this.values.role : '';\n const providerValue = this.values.provider !== 'all' ? this.values.provider : '';\n const planValue = this.values.plan !== 'all' ? this.values.plan : '';\n\n return html`\n <div>\n <div class=\"flex items-center gap-4 mb-2\">\n ${!this.hideSearchAndCreate\n ? html`\n <axebow-button\n variant=\"primary\"\n outline\n class=\"create-tenant-button\"\n fixedWidth=\"9rem\"\n fixedHeight=\"2.5rem\"\n paddingRight=\"0.5rem\"\n @click=${this._onCreateTenant}\n >\n ${this.createTenantLabel}\n <axebow-icon\n slot=\"suffix\"\n iconName=\"add\"\n iconColor=\"var(--icon-btn-color, var(--axebow-tertiary))\"\n ></axebow-icon>\n </axebow-button>\n\n <axebow-search\n placeholder=${this.searchPlaceholder}\n .value=${this.values.search}\n width=\"26.25rem\"\n height=\"2.5rem\"\n @search-change=${this._onSearchChange}\n ></axebow-search>\n `\n : ''}\n\n <sl-select\n placeholder=${this.rolePlaceholder}\n .value=${roleValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && roleValue && roleValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'role')}\n @sl-clear=${() => this._onSelectClear('role')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.roleOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n\n <sl-select\n placeholder=${this.providerPlaceholder}\n .value=${providerValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && providerValue && providerValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'provider')}\n @sl-clear=${() => this._onSelectClear('provider')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.providerOptions.map(\n (opt) => html`\n <sl-option value=\"${opt.value}\">\n <span class=\"flex items-center w-full gap-1\">\n ${opt.logo\n ? html`<img src=\"${opt.logo}\" alt=\"${opt.label}\" class=\"h-4 w-auto object-contain\" />`\n : ''}\n ${opt.label}\n </span>\n </sl-option>\n `\n )}\n </sl-select>\n\n <sl-select\n placeholder=${this.planPlaceholder}\n .value=${planValue}\n ?lockable=${isLockable}\n ?has-value=${isLockable && planValue && planValue !== 'all'}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'plan')}\n @sl-clear=${() => this._onSelectClear('plan')}\n @sl-show=${this._onSelectShow}\n ?clearable=${isLockable}\n class=\"w-33.25 h-10 filter-select\"\n >\n <axebow-icon\n slot=\"clear-icon\"\n iconName=\"cancel\"\n size=\"md\"\n iconColor=\"var(--axebow-secondary)\"\n ></axebow-icon>\n ${this.planOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n\n <sl-select\n .value=${this.values.sortBy}\n @sl-change=${(e: CustomEvent) => this._onSelectChange(e, 'sortBy')}\n class=\"w-33.25 h-10 filter-select\"\n >\n ${this.sortOptions.map((opt) => html`<sl-option value=\"${opt.value}\">${opt.label}</sl-option>`)}\n </sl-select>\n </div>\n\n ${showClearAll\n ? html`\n <div class=\"flex justify-end mb-2\">\n <axebow-button variant=\"text\" @click=${this._onClearAll}>${this.clearAllLabel}</axebow-button>\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-quick-action-card')\nexport class AxebowQuickActionCard extends LitElement {\n static styles = [unsafeCSS(tailwindCss), css`:host { display: block; }`];\n\n @property({ type: String }) icon = '';\n @property({ type: String }) label = '';\n\n render() {\n return html`\n <div\n class=\"flex flex-col items-center justify-center gap-1 w-[10.5rem] px-4 py-3 rounded bg-white hover:bg-(--axebow-base) cursor-pointer transition-colors duration-150\"\n @click=${this._onClick}\n >\n <axebow-icon iconName=${this.icon} iconColor=\"var(--axebow-primary)\" size=\"xl\"></axebow-icon>\n <span class=\"text-base font-semibold text-(--axebow-primary) text-center whitespace-nowrap\">${this.label}</span>\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('card-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-quick-action-card.js';\n\nexport interface QuickAction {\n icon: string;\n label: string;\n visible: boolean;\n onClick: () => void;\n}\n\n/**\n * Trigger + flyout panel. Drops below the trigger, offset by the trigger's own\n * width so it clears the sidebar column instead of appearing underneath it.\n * First 3 actions render as the infra-creation row, the rest as the\n * deploy/service row (wraps after 3 to match the 168px card width).\n */\n@customElement('axebow-quick-actions')\nexport class AxebowQuickActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n\n @media (max-height: 720px) {\n .quick-actions-label {\n display: none !important;\n }\n }\n `,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: Array }) actions: QuickAction[] = [];\n\n @state() private open = false;\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this.open && !this.contains(e.target as Node)) {\n this.open = false;\n }\n };\n\n private _toggle(e: Event) {\n e.stopPropagation();\n this.open = !this.open;\n }\n\n private _select(action: QuickAction) {\n action.onClick();\n this.open = false;\n }\n\n render() {\n const row1 = this.actions.slice(0, 3).filter((a) => a.visible);\n const row2 = this.actions.slice(3, 7).filter((a) => a.visible);\n\n return html`\n <div class=\"relative\">\n <button\n type=\"button\"\n class=\"group relative flex flex-col items-center justify-center gap-1 w-20 h-16 border-none cursor-pointer transition-colors duration-150 ${this\n .open\n ? 'bg-(--axebow-base)'\n : 'bg-(--axebow-primary) hover:bg-(--axebow-base)'}\"\n @click=${this._toggle}\n >\n <span\n class=\"flex flex-col items-center justify-center gap-1 ${this.open\n ? 'text-(--axebow-primary)'\n : 'text-white group-hover:text-(--axebow-primary)'}\"\n >\n <axebow-icon iconName=${this.open ? 'close' : 'apps'} iconColor=\"currentColor\" size=\"xl\"></axebow-icon>\n <span\n class=\"quick-actions-label text-xs whitespace-nowrap ${this.open ? 'font-semibold' : 'font-normal group-hover:font-semibold'}\"\n >${this.label}</span\n >\n </span>\n <span\n class=\"absolute top-1/2 -translate-y-1/2 left-[calc(100%+10px)] -translate-x-1 opacity-0 group-hover:opacity-100 group-hover:translate-x-0 text-base transition-all duration-120 bg-(--axebow-primary-light) text-(--axebow-primary) font-semibold leading-none px-3.5 py-2 rounded-md whitespace-nowrap shadow-[0_6px_16px_rgba(13,24,33,0.18)] pointer-events-none z-2001\"\n >${this.label}</span\n >\n </button>\n\n ${this.open\n ? html`\n <div\n class=\"absolute top-full left-full mt-2 z-2000 flex flex-col gap-1 p-1 bg-white border border-solid border-(--axebow-light-gray) rounded-md axebow-shadow\"\n >\n <div class=\"flex gap-1\">\n ${row1.map(\n (action) => html`\n <axebow-quick-action-card\n icon=${action.icon}\n label=${action.label}\n @card-click=${() => this._select(action)}\n ></axebow-quick-action-card>\n `\n )}\n </div>\n ${row2.length\n ? html`\n <div class=\"h-px w-full bg-(--axebow-light-gray)\"></div>\n <div class=\"flex flex-wrap gap-x-1 gap-y-0.75\">\n ${row2.map(\n (action) => html`\n <axebow-quick-action-card\n icon=${action.icon}\n label=${action.label}\n @card-click=${() => this._select(action)}\n ></axebow-quick-action-card>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport '@shoelace-style/shoelace/dist/components/tab-group/tab-group.js';\nimport '@shoelace-style/shoelace/dist/components/tab/tab.js';\nimport '@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js';\n\nexport interface ProfileMenuItem {\n name: string;\n onClick: () => void;\n}\n\nexport interface NotificationAction {\n label: string;\n color: string;\n action: () => void;\n}\n\nexport interface FormattedNotificationVM {\n id: string;\n title: string;\n description: string;\n icon: string;\n color: string;\n status: 'read' | 'unread';\n date: string;\n callToAction: boolean;\n actions?: NotificationAction[];\n onClick: () => void;\n}\n\n/**\n * Right-hand header cluster: notifications dropdown + profile menu.\n */\n@customElement('axebow-header-actions')\nexport class AxebowHeaderActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-dropdown::part(panel) {\n max-width: 500px;\n }\n .notification-description code {\n display: inline-block;\n white-space: pre-wrap;\n word-break: break-all;\n }\n .notification-description pre {\n white-space: pre-wrap;\n }\n `,\n ];\n\n @property({ type: String }) userName = '';\n @property({ type: Array }) profileMenuItems: ProfileMenuItem[] = [];\n @property({ type: String }) logoutLabel = '';\n @property({ attribute: false }) onLogout: () => void = () => {};\n @property({ type: String }) notificationsLabel = '';\n @property({ type: Array }) notifications: FormattedNotificationVM[] = [];\n @property({ type: Array }) actionNeededNotifications: FormattedNotificationVM[] = [];\n @property({ type: String }) myNotificationsTabLabel = '';\n @property({ type: String }) actionNeededTabLabel = '';\n @property({ type: String }) noNotificationsLabel = '';\n @property({ type: String }) noUnreadNotificationsLabel = '';\n @property({ type: String }) noActionNotificationsLabel = '';\n @property({ type: String }) showUnreadOnlyLabel = '';\n @property({ type: String }) onLabel = '';\n @property({ type: String }) offLabel = '';\n @property({ type: String }) markAllAsReadLabel = '';\n @property({ attribute: false }) onMarkAllAsRead: () => void = () => {};\n\n @state() private showUnreadOnly = false;\n\n private handleShowUnreadOnlyChange(e: any) {\n this.showUnreadOnly = e.target.checked;\n }\n\n render() {\n const unreadNotifications = this.notifications.filter((n) => n.status === 'unread');\n const notificationsToShow = this.showUnreadOnly ? unreadNotifications : this.notifications;\n\n return html`\n <div class=\"flex items-center gap-2 z-10 shrink-0 min-w-0 ml-auto\">\n <sl-dropdown>\n <div\n class=\"relative group w-9 h-9 rounded-md flex items-center justify-center cursor-pointer transition-colors duration-150 hover:bg-(--axebow-primary)\"\n slot=\"trigger\"\n >\n <span class=\"inline-block transition-transform duration-200 group-hover:rotate-15\">\n <axebow-icon iconName=\"notifications\" iconColor=\"white\"></axebow-icon>\n </span>\n ${unreadNotifications.length > 0\n ? html`<div\n class=\"absolute bottom-0.5 right-0.5 flex items-center justify-center rounded-full bg-(--axebow-error) text-white font-bold z-10 pointer-events-none ${unreadNotifications.length <\n 10\n ? 'w-4 h-4 text-sm'\n : 'h-4 min-w-4 px-0.5 text-sm'}\"\n >\n ${unreadNotifications.length > 99 ? '99+' : unreadNotifications.length}\n </div>`\n : ''}\n <span\n class=\"absolute top-1/2 -translate-y-1/2 right-[calc(100%+10px)] translate-x-1 opacity-0 group-hover:opacity-100 group-hover:translate-x-0 text-base transition-all duration-120 bg-(--axebow-primary-light) text-(--axebow-primary) font-semibold leading-none px-3.5 py-2 rounded-md whitespace-nowrap shadow-[0_6px_16px_rgba(13,24,33,0.18)] pointer-events-none z-2001\"\n >${this.notificationsLabel}</span\n >\n </div>\n <sl-tab-group class=\"bg-white rounded-md w-120 text-base\">\n <sl-tab slot=\"nav\" panel=\"my_notifications\">${this.myNotificationsTabLabel}</sl-tab>\n <sl-tab slot=\"nav\" panel=\"action_needed\">${this.actionNeededTabLabel}</sl-tab>\n\n <sl-tab-panel class=\"bg-gray-100\" name=\"my_notifications\">\n <div class=\"flex flex-col gap-2 px-4 max-h-[40vh] overflow-auto w-full\">\n ${this.notifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center w-117\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noNotificationsLabel}</p>\n </div>`\n : html`\n <div class=\"flex flex-col text-black gap-4\">\n <div class=\"flex justify-between items-center flex-wrap gap-4\">\n <div class=\"flex items-center py-1\">\n <p class=\"mr-4 text-base\">${this.showUnreadOnlyLabel}</p>\n <sl-switch @sl-change=${(e: any) => this.handleShowUnreadOnlyChange(e)}></sl-switch>\n <p class=\"italic text-gray-400 text-base\">\n ${this.showUnreadOnly ? this.onLabel : this.offLabel}\n </p>\n </div>\n <button class=\"text-gray-500 cursor-pointer text-base\" @click=${() => this.onMarkAllAsRead()}>\n ${this.markAllAsReadLabel}\n </button>\n </div>\n ${this.showUnreadOnly && unreadNotifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center w-117\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noUnreadNotificationsLabel}</p>\n </div>`\n : html` ${notificationsToShow.map((item) => this.renderNotificationCard(item))} `}\n </div>\n `}\n </div>\n </sl-tab-panel>\n <sl-tab-panel class=\"bg-gray-100\" name=\"action_needed\">\n <div class=\"flex flex-col gap-2 px-4 max-h-[40vh] overflow-auto w-full\">\n ${this.actionNeededNotifications.length === 0\n ? html`<div class=\"flex flex-row gap-4 items-center p-4\">\n <axebow-icon iconName=\"info\"></axebow-icon>\n <p class=\"text-black\">${this.noActionNotificationsLabel}</p>\n </div>`\n : html`\n <div class=\"flex flex-col text-black gap-4\">\n ${this.actionNeededNotifications.map((item) => this.renderNotificationCard(item))}\n </div>\n `}\n </div>\n </sl-tab-panel>\n </sl-tab-group>\n </sl-dropdown>\n <sl-dropdown class=\"shrink-0\">\n <div\n slot=\"trigger\"\n class=\"group flex items-center gap-2 h-9 px-3 rounded-md text-white font-semibold cursor-pointer whitespace-nowrap transition-all duration-150 hover:bg-white hover:text-(--axebow-primary) hover:shadow-[0_2px_6px_rgba(13,24,33,0.14)] text-base\"\n >\n <span class=\"text-white group-hover:text-(--axebow-primary) transition-colors duration-150\">\n <axebow-icon iconName=\"account_circle\" iconColor=\"currentColor\" size=\"xl\"></axebow-icon>\n </span>\n ${this.userName}\n </div>\n <sl-menu class=\"bg-white rounded-md p-2 min-w-55 axebow-shadow\">\n ${this.profileMenuItems.map(\n (item) => html`\n <button\n class=\"w-full flex text-base items-center justify-between ml-auto px-4 py-2 cursor-pointer rounded-md hover:bg-gray-200 transition-colors ease-in-out duration-200 hover:text-(--axebow-tertiary)\"\n @click=${() => item.onClick()}\n >\n <span class=\"text-(--axebow-primary)\">${item.name}</span>\n <axebow-icon iconName=\"arrow_right_alt\" size=\"xl\"></axebow-icon>\n </button>\n `\n )}\n <button\n class=\"ml-auto flex items-center justify-between w-full px-4 py-2 text-(--axebow-error) cursor-pointer rounded-md text-base\"\n @click=${() => this.onLogout()}\n >\n <span class=\"text-(--axebow-error) mt-1\">${this.logoutLabel}</span>\n <axebow-icon iconName=\"mode_off_on\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>\n </button>\n </sl-menu>\n </sl-dropdown>\n </div>\n `;\n }\n\n private renderNotificationCard(item: FormattedNotificationVM) {\n return html`\n <div\n class=\"relative flex gap-2 p-2 w-full rounded-md border-2 border-solid text-base ${item.status === 'unread'\n ? 'border-gray-500 hover:border-(--axebow-tertiary) text-gray-600'\n : 'border-gray-300 text-gray-400'} \"\n @click=${() => item.onClick()}\n >\n ${item.status === 'unread'\n ? html` <div class=\"absolute top-[-7px] left-[-7px] h-3.5 w-3.5 rounded-full bg-(--axebow-success)\"></div>`\n : ''}\n <axebow-icon\n iconName=${item.icon}\n size=\"xl\"\n iconColor=${item.status === 'unread' ? item.color : 'gray'}\n ></axebow-icon>\n <div class=\"flex flex-1 flex-col gap-1 py-1.25 min-w-0 overflow-hidden\">\n <div class=\"flex justify-between gap-2\">\n <h4 class=\"font-semibold wrap-break-word\">${item.title}</h4>\n <span class=\"ms-auto min-w-fit shrink-0 text-gray-400\">${item.date}</span>\n </div>\n <div\n class=\"notification-description leading-tight max-w-full pe-4 overflow-x-hidden overflow-y-auto max-h-75 wrap-break-word\"\n .innerHTML=${item.description}\n ></div>\n ${item.actions && item.actions.length > 0\n ? html`\n <div class=\"flex gap-4 ml-auto pe-4 flex-wrap\">\n ${item.actions.map(\n (action) => html`\n <button class=\"text-sm font-semibold text-[${action.color}] hover:underline\" @click=${action.action}>\n ${action.label}\n </button>\n `\n )}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport './parts/axebow-quick-actions.js';\nimport './parts/axebow-header-actions.js';\nimport type { QuickAction } from './parts/axebow-quick-actions.js';\nimport type { ProfileMenuItem, FormattedNotificationVM } from './parts/axebow-header-actions.js';\n\n/**\n * Purely presentational app header. Receives fully-resolved data and\n * callback props; quick-actions open state and the notifications\n * unread-only filter are owned by their respective sub-components.\n */\n@customElement('axebow-header')\nexport class AxebowHeader extends LitElement {\n @property({ type: Boolean, reflect: true }) minimal = false;\n @property({ type: String }) logoUrl = '';\n @property({ type: String }) logoAlt = '';\n @property({ attribute: false }) onLogoClick: () => void = () => {};\n @property({ type: String }) userName = '';\n @property({ type: String }) quickActionsLabel = '';\n @property({ type: Array }) quickActions: QuickAction[] = [];\n @property({ type: Array }) profileMenuItems: ProfileMenuItem[] = [];\n @property({ type: String }) logoutLabel = '';\n @property({ attribute: false }) onLogout: () => void = () => {};\n @property({ type: String }) notificationsLabel = '';\n @property({ type: Array }) notifications: FormattedNotificationVM[] = [];\n @property({ type: Array }) actionNeededNotifications: FormattedNotificationVM[] = [];\n @property({ type: String }) myNotificationsTabLabel = '';\n @property({ type: String }) actionNeededTabLabel = '';\n @property({ type: String }) noNotificationsLabel = '';\n @property({ type: String }) noUnreadNotificationsLabel = '';\n @property({ type: String }) noActionNotificationsLabel = '';\n @property({ type: String }) showUnreadOnlyLabel = '';\n @property({ type: String }) onLabel = '';\n @property({ type: String }) offLabel = '';\n @property({ type: String }) markAllAsReadLabel = '';\n @property({ attribute: false }) onMarkAllAsRead: () => void = () => {};\n\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n render() {\n return html`\n <header class=\"relative flex items-center justify-between h-full pe-4 py-2\">\n ${this.minimal\n ? html`\n <div\n class=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-5 cursor-pointer hover:opacity-80 transition-opacity duration-200\"\n @click=${() => this.onLogoClick()}\n >\n <div class=\"flex items-center gap-2 text-white\">\n <img src=\"${this.logoUrl}\" alt=\"${this.logoAlt}\" class=\"h-10\" />\n </div>\n </div>\n `\n : html`\n <axebow-quick-actions .label=${this.quickActionsLabel} .actions=${this.quickActions}></axebow-quick-actions>\n\n <div\n class=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-5 cursor-pointer hover:opacity-80 transition-opacity duration-200\"\n @click=${() => this.onLogoClick()}\n >\n <div class=\"flex items-center gap-2 text-white\">\n <img src=\"${this.logoUrl}\" alt=\"${this.logoAlt}\" class=\"h-10\" />\n </div>\n </div>\n\n <axebow-header-actions\n .userName=${this.userName}\n .profileMenuItems=${this.profileMenuItems}\n .logoutLabel=${this.logoutLabel}\n .onLogout=${this.onLogout}\n .notificationsLabel=${this.notificationsLabel}\n .notifications=${this.notifications}\n .actionNeededNotifications=${this.actionNeededNotifications}\n .myNotificationsTabLabel=${this.myNotificationsTabLabel}\n .actionNeededTabLabel=${this.actionNeededTabLabel}\n .noNotificationsLabel=${this.noNotificationsLabel}\n .noUnreadNotificationsLabel=${this.noUnreadNotificationsLabel}\n .noActionNotificationsLabel=${this.noActionNotificationsLabel}\n .showUnreadOnlyLabel=${this.showUnreadOnlyLabel}\n .onLabel=${this.onLabel}\n .offLabel=${this.offLabel}\n .markAllAsReadLabel=${this.markAllAsReadLabel}\n .onMarkAllAsRead=${this.onMarkAllAsRead}\n ></axebow-header-actions>\n `}\n </header>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport type DividerType = 'solid' | 'dashed' | 'dotted';\n\n@customElement('axebow-divider')\nexport class AxebowDivider extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n }\n .divider {\n box-sizing: border-box;\n border: none;\n }\n .divider.solid {\n height: var(--divider-thickness, 1px);\n background-color: var(--divider-color, var(--axebow-light-gray));\n }\n .divider.dashed {\n height: 0;\n border-top: var(--divider-thickness, 1px) dashed var(--divider-color, var(--axebow-light-gray));\n }\n .divider.dotted {\n height: 0;\n border-top: var(--divider-thickness, 1px) dotted var(--divider-color, var(--axebow-light-gray));\n }\n `,\n ];\n\n @property({ type: String }) type: DividerType = 'solid';\n @property({ type: String }) width = '100%';\n @property({ type: String }) color = 'var(--axebow-light-gray)';\n @property({ type: String }) margin = '0.5rem 0';\n @property({ type: String }) thickness = '1px';\n\n render() {\n return html`\n <div\n class=\"divider ${this.type}\"\n style=\"\n width: ${this.width};\n margin: ${this.margin};\n --divider-color: ${this.color};\n --divider-thickness: ${this.thickness};\n \"\n ></div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-divider': AxebowDivider;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-divider/axebow-divider.js';\n\nexport interface NavItem {\n key: string;\n label: string;\n icon: string;\n onClick: () => void;\n isRoot?: boolean;\n openInNewTab?: boolean;\n}\n\nexport interface NavDivider {\n divider: true;\n}\n\nexport type SidebarEntry = NavItem | NavDivider;\n\n/**\n * Purely presentational app sidebar. Receives fully-resolved nav entries,\n * the currently-selected item key, and the reserved bottom padding (driven\n * by the app's own footer-height tracking); owns only hover-tooltip UI\n * state.\n */\n@customElement('axebow-sidebar')\nexport class AxebowSidebar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n position: relative;\n width: 5rem;\n display: block;\n height: 100%;\n overflow: hidden;\n }\n\n .sidebar-nav {\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n transition: padding-bottom 150ms ease-out;\n scrollbar-width: none;\n }\n\n .sidebar-nav::-webkit-scrollbar {\n display: none;\n }\n\n @media (max-height: 720px) {\n .compact-divider {\n display: block !important;\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .nav-item {\n height: 2.375rem !important;\n }\n\n .nav-label {\n display: none !important;\n }\n\n .bottom-item {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n\n .bottom-label {\n display: none !important;\n }\n\n .sidebar-divider {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n }\n `,\n ];\n\n @property({ type: Array }) items: SidebarEntry[] = [];\n @property({ type: Array }) bottomItems: NavItem[] = [];\n @property({ type: String }) selectedKey: string | null = null;\n @property({ type: Number }) paddingBottom = 10;\n\n @state() private hoveredItem: NavItem | null = null;\n @state() private tooltipTop = 0;\n @state() private tooltipLeft = 0;\n\n private handleMouseEnter(event: MouseEvent, item: NavItem) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.tooltipTop = rect.top + 10;\n this.tooltipLeft = rect.right - 8;\n this.hoveredItem = item;\n }\n\n private handleMouseLeave() {\n this.hoveredItem = null;\n }\n\n private _isSelected(item: NavItem): boolean {\n return this.selectedKey === item.key || (!!item.isRoot && this.selectedKey === null);\n }\n\n render() {\n return html`\n <nav\n style=\"padding-bottom: ${this.paddingBottom}px;\"\n class=\"sidebar-nav h-full flex flex-col justify-between overflow-hidden pt-2\"\n >\n <ul class=\"flex flex-col gap-0 w-full pb-1\">\n ${this.items.map((entry) =>\n 'divider' in entry\n ? html` <axebow-divider class=\"sidebar-divider w-[calc(100%-10px)] mx-auto my-1.5\" margin=\"0\"></axebow-divider> `\n : this._renderNavItem(entry, this._isSelected(entry))\n )}\n <axebow-divider class=\"compact-divider hidden w-[calc(100%-10px)] mx-auto my-1.5\" margin=\"0\"></axebow-divider>\n </ul>\n <ul class=\"flex flex-col gap-0 w-full\">\n ${this.bottomItems.map((item) => this._renderBottomItem(item))}\n </ul>\n </nav>\n\n ${this.hoveredItem\n ? html`\n <div\n class=\"fixed ps-4 flex items-center pointer-events-none z-9999\"\n style=\"left: ${this.tooltipLeft}px; top: ${this.tooltipTop}px; height: 3rem;\"\n >\n <span\n class=\"flex items-center gap-1 px-2 py-1 bg-white rounded-md text-base border border-solid border-(--axebow-gray) shadow-lg\"\n >${this.hoveredItem.label}${this.hoveredItem.openInNewTab\n ? html`<axebow-icon iconName=\"open_in_new\" size=\"sm\"></axebow-icon>`\n : ''}</span\n >\n </div>\n `\n : ''}\n `;\n }\n\n private _renderNavItem(item: NavItem, selected: boolean) {\n return html`\n <li\n class=\"nav-item ${selected\n ? 'bg-(--axebow-base) rounded-l-xl cursor-default'\n : 'cursor-pointer'} flex flex-col w-full h-16 items-center justify-center relative group\"\n @click=\"${() => item.onClick()}\"\n @mouseenter=\"${(e: MouseEvent) => this.handleMouseEnter(e, item)}\"\n @mouseleave=\"${() => this.handleMouseLeave()}\"\n title=\"${item.label}\"\n >\n <div class=\"flex flex-col items-center justify-center\">\n <axebow-icon iconName=\"${item.icon}\" size=\"xl\"></axebow-icon>\n <span class=\"nav-label text-xs overflow-hidden whitespace-nowrap opacity-100 max-w-full\">${item.label}</span>\n </div>\n\n ${!selected\n ? html`\n <div\n class=\"absolute top-0 right-0 h-full w-2.5 rounded-l-xl bg-(--axebow-base) opacity-0 group-hover:opacity-100 pointer-events-none transition-opacity duration-200\"\n ></div>\n `\n : ''}\n </li>\n `;\n }\n\n private _renderBottomItem(item: NavItem) {\n return html`\n <li\n class=\"bottom-item flex flex-col w-full items-center justify-center cursor-pointer relative group\"\n @click=\"${() => item.onClick()}\"\n @mouseenter=\"${(e: MouseEvent) => this.handleMouseEnter(e, item)}\"\n @mouseleave=\"${() => this.handleMouseLeave()}\"\n title=\"${item.label}\"\n >\n <div class=\"flex flex-col items-center justify-center py-2.5\">\n <axebow-icon iconName=\"${item.icon}\" size=\"xl\"></axebow-icon>\n <span class=\"bottom-label text-sm overflow-hidden whitespace-nowrap opacity-100 max-w-full\"\n >${item.label}${item.openInNewTab\n ? html`<axebow-icon iconName=\"open_in_new\" size=\"sm\"></axebow-icon>`\n : ''}</span\n >\n </div>\n\n <div\n class=\"absolute top-0 right-0 h-full w-2.5 rounded-l-xl bg-(--axebow-base) opacity-0 group-hover:opacity-100 pointer-events-none transition-opacity duration-200\"\n ></div>\n </li>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport interface FooterLink {\n label: string;\n url: string;\n onClick: () => void;\n}\n\n/**\n * Purely presentational site footer. Receives already-filtered, already\n * translated links; owns only the footer-height broadcast used by\n * axebow-sidebar to reserve bottom padding.\n */\n@customElement('axebow-footer')\nexport class AxebowFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n position: relative;\n z-index: 1001;\n overflow: hidden;\n }\n `,\n ];\n\n @property({ type: Array }) links: FooterLink[] = [];\n\n private resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this.resizeObserver = new ResizeObserver(() => {\n this.emitFooterHeight();\n });\n this.resizeObserver.observe(this);\n window.addEventListener('resize', this.emitFooterHeight);\n window.addEventListener('scroll', this.emitFooterHeight, true);\n setTimeout(() => this.emitFooterHeight(), 0);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.resizeObserver?.disconnect();\n window.removeEventListener('resize', this.emitFooterHeight);\n window.removeEventListener('scroll', this.emitFooterHeight, true);\n }\n\n private emitFooterHeight = () => {\n const rect = this.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n let visible = 0;\n if (rect.top < windowHeight && rect.bottom > 0) {\n const visibleBottom = Math.min(rect.bottom, windowHeight);\n const visibleTop = Math.max(rect.top, 0);\n visible = visibleBottom - visibleTop;\n }\n visible = Math.max(0, visible);\n this.dispatchEvent(\n new CustomEvent('footer-height-changed', {\n detail: { height: visible },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n render() {\n return html`\n <footer\n class=\"text-center text-sm flex w-full bg-(--axebow-primary) text-white justify-center items-center h-8 px-2 md:gap-8 gap-4 flex-wrap\"\n >\n ${this.links.map(\n (link) => html`\n <button\n class=\"h-7 text-sm p-1 inline-flex items-center gap-1 opacity-70 hover:opacity-100 transition-opacity duration-150 text-(--axebow-anti-flash-white) bg-transparent border-0 cursor-pointer\"\n @click=${link.onClick}\n >\n ${link.label}\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-anti-flash-white)\" size=\"md\"></axebow-icon>\n </button>\n `\n )}\n </footer>\n `;\n }\n}\n","import tailwindCss from \"../../styles/tailwind.css?inline\";\nimport { LitElement, html, css, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport \"../axebow-icon/axebow-icon.js\";\n\nexport interface BreadcrumbSecondaryPage {\n label: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational page breadcrumb: optional home block, optional\n * clickable secondary-page trail, the current page title, and an optional\n * \"required field\" note. Receives all copy and navigation as properties.\n */\n@customElement(\"axebow-breadcrumb-header\")\nexport class AxebowBreadcrumbHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Boolean }) padded = false;\n @property({ type: String }) paddingBottom = \"2rem\";\n @property({ type: Boolean }) showHomeBlock = true;\n @property({ attribute: false }) onHomeClick: () => void = () => {};\n @property({ type: Boolean }) showSecondaryPages = false;\n @property({ type: Array }) secondaryPages: BreadcrumbSecondaryPage[] = [];\n @property({ type: String }) mainPage = \"\";\n @property({ type: Boolean }) showRequiredField = false;\n @property({ type: String }) requiredFieldLabel = \"\";\n\n render() {\n return html`\n <div\n class=\"flex flex-col gap-1 pt-8 ${this.padded ? \"ps-8\" : \"\"}\"\n style=\"padding-bottom: ${this.paddingBottom};\"\n >\n <div\n class=\"flex flex-wrap items-center gap-2 text-xl text-(--axebow-primary)\"\n >\n ${this.showHomeBlock\n ? html`\n <span\n class=\"flex items-center gap-2 cursor-pointer\"\n @click=${() => this.onHomeClick()}\n >\n <axebow-icon\n iconName=\"home\"\n iconColor=\"var(--axebow-primary)\"\n size=\"xl\"\n style=\"display: inline-flex; align-items: center; justify-content: center;\"\n ></axebow-icon>\n <span class=\"font-normal\">/</span>\n </span>\n `\n : \"\"}\n ${this.showSecondaryPages\n ? this.secondaryPages.map(\n (page) => html`\n <span class=\"flex items-center gap-2\">\n <span\n class=\"font-normal ${page.onClick\n ? \"cursor-pointer hover:underline\"\n : \"\"}\"\n @click=${page.onClick ? () => page.onClick!() : undefined}\n >${page.label}</span\n >\n <span class=\"font-normal\">/</span>\n </span>\n `,\n )\n : \"\"}\n\n <span class=\"font-semibold\">${this.mainPage}</span>\n </div>\n ${this.showRequiredField\n ? html`\n <div class=\"text-sm\">\n <span class=\"font-bold text-(--axebow-error)\">*</span>\n <span class=\"font-normal text-(--axebow-rich-black)\">\n ${this.requiredFieldLabel}</span\n >\n </div>\n `\n : \"\"}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport abstract class AxebowInputBase extends LitElement {\n static baseStyles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-input,\n sl-select {\n width: 100%;\n }\n sl-input::part(base),\n sl-select::part(combobox) {\n --sl-input-focus-ring-color: transparent;\n --sl-color-primary-600: transparent;\n --sl-input-border-color-focus: transparent;\n border-radius: 0.375rem;\n }\n .input-error sl-input,\n .input-error sl-select {\n --sl-input-border-color: var(--axebow-error, #e53e3e);\n --sl-input-border-color-focus: var(--axebow-error, #e53e3e);\n --sl-input-border-color-hover: var(--axebow-error, #e53e3e);\n }\n .input-error sl-input::part(base),\n .input-error sl-select::part(combobox) {\n --sl-input-border-color-focus: var(--axebow-error, #e53e3e);\n }\n .input-error sl-input::part(input),\n .input-error sl-select::part(display-input) {\n color: var(--axebow-error, #e53e3e);\n }\n\n /* Shared anatomy for the labeled, non-compact case across every\n concrete input: label 17px tall, 4px gap to an optional\n description (also 17px tall, omitted entirely when absent - no\n reserved blank space), 8px gap to the 40px field box. 265.5px\n (16.59375rem) is the floor width - it grows with whatever space\n the parent gives it. Each concrete input only supplies its own\n field-specific 40px-height rule for its control element. */\n .fixed-field {\n display: flex;\n flex-direction: column;\n width: 100%;\n min-width: 16.59375rem;\n }\n .fixed-field .field-label {\n width: 100%;\n height: 1.0625rem;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin-bottom: 0.25rem;\n }\n .fixed-field .field-description {\n width: 100%;\n margin-bottom: 0.5rem;\n overflow: hidden;\n white-space: normal;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--axebow-input-description-lines, 2);\n line-clamp: var(--axebow-input-description-lines, 2);\n text-overflow: ellipsis;\n font-weight: normal;\n }\n .fixed-field.wrap-description .field-description {\n white-space: normal;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) type = 'text';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) hasError = false;\n @property({ type: String }) errorMessage = '';\n @property({ type: Number }) maxlength?: number;\n @property({ attribute: false }) callback?: (e: Event) => void;\n @property({ type: Boolean }) compact = false;\n @property({ type: Boolean }) wrapDescription = false;\n @property({ type: Number }) descriptionLines = 2;\n\n protected handleChange(e: Event) {\n if (this.disabled) return;\n const target = e.target as HTMLInputElement | HTMLSelectElement;\n this.value = target.value;\n this.callback?.(e);\n }\n\n protected renderWrapper(content: TemplateResult): TemplateResult {\n return html`\n <div class=\"flex flex-col justify-end w-full relative\">\n ${!this.compact || this.label\n ? html`<div\n class=\"flex items-baseline gap-px\"\n style=\"margin-bottom: ${this.description\n ? 'var(--axebow-input-label-gap, 1rem)'\n : 'var(--axebow-input-field-gap, 0.5rem)'}\"\n >\n ${this.required ? html`<p class=\"text-(--axebow-error) m-0 leading-none\">*</p>` : ''}\n <h4 class=\"font-semibold text-base m-0\">${this.label}</h4>\n </div>`\n : ''}\n ${this.description\n ? html`<p\n class=\"overflow-hidden font-normal text-base\"\n style=\"\n margin-bottom: var(--axebow-input-description-gap, 0.75rem);\n height: var(--axebow-input-description-height, auto);\n width: var(--axebow-input-description-width, 100%);\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: ${this.descriptionLines};\n line-clamp: ${this.descriptionLines};\n text-overflow: ellipsis;\n white-space: normal;\n \"\n title=\"${this.description}\"\n >\n ${this.description}\n </p>`\n : ''}\n ${content}\n ${!this.compact && this.hasError && this.errorMessage\n ? html`<div\n class=\"min-h-5 text-(--axebow-error) text-sm flex items-center gap-1\"\n style=\"margin-top: 0.75rem\"\n >\n <span class=\"text-base shrink-0\"\n ><axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\"></axebow-icon\n ></span>\n ${this.errorMessage}\n </div>`\n : ''}\n </div>\n `;\n }\n\n protected renderFixedField(content: TemplateResult): TemplateResult {\n return html`\n <div class=\"fixed-field ${this.wrapDescription ? 'wrap-description' : ''}\">\n ${this.label\n ? html`<div class=\"flex items-baseline gap-px field-label\">\n ${this.required\n ? html`<p class=\"text-(--axebow-error) text-base leading-4.25 m-0\">*</p>`\n : ''}\n <h4 class=\"font-semibold text-base leading-4.25 m-0 overflow-hidden text-ellipsis\">\n ${this.label}\n </h4>\n </div>`\n : ''}\n ${this.description\n ? html`<p\n class=\"field-description text-base font-normal leading-4.25 m-0\"\n style=\"\n --axebow-input-description-lines: ${this.descriptionLines};\n -webkit-line-clamp: ${this.descriptionLines};\n line-clamp: ${this.descriptionLines};\n \"\n title=\"${this.description}\"\n >\n ${this.description}\n </p>`\n : ''}\n ${content}\n ${this.hasError && this.errorMessage\n ? html`<div class=\"mt-1 min-h-5 text-(--axebow-error) text-sm flex items-center gap-1\">\n <span class=\"text-base shrink-0\"\n ><axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\"></axebow-icon\n ></span>\n ${this.errorMessage}\n </div>`\n : ''}\n </div>\n `;\n }\n}\n","import { html, css } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\n@customElement('axebow-text-input')\nexport class AxebowTextInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n .fixed-field sl-input {\n width: 100%;\n }\n .fixed-field sl-input::part(base) {\n height: 2.5rem;\n }\n .fixed-field sl-input::part(input) {\n font-size: 0.875rem;\n }\n `,\n ];\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const inputContent = html`\n <div class=\"${containerClass}\">\n <sl-input\n type=\"${this.type}\"\n ?password-toggle=\"${this.type === 'password'}\"\n @sl-input=\"${this.handleChange}\"\n placeholder=\"${this.placeholder}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n maxlength=\"${this.maxlength ?? 255}\"\n ></sl-input>\n </div>\n `;\n\n return this.compact ? this.renderWrapper(inputContent) : this.renderFixedField(inputContent);\n }\n}\n","import { html, css, PropertyValues } from 'lit';\nimport { live } from 'lit/directives/live.js';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\n@customElement('axebow-numeric-input')\nexport class AxebowNumericInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-input::part(input)::-webkit-outer-spin-button,\n sl-input::part(input)::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n sl-input::part(input) {\n -moz-appearance: textfield;\n }\n :host(.axebow-fixed-width) sl-input {\n width: var(--axebow-input-width) !important;\n }\n :host(.axebow-fixed-height) sl-input {\n --sl-input-height-medium: var(--axebow-input-height);\n }\n :host(.axebow-fixed-height) sl-input::part(base) {\n height: var(--axebow-input-height) !important;\n box-sizing: border-box;\n }\n :host(.axebow-has-stepper) sl-input::part(base) {\n padding-right: 0;\n }\n :host(.axebow-has-stepper) sl-input::part(suffix) {\n height: 100%;\n margin: 0;\n padding: 0;\n }\n .fixed-field sl-input::part(base) {\n height: 2.5rem;\n }\n :host(.axebow-fixed-min-width) .fixed-field {\n min-width: var(--axebow-input-min-width) !important;\n }\n .axebow-numeric-stepper {\n display: flex;\n flex-direction: column;\n width: 1.375rem !important;\n height: 2.375rem !important;\n border: 1px solid var(--axebow-table-header-border) !important;\n border-radius: 0 0.375rem 0.375rem 0;\n overflow: hidden;\n }\n .axebow-numeric-stepper-btn {\n flex: 1 1 0 !important;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 0;\n min-width: 0;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n .axebow-numeric-stepper-btn:first-child {\n border-bottom: 1px solid var(--axebow-table-header-border) !important;\n }\n .axebow-numeric-stepper-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n `,\n ];\n\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Boolean }) integerOnly = false;\n\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: Boolean }) showStepper = true;\n @property({ type: Number }) stepAmount = 1;\n @property({ type: Boolean }) fixedField = false;\n @property({ type: String }) minWidth?: string;\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('fixedWidth')) {\n if (this.fixedWidth) {\n this.style.setProperty('--axebow-input-width', this.fixedWidth);\n this.classList.add('axebow-fixed-width');\n } else {\n this.style.removeProperty('--axebow-input-width');\n this.classList.remove('axebow-fixed-width');\n }\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) {\n this.style.setProperty('--axebow-input-height', this.fixedHeight);\n this.classList.add('axebow-fixed-height');\n } else {\n this.style.removeProperty('--axebow-input-height');\n this.classList.remove('axebow-fixed-height');\n }\n }\n if (changed.has('showStepper')) {\n this.classList.toggle('axebow-has-stepper', this.showStepper);\n }\n if (changed.has('minWidth')) {\n if (this.minWidth) {\n this.style.setProperty('--axebow-input-min-width', this.minWidth);\n this.classList.add('axebow-fixed-min-width');\n } else {\n this.style.removeProperty('--axebow-input-min-width');\n this.classList.remove('axebow-fixed-min-width');\n }\n }\n }\n\n protected handleChange(e: Event) {\n if (this.disabled) return;\n if (this.integerOnly) {\n const target = e.target as HTMLInputElement;\n let truncated = Math.trunc(Number(target.value));\n if (truncated > this.max) {\n truncated = this.max;\n }\n target.value = truncated.toString();\n this.value = target.value;\n this.callback?.(e);\n return;\n }\n super.handleChange(e);\n }\n\n protected handleKeyDown(e: KeyboardEvent) {\n if (this.integerOnly && (e.key === '.' || e.key === ',' || e.key === 'e' || e.key === 'E')) {\n e.preventDefault();\n }\n }\n\n private _bumpValue(sign: 1 | -1) {\n if (this.disabled) return;\n const step = this.integerOnly ? Math.trunc(this.stepAmount) || 1 : this.stepAmount;\n const current = Number(this.value) || 0;\n const next = Math.min(this.max, Math.max(this.min, current + sign * step));\n\n const input = this.renderRoot.querySelector('sl-input') as (HTMLElement & { value: string }) | null;\n if (!input) return;\n input.value = next.toString();\n input.dispatchEvent(new Event('sl-input', { bubbles: true, composed: true }));\n }\n\n private _renderStepper() {\n if (!this.showStepper) return '';\n const current = Number(this.value) || 0;\n return html`\n <div slot=\"suffix\" class=\"axebow-numeric-stepper\">\n <button\n type=\"button\"\n class=\"axebow-numeric-stepper-btn\"\n ?disabled=${this.disabled || current >= this.max}\n aria-label=\"increment\"\n @click=${() => this._bumpValue(1)}\n >\n <axebow-icon iconName=\"add\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </button>\n <button\n type=\"button\"\n class=\"axebow-numeric-stepper-btn\"\n ?disabled=${this.disabled || current <= this.min}\n aria-label=\"decrement\"\n @click=${() => this._bumpValue(-1)}\n >\n <axebow-icon iconName=\"remove\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </button>\n </div>\n `;\n }\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const content = html`\n <div class=\"${containerClass}\">\n <sl-input\n type=\"number\"\n placeholder=\"${this.placeholder}\"\n @sl-input=\"${this.handleChange}\"\n @keydown=\"${this.handleKeyDown}\"\n .value=\"${live(this.value)}\"\n ?disabled=\"${this.disabled}\"\n max=${this.max}\n min=${this.min}\n step=${this.integerOnly ? '1' : 'any'}\n >\n ${this._renderStepper()}\n </sl-input>\n </div>\n `;\n return this.fixedField ? this.renderFixedField(content) : this.renderWrapper(content);\n }\n}\n","import { html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface CheckboxOption {\n value: string;\n label: string;\n}\n\n@customElement('axebow-checkbox-input')\nexport class AxebowCheckboxInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n sl-checkbox::part(base) {\n display: flex;\n align-items: flex-start;\n margin-bottom: 20px;\n margin-top: 0;\n }\n sl-checkbox::part(control) {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n sl-checkbox::part(label) {\n display: flex;\n align-items: center;\n }\n `,\n ];\n\n @property({ type: Array }) options: CheckboxOption[] = [];\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex items-center gap-12 mt-6 ml-12\">\n ${this.options.map(\n (opt) => html`\n <sl-checkbox\n .value=${opt.value}\n .checked=${this.value === opt.value}\n @sl-input=${(e: Event) => {\n if (this.disabled) return;\n this.value = (e.target as HTMLInputElement).value;\n this.requestUpdate();\n this.callback?.(e);\n }}\n ?disabled=${this.disabled}\n >\n ${opt.label}\n </sl-checkbox>\n `\n )}\n </div>\n `);\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-switch-input')\nexport class AxebowSwitchInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 15.5625rem;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) disabled = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n @property({ type: Number }) descriptionLines = 2;\n\n private handleChange(e: Event) {\n if (this.disabled) return;\n this.value = (e.target as HTMLInputElement).checked ? 'true' : '';\n this.callback?.(e);\n }\n\n render() {\n return html`\n <div class=\"flex flex-col\">\n <h4 class=\"font-semibold text-base leading-4.25 m-0 h-4.25 overflow-hidden text-ellipsis\">${this.label}</h4>\n <p\n class=\"text-base font-normal leading-4.25 m-0 mt-1 overflow-hidden\"\n style=\"\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: ${this.descriptionLines};\n line-clamp: ${this.descriptionLines};\n text-overflow: ellipsis;\n white-space: normal;\n \"\n title=\"${this.description}\"\n >\n ${this.description}\n </p>\n <sl-switch\n class=\"mt-4.5\"\n style=\"--sl-color-primary-600: var(--axebow-success);\"\n ?checked=${this.value === 'true'}\n ?disabled=${this.disabled}\n @sl-change=${this.handleChange}\n ></sl-switch>\n </div>\n `;\n }\n}\n","import { html, css } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/carousel/carousel.js';\nimport '@shoelace-style/shoelace/dist/components/carousel-item/carousel-item.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface CarouselItem {\n id: string;\n content: string;\n registry?: string;\n name?: string;\n}\n\nconst SELECTOR_MAX_WIDTH_PX = 720;\nconst CARD_WIDTH_PX = 130;\nconst CARD_HEIGHT_PX = 54;\nconst CARD_GAP_PX = 12;\n\nfunction slidesPerPageFor(containerWidthPx: number): number {\n return (containerWidthPx + CARD_GAP_PX) / (CARD_WIDTH_PX + CARD_GAP_PX);\n}\n\n@customElement('axebow-carousel-input')\nexport class AxebowCarouselInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n :host {\n --axebow-input-label-gap: 0.25rem;\n --axebow-input-description-gap: 1rem;\n --axebow-input-description-height: 1.0625rem;\n --axebow-input-description-width: 23.78125rem;\n }\n sl-carousel {\n display: block;\n width: 100%;\n max-width: ${SELECTOR_MAX_WIDTH_PX / 16}rem;\n --slide-gap: ${CARD_GAP_PX}px;\n }\n sl-carousel::part(scroll-container) {\n height: calc(${CARD_HEIGHT_PX / 16}rem + 0.5625rem) !important;\n padding-top: 0.5625rem !important;\n margin-top: -0.5625rem !important;\n }\n sl-carousel-item > div {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n `,\n ];\n\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n\n @state() private _slidesPerPage = slidesPerPageFor(SELECTOR_MAX_WIDTH_PX);\n\n @query('sl-carousel') private _carouselEl?: HTMLElement;\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width;\n if (width) this._slidesPerPage = slidesPerPageFor(width);\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n protected firstUpdated() {\n if (this._carouselEl) this._resizeObserver?.observe(this._carouselEl);\n }\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex flex-wrap justify-between\">\n <sl-carousel\n navigation\n slides-per-page=\"${this._slidesPerPage}\"\n @sl-input=\"${this.handleChange}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n >\n ${this.carouselItems.map((item) =>\n this.carouselItemRenderer\n ? this.carouselItemRenderer(item)\n : html`\n <sl-carousel-item>\n <div\n class=\"rounded-md border-2 border-solid border-transparent p-4 transition-all duration-300 cursor-pointer text-center flex gap-4 items-center\"\n >\n ${item.content}\n </div>\n </sl-carousel-item>\n `\n )}\n </sl-carousel>\n </div>\n `);\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-selector-card')\nexport class AxebowSelectorCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n .card-wrapper {\n position: relative;\n gap: calc(var(--spacing) * 0.5);\n border-color: var(--color-gray-200);\n background-color: transparent;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n }\n @media (min-width: 48rem) {\n .card-wrapper {\n gap: var(--spacing);\n }\n }\n @media (min-width: 64rem) {\n .card-wrapper {\n gap: calc(var(--spacing) * 2);\n }\n }\n .card-wrapper:not(.selected):hover {\n border-color: var(--axebow-tertiary);\n }\n .card-wrapper.selected {\n border-color: var(--axebow-primary);\n background-color: var(--axebow-white);\n }\n .registry-logo {\n height: calc(var(--spacing) * 3);\n aspect-ratio: 1 / 1;\n object-fit: contain;\n flex-shrink: 0;\n }\n @media (min-width: 64rem) {\n .registry-logo {\n height: calc(var(--spacing) * 6);\n }\n }\n p {\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n `,\n ];\n\n @property({ type: String }) cardId = '';\n @property({ type: String }) logoSrc = '';\n @property({ type: Boolean }) selected = false;\n @property({ type: Boolean }) disabled = false;\n\n render() {\n return html`\n <div\n class=\"card-wrapper rounded-lg border border-solid p-2 text-center transition-all duration-300 ease-in-out flex items-center justify-center ${this.selected ? 'selected' : ''} ${this.disabled ? 'opacity-60 pointer-events-none' : 'cursor-pointer'}\"\n >\n <img class=\"registry-logo\" src=\"${this.logoSrc}\" alt=\"${this.cardId}\" />\n <p class=\"m-0\">${this.cardId}</p>\n ${this.selected\n ? html`\n <div\n class=\"absolute -top-2.25 -right-2.25 z-10 w-4.5 h-4.5 rounded-full bg-(--axebow-white) flex items-center justify-center\"\n >\n <axebow-icon iconName=\"check_circle\" filled iconColor=\"var(--axebow-primary)\" size=\"xl\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-selector-card': AxebowSelectorCard;\n }\n}\n","import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\nimport { CarouselItem } from './axebow-carousel-input.js';\nimport '../axebow-selector-card/axebow-selector-card.js';\n\n@customElement('axebow-providers-input')\nexport class AxebowProvidersInput extends AxebowInputBase {\n static styles = [...AxebowInputBase.baseStyles];\n\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n\n private _handleSelect(item: CarouselItem) {\n if (this.disabled) return;\n this.value = item.id;\n\n const event = new Event('change', { bubbles: true, composed: true });\n Object.defineProperty(event, 'target', {\n value: { value: item.id },\n writable: false,\n });\n\n this.dispatchEvent(event);\n this.callback?.(event);\n }\n\n render() {\n return this.renderWrapper(html`\n <div class=\"flex flex-wrap gap-3 mt-0\">\n ${this.carouselItems.map((item) => {\n const isSelected = this.value === item.id || this.value === item.name;\n return this.carouselItemRenderer\n ? this.carouselItemRenderer(item)\n : html`\n <axebow-selector-card\n .cardId=${item.id}\n .logoSrc=${item.content}\n .selected=${isSelected}\n .disabled=${this.disabled}\n @click=${() => this._handleSelect(item)}\n ></axebow-selector-card>\n `;\n })}\n </div>\n `);\n }\n}\n","import { html, css, PropertyValues, TemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-button/axebow-button.js';\nimport { AxebowInputBase } from './axebow-input-base.js';\n\nexport interface SelectOption {\n value: string;\n label: string | TemplateResult;\n}\n\nexport interface AddDialogLabels {\n title: string;\n intro: string;\n nameLabel: string;\n namePlaceholder: string;\n requiredField: string;\n duplicateItem: string;\n cancel: string;\n save: string;\n}\n\nexport const DEFAULT_ADD_DIALOG_LABELS: AddDialogLabels = {\n title: 'Add New Item',\n intro: 'Enter the information for the new item.',\n nameLabel: 'Name',\n namePlaceholder: '',\n requiredField: 'This field is required',\n duplicateItem: 'An item with this name already exists',\n cancel: 'Cancel',\n save: 'Save',\n};\n\n@customElement('axebow-select-input')\nexport class AxebowSelectInput extends AxebowInputBase {\n static styles = [\n ...AxebowInputBase.baseStyles,\n css`\n .add-option {\n font-weight: bold;\n color: var(--axebow-tertiary);\n }\n .fixed-field sl-select {\n width: 100%;\n }\n .fixed-field sl-select::part(combobox) {\n height: 2.5rem;\n }\n .fixed-field sl-select::part(display-input) {\n font-size: 0.875rem;\n }\n :host(.axebow-fixed-min-width) .fixed-field {\n min-width: var(--axebow-input-min-width) !important;\n }\n :host(.axebow-fixed-height) sl-select::part(combobox) {\n height: var(--axebow-input-height) !important;\n box-sizing: border-box;\n }\n `,\n ];\n\n @property({ type: String }) minWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n\n @property({ type: Array }) options: SelectOption[] = [];\n @property({ type: Boolean }) allowAddNew = false;\n @property({ type: String }) addNewLabel = '+ Add new...';\n @property({ type: String }) emptyOptionLabel = 'Select option';\n @property({ type: Boolean }) showAddDialogInside = true;\n @property({ type: Boolean }) clearable = true;\n @property({ attribute: false }) onAddNew?: (newItem: { value: string; label: string; description?: string }) => void;\n @property({ attribute: false }) addDialogLabels: AddDialogLabels = DEFAULT_ADD_DIALOG_LABELS;\n\n @state() private showAddDialog = false;\n @state() private newItemName = '';\n @state() private newItemDescription = '';\n\n updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('minWidth')) {\n if (this.minWidth) {\n this.style.setProperty('--axebow-input-min-width', this.minWidth);\n this.classList.add('axebow-fixed-min-width');\n } else {\n this.style.removeProperty('--axebow-input-min-width');\n this.classList.remove('axebow-fixed-min-width');\n }\n }\n if (changed.has('fixedHeight')) {\n if (this.fixedHeight) {\n this.style.setProperty('--axebow-input-height', this.fixedHeight);\n this.classList.add('axebow-fixed-height');\n } else {\n this.style.removeProperty('--axebow-input-height');\n this.classList.remove('axebow-fixed-height');\n }\n }\n }\n\n private handleSelectChange(e: Event) {\n if (this.disabled) return;\n const target = e.target as HTMLSelectElement;\n if (this.allowAddNew && target.value === '__add_new__') {\n setTimeout(() => {\n target.value = this.value;\n }, 0);\n if (this.showAddDialogInside) {\n this.showAddDialog = true;\n this.updateComplete.then(() => {\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n setTimeout(() => input?.focus(), 100);\n });\n } else {\n this.onAddNew?.({ value: '__add_new__', label: this.addNewLabel });\n }\n return;\n }\n this.handleChange(e);\n }\n\n private createSlug(name: string): string {\n return name\n .toLowerCase()\n .normalize('NFD')\n .replace(new RegExp('[\\\\u0300-\\\\u036f]', 'g'), '')\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '');\n }\n\n private saveNewItem() {\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n if (!this.newItemName.trim()) {\n input?.setCustomValidity(this.addDialogLabels.requiredField);\n input?.reportValidity();\n return;\n }\n input?.setCustomValidity('');\n const itemValue = this.createSlug(this.newItemName);\n if (this.options.find((opt) => opt.value === itemValue)) {\n input?.setCustomValidity(this.addDialogLabels.duplicateItem);\n input?.reportValidity();\n return;\n }\n const newItem = {\n value: itemValue,\n label: this.newItemName.trim(),\n description: this.newItemDescription.trim(),\n };\n this.onAddNew?.(newItem);\n this.closeAddDialog();\n }\n\n private cancelNewItem() {\n this.closeAddDialog();\n }\n\n private closeAddDialog() {\n this.showAddDialog = false;\n this.newItemName = '';\n this.newItemDescription = '';\n const input = this.shadowRoot?.querySelector('#new-item-input') as any;\n input?.setCustomValidity('');\n }\n\n private handleDialogKeydown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.saveNewItem();\n }\n }\n\n render() {\n const containerClass = this.hasError ? 'input-error' : '';\n const selectOptions = this.allowAddNew\n ? [...this.options, { value: '__add_new__', label: this.addNewLabel }]\n : this.options;\n\n const selectTemplate = html`\n <div class=\"${containerClass}\">\n <sl-select\n placeholder=\"${this.placeholder || this.emptyOptionLabel}\"\n @sl-input=\"${this.allowAddNew ? this.handleSelectChange : this.handleChange}\"\n .value=\"${this.value}\"\n ?disabled=\"${this.disabled}\"\n ?clearable=${this.clearable}\n >\n ${selectOptions.map(\n (opt) =>\n html`<sl-option value=\"${opt.value}\" class=\"${opt.value === '__add_new__' ? 'add-option' : ''}\"\n >${opt.label}</sl-option\n >`\n )}\n </sl-select>\n </div>\n `;\n\n const dialogTemplate = this.allowAddNew\n ? html`\n <sl-dialog\n ?open=\"${this.showAddDialog}\"\n label=\"${this.addDialogLabels.title}\"\n @sl-after-hide=\"${this.closeAddDialog}\"\n >\n <div class=\"flex flex-col gap-4\">\n <p>${this.addDialogLabels.intro}</p>\n <sl-input\n id=\"new-item-input\"\n label=\"${this.addDialogLabels.nameLabel}\"\n placeholder=\"${this.addDialogLabels.namePlaceholder}\"\n .value=\"${this.newItemName}\"\n @sl-input=\"${(e: Event) => {\n this.newItemName = (e.target as HTMLInputElement).value;\n }}\"\n @keydown=\"${this.handleDialogKeydown}\"\n required\n maxlength=\"100\"\n ></sl-input>\n </div>\n <div class=\"flex justify-end gap-3 mt-6\" slot=\"footer\">\n <axebow-button variant=\"default\" @click=\"${this.cancelNewItem}\"\n >${this.addDialogLabels.cancel}</axebow-button\n >\n <axebow-button variant=\"primary\" @click=\"${this.saveNewItem}\"\n >${this.addDialogLabels.save}</axebow-button\n >\n </div>\n </sl-dialog>\n `\n : '';\n\n const content = html`${selectTemplate}${dialogTemplate}`;\n return this.compact ? this.renderWrapper(content) : this.renderFixedField(content);\n }\n}\n","import { css } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { AxebowSelectInput } from './axebow-select-input.js';\n\n@customElement('axebow-select-input-with-divider')\nexport class AxebowSelectInputWithDivider extends AxebowSelectInput {\n static styles = [\n ...AxebowSelectInput.styles,\n css`\n sl-select {\n --sl-color-primary-600: var(--axebow-white, #ffffff);\n }\n sl-select::part(listbox) {\n border: 1px solid var(--axebow-tertiary) !important;\n padding-bottom: 0 !important;\n }\n sl-option::part(base):hover {\n background-color: var(--axebow-base) !important;\n }\n sl-option::part(checked-icon) {\n display: none !important;\n }\n sl-select sl-option[aria-selected='true']::part(base) {\n background-color: var(--axebow-white, #ffffff) !important;\n color: var(--axebow-black, #000000) !important;\n }\n sl-option[aria-selected='true']::part(label) {\n font-weight: 600 !important;\n color: var(--axebow-black, #000000) !important;\n }\n sl-option.add-option::part(base) {\n border-top: 1px solid var(--axebow-gray) !important;\n margin-top: 0.25rem;\n box-sizing: border-box;\n width: 35.6875rem;\n height: 2.5rem;\n margin-inline: auto;\n padding: 0.25rem 0;\n justify-content: center;\n }\n sl-option.add-option::part(label) {\n flex: none;\n text-align: center;\n }\n sl-option.add-option::part(base):hover {\n background-color: var(--axebow-base) !important;\n color: var(--axebow-gray) !important;\n }\n `,\n ];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-select-input-with-divider': AxebowSelectInputWithDivider;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { CarouselItem } from './axebow-carousel-input.js';\nimport { AddDialogLabels, DEFAULT_ADD_DIALOG_LABELS } from './axebow-select-input.js';\nimport './axebow-text-input.js';\nimport './axebow-numeric-input.js';\nimport './axebow-select-input.js';\nimport './axebow-checkbox-input.js';\nimport './axebow-carousel-input.js';\nimport './axebow-providers-input.js';\nimport './axebow-switch-input.js';\n\nexport type ControlType = 'input' | 'select' | 'carousel' | 'numeric' | 'integer' | 'checkbox' | 'providers' | 'switch';\nexport interface Option {\n value: string;\n label: string | TemplateResult;\n}\n\nexport type { CarouselItem, AddDialogLabels };\n\n/**\n * Factory/dispatcher: picks the right concrete axebow-*-input for the\n * requested controlType and forwards the shared props to it. Adding a new\n * control type only means adding a case here (Open/Closed) - callers never\n * need to know which concrete input backs a given controlType.\n */\n@customElement('axebow-input')\nexport class AxebowInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n axebow-numeric-input {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) value = '';\n @property({ type: String }) type = 'text';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n @property({ type: String }) controlType: ControlType = 'input';\n @property({ type: Array }) options: Option[] = [];\n @property({ type: Array }) carouselItems: CarouselItem[] = [];\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ attribute: false }) carouselItemRenderer?: (item: CarouselItem) => unknown;\n @property({ type: String }) errorMessage = '';\n @property({ type: Boolean }) hasError = false;\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Number }) maxlength?: number;\n @property({ type: Boolean }) allowAddNew = false;\n @property({ type: String }) addNewLabel = '+ Add new...';\n @property({ type: String }) emptyOptionLabel = 'Select option';\n @property({ type: Boolean }) showAddDialogInside = true;\n @property({ type: Boolean }) clearable = true;\n @property({ attribute: false }) onAddNew?: (newItem: { value: string; label: string; description?: string }) => void;\n @property({ attribute: false }) addDialogLabels: AddDialogLabels = DEFAULT_ADD_DIALOG_LABELS;\n @property({ type: Boolean }) compact = false;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) minWidth?: string;\n @property({ type: Boolean }) showStepper = true;\n @property({ type: Number }) stepAmount = 1;\n @property({ type: Boolean }) fixedField = false;\n @property({ type: Boolean }) wrapDescription = false;\n @property({ type: Number }) descriptionLines = 2;\n\n render() {\n switch (this.controlType) {\n case 'input':\n return html`\n <axebow-text-input\n .type=${this.type}\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .maxlength=${this.maxlength}\n .compact=${this.compact}\n .descriptionLines=${this.descriptionLines}\n ></axebow-text-input>\n `;\n case 'numeric':\n return html`\n <axebow-numeric-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .max=${this.max}\n .min=${this.min}\n .compact=${this.compact}\n .fixedWidth=${this.fixedWidth}\n .fixedHeight=${this.fixedHeight}\n .showStepper=${this.showStepper}\n .stepAmount=${this.stepAmount}\n .fixedField=${this.fixedField}\n .minWidth=${this.minWidth}\n .descriptionLines=${this.descriptionLines}\n ></axebow-numeric-input>\n `;\n case 'integer':\n return html`\n <axebow-numeric-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .max=${this.max}\n .min=${this.min}\n .integerOnly=${true}\n .compact=${this.compact}\n .fixedWidth=${this.fixedWidth}\n .fixedHeight=${this.fixedHeight}\n .showStepper=${this.showStepper}\n .stepAmount=${this.stepAmount}\n .fixedField=${this.fixedField}\n .minWidth=${this.minWidth}\n .descriptionLines=${this.descriptionLines}\n ></axebow-numeric-input>\n `;\n case 'select':\n return html`\n <axebow-select-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .options=${this.options}\n .allowAddNew=${this.allowAddNew}\n .addNewLabel=${this.addNewLabel}\n .emptyOptionLabel=${this.emptyOptionLabel}\n .showAddDialogInside=${this.showAddDialogInside}\n .clearable=${this.clearable}\n .onAddNew=${this.onAddNew}\n .addDialogLabels=${this.addDialogLabels}\n .minWidth=${this.minWidth}\n .fixedHeight=${this.fixedHeight}\n .wrapDescription=${this.wrapDescription}\n .descriptionLines=${this.descriptionLines}\n ></axebow-select-input>\n `;\n case 'checkbox':\n return html`\n <axebow-checkbox-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .options=${this.options}\n .descriptionLines=${this.descriptionLines}\n ></axebow-checkbox-input>\n `;\n case 'switch':\n return html`\n <axebow-switch-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .disabled=${this.disabled}\n .callback=${this.callback}\n .descriptionLines=${this.descriptionLines}\n ></axebow-switch-input>\n `;\n case 'carousel':\n return html`\n <axebow-carousel-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .carouselItems=${this.carouselItems}\n .carouselItemRenderer=${this.carouselItemRenderer}\n .descriptionLines=${this.descriptionLines}\n ></axebow-carousel-input>\n `;\n case 'providers':\n return html`\n <axebow-providers-input\n .value=${this.value}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .carouselItems=${this.carouselItems}\n .carouselItemRenderer=${this.carouselItemRenderer}\n .descriptionLines=${this.descriptionLines}\n ></axebow-providers-input>\n `;\n default:\n return html`\n <axebow-text-input\n .value=${this.value}\n .placeholder=${this.placeholder}\n .label=${this.label}\n .description=${this.description}\n .required=${this.required}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .errorMessage=${this.errorMessage}\n .callback=${this.callback}\n .maxlength=${this.maxlength}\n .compact=${this.compact}\n .descriptionLines=${this.descriptionLines}\n ></axebow-text-input>\n `;\n }\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport './axebow-select-input-with-divider.js';\nimport './axebow-input.js';\nimport '../axebow-button/axebow-button.js';\nimport type { SelectOption } from './axebow-select-input.js';\n\n@customElement('axebow-plan-select-field')\nexport class AxebowPlanSelectField extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Array }) options: SelectOption[] = [];\n @property({ type: String }) value = '';\n @property({ type: String }) availablePlansLabel = '';\n @property({ type: String }) noPlansLabel = '';\n @property({ type: String }) createPlanLabel = '';\n @property({ type: String }) createNewPlanLabel = '';\n @property({ attribute: false }) onPlanChange?: (value: string) => void;\n @property({ attribute: false }) onCreatePlan?: () => void;\n\n private handleChange(e: Event) {\n const value = (e.target as HTMLSelectElement).value;\n this.onPlanChange?.(value);\n }\n\n render() {\n const hasPlans = this.options.length > 0;\n\n return hasPlans\n ? html`\n <div class=\"flex flex-col relative w-144.75 max-w-full\">\n <axebow-select-input-with-divider\n label=\"${this.availablePlansLabel}\"\n required\n .clearable=${false}\n .value=${this.value}\n .options=${this.options}\n .allowAddNew=${true}\n addNewLabel=\"${this.createNewPlanLabel}\"\n .showAddDialogInside=${false}\n .onAddNew=${() => this.onCreatePlan?.()}\n .callback=${(e: Event) => this.handleChange(e)}\n >\n </axebow-select-input-with-divider>\n </div>\n `\n : html` <div class=\"flex gap-4 relative flex-1 lg:min-w-150 min-w-full items-end flex-wrap\">\n <axebow-input class=\"flex-1\" label=\"${this.availablePlansLabel}\" value=\"${this.noPlansLabel}\" disabled>\n </axebow-input>\n <axebow-button @click=\"${() => this.onCreatePlan?.()}\">${this.createPlanLabel}</axebow-button>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-plan-select-field': AxebowPlanSelectField;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-tags-input')\nexport class AxebowTagsInput extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: String }) description = '';\n @property({ type: Boolean }) required = false;\n @property({ type: String }) placeholder = '';\n @property({ type: Array }) tags: string[] = [];\n @property({ type: String }) currentInput = '';\n @property({ type: Number }) maxlength = 254;\n @property({ attribute: false }) onTagsChange?: (tags: string[]) => void;\n @property({ attribute: false }) onCurrentInputChange?: (value: string) => void;\n\n private _handleKeyDown(e: KeyboardEvent) {\n const input = e.target as HTMLInputElement;\n if (e.key === ',' || e.key === 'Enter') {\n e.preventDefault();\n this._commitCurrentInput(input.value);\n } else if (e.key === 'Backspace' && input.value === '' && this.tags.length > 0) {\n this.onTagsChange?.(this.tags.slice(0, -1));\n }\n }\n\n private _handleInputChange(e: Event) {\n const input = e.target as HTMLInputElement;\n const value = input.value;\n if (value.includes(',')) {\n const parts = value\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n const last = parts.pop() ?? '';\n this.onTagsChange?.([...this.tags, ...parts.filter((p) => !this.tags.includes(p))]);\n this.onCurrentInputChange?.(last);\n input.value = last;\n } else {\n this.onCurrentInputChange?.(value);\n }\n }\n\n private _commitCurrentInput(raw: string) {\n const value = raw.replace(/,/g, '').trim();\n if (value && !this.tags.includes(value)) {\n this.onTagsChange?.([...this.tags, value]);\n }\n this.onCurrentInputChange?.('');\n const input = this.shadowRoot?.querySelector<HTMLInputElement>('.tag-field');\n if (input) input.value = '';\n }\n\n private _removeTag(tag: string) {\n this.onTagsChange?.(this.tags.filter((t) => t !== tag));\n }\n\n render() {\n return html`\n <div>\n <label class=\"flex items-center gap-1 text-base font-semibold text-black mb-1\">\n ${this.required ? html`<span class=\"text-(--axebow-error)\">*</span>` : ''}\n ${this.label}\n </label>\n ${this.description ? html`<p class=\"text-base text-black mb-1.5\">${this.description}</p>` : ''}\n <div\n class=\"flex flex-wrap items-center gap-1.5 min-h-9 px-2 py-1.5\n border border-solid border-gray-300 rounded-md bg-white cursor-text\n focus-within:border-blue-500 focus-within:ring-2 focus-within:ring-blue-100\n transition-shadow\"\n @click=${() => this.shadowRoot?.querySelector<HTMLInputElement>('.tag-field')?.focus()}\n >\n ${this.tags.map(\n (tag) => html`\n <span\n class=\"group inline-flex items-center gap-1 pl-2 pr-1 py-0.5\n border border-solid border-gray-300 rounded text-base bg-gray-50 text-black\n max-w-44 transition-colors\n hover:border-red-300 hover:bg-red-50\"\n title=${tag}\n >\n <span class=\"truncate\">${tag}</span>\n <button\n class=\"inline-flex items-center justify-center w-3.5 h-3.5 shrink-0\n text-black\n bg-transparent border-none cursor-pointer p-0 leading-none\n transition-colors\"\n @click=${(e: Event) => {\n e.stopPropagation();\n this._removeTag(tag);\n }}\n aria-label=\"Remove ${tag}\"\n >\n x\n </button>\n </span>\n `\n )}\n\n <input\n class=\"tag-field flex-1 min-w-30 border-none outline-none bg-transparent\n text-base py-0.5 font-[inherit] text-inherit placeholder-gray-400\"\n type=\"text\"\n placeholder=${this.tags.length === 0 ? this.placeholder : ''}\n .value=${this.currentInput}\n @keydown=${(e: KeyboardEvent) => this._handleKeyDown(e)}\n @input=${(e: Event) => this._handleInputChange(e)}\n @blur=${(e: FocusEvent) => this._commitCurrentInput((e.target as HTMLInputElement).value)}\n maxlength=${this.maxlength}\n />\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-tags-input': AxebowTagsInput;\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport type TabSelectorVariant = 'forms-tab' | 'sections-tab';\n\n@customElement('axebow-tab-selector')\nexport class AxebowTabSelector extends LitElement {\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Number }) activeTab?: number;\n @property({ type: Boolean }) bordered = false;\n @property({ type: String }) variant: TabSelectorVariant = 'forms-tab';\n /** sections-tab only: when true (default) tabs fill the full bar; when false they are compact at the start */\n @property({ type: Boolean }) stretch = true;\n\n @state() private _activeTab = 0;\n @state() private _tabCount = 0;\n @state() private _tabDisabled: boolean[] = [];\n\n private _observer: MutationObserver | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n button {\n font-family: inherit;\n }\n\n /* forms-tab hover underline */\n button.tab-inactive:not(:disabled) {\n position: relative;\n }\n button.tab-inactive:not(:disabled):hover::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 2px;\n background-color: var(--axebow-tertiary);\n border-radius: 0.25rem;\n }\n\n :host([disabled]) {\n opacity: 0.6;\n pointer-events: none;\n cursor: not-allowed;\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this._updateTabCount());\n this._observer.observe(this, { childList: true, attributes: true, attributeFilter: ['disabled'], subtree: true });\n this._updateTabCount();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n }\n\n protected firstUpdated() {\n this._updateTabCount();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('activeTab') && this.activeTab !== undefined && this._activeTab !== this.activeTab) {\n this._activeTab = this.activeTab;\n }\n if (changedProperties.has('disabled')) {\n this.toggleAttribute('disabled', this.disabled);\n }\n }\n\n private _updateTabCount() {\n const labelEls = Array.from(this.children).filter((el) => el.getAttribute('slot')?.startsWith('tab-label-'));\n const count = labelEls.length;\n if (count !== this._tabCount) {\n if (this._activeTab >= count) this._activeTab = 0;\n this._tabCount = count;\n }\n this._tabDisabled = Array.from({ length: this._tabCount }, (_, i) => {\n const el = this.querySelector(`[slot=\"tab-label-${i}\"]`);\n return el?.hasAttribute('disabled') ?? false;\n });\n }\n\n private _selectTab(index: number) {\n if (this.disabled || this._tabDisabled[index]) return;\n this._activeTab = index;\n this.dispatchEvent(new CustomEvent('tab-change', { detail: { index }, bubbles: true, composed: true }));\n }\n\n private _renderFormsTab(tabs: number[]) {\n const isFirstActive = this._activeTab === 0;\n const isLastActive = this._activeTab === this._tabCount - 1;\n\n return html`\n <div class=\"w-full max-w-194.25 rounded-md box-border\">\n <div class=\"w-full h-8 flex bg-(--axebow-base) gap-1 rounded-t-xl box-border\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"flex-1 h-8 flex items-center justify-center gap-2 transition-colors duration-200 font-medium\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-60 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? `bg-white text-(--axebow-primary) rounded-t-lg tab-active ${\n this.bordered\n ? 'border-t border-l border-r border-(--axebow-table-header-border)'\n : 'border-none'\n }`\n : 'bg-transparent text-(--axebow-secondary) rounded-md tab-inactive border-none'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <axebow-icon\n iconName=\"${active ? 'radio_button_checked' : 'radio_button_unchecked'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"base\"\n ></axebow-icon>\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n </div>\n\n <div\n class=\"w-full min-h-35 p-4 bg-white rounded-b-xl box-border ${isFirstActive\n ? ''\n : 'rounded-tl-xl'} ${isLastActive ? '' : 'rounded-tr-xl'} ${this.bordered\n ? 'border-l border-r border-b border-(--axebow-table-header-border)'\n : ''}\"\n >\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _renderSectionsTab(tabs: number[]) {\n return html`\n <div class=\"flex w-full\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"${this.stretch ? 'flex-1' : 'px-4'} h-8 flex items-center justify-center text-sm font-medium bg-transparent\n transition-colors duration-200\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? 'text-[#344966] border-b-2 border-solid border-[#344966] border-t-0 border-l-0 border-r-0'\n : 'text-(--axebow-secondary) border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0 hover:text-(--axebow-tertiary)'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n ${!this.stretch ? html`<div class=\"flex-1 border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0\"></div>` : ''}\n </div>\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n `;\n }\n\n render() {\n const tabs = Array.from({ length: this._tabCount }, (_, i) => i);\n return this.variant === 'sections-tab'\n ? this._renderSectionsTab(tabs)\n : this._renderFormsTab(tabs);\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-tab-selector/axebow-tab-selector.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-selector-card/axebow-selector-card.js';\nimport { CarouselItem } from '../axebow-input/axebow-carousel-input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface RegistrySelectorLabels {\n registryLabel: string;\n registryDescription: string;\n defaultRegistryTabLabel: string;\n oneShotRegistryTabLabel: string;\n oneShotRegistryDescription: string;\n registryUrlLabel: string;\n registryUrlPlaceholder: string;\n registryUrlInvalidLabel: string;\n registryCredentialsLabel: string;\n registryCredentialsPlaceholder: string;\n createNewSecretLabel: string;\n noSecretsAvailableLabel: string;\n}\n\nexport interface RegistrySecretOption {\n name: string;\n}\n\nfunction isValidRegistryUrl(value: string): boolean {\n if (!value) return true;\n try {\n const urlToParse = value.includes('://') ? value : `https://${value}`;\n return new URL(urlToParse).hostname.includes('.');\n } catch {\n return false;\n }\n}\n\n@customElement('axebow-registry-selector')\nexport class AxebowRegistrySelector extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: Boolean }) disabled = false;\n @property({ type: Number }) activeTab = 0;\n @property({ type: Array }) registries: CarouselItem[] = [];\n @property({ type: String }) selectedRegistry = '';\n @property({ type: String }) oneShotRegistryUrl = '';\n @property({ type: String }) oneShotRegistrySecret = '';\n @property({ type: Array }) secrets: RegistrySecretOption[] = [];\n @property({ attribute: false }) labels!: RegistrySelectorLabels;\n\n @property({ attribute: false }) onTabChange?: (index: number) => void;\n @property({ attribute: false }) onRegistrySelect?: (registry: CarouselItem) => void;\n @property({ attribute: false }) onRegistryUrlChange?: (value: string) => void;\n @property({ attribute: false }) onRegistrySecretSelect?: (secretName: string) => void;\n @property({ attribute: false }) onCreateSecret?: () => void;\n @property({ attribute: false }) onValidityChange?: (isValid: boolean) => void;\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (changedProperties.has('oneShotRegistryUrl') || changedProperties.has('activeTab')) {\n this.onValidityChange?.(this.activeTab !== 1 || isValidRegistryUrl(this.oneShotRegistryUrl));\n }\n }\n\n private _isRegistrySelected(registry: CarouselItem): boolean {\n return !!registry.registry && registry.registry === this.selectedRegistry;\n }\n\n private _secretOptions(): RegistrySecretOption[] {\n const options = [...this.secrets];\n if (this.oneShotRegistrySecret && !options.some((s) => s.name === this.oneShotRegistrySecret)) {\n options.push({ name: this.oneShotRegistrySecret });\n }\n return options;\n }\n\n private _renderRegistryItem(registry: CarouselItem): TemplateResult {\n const isSelected = this._isRegistrySelected(registry);\n\n return html`\n <sl-carousel-item>\n <axebow-selector-card\n .cardId=${registry.id}\n .logoSrc=${registry.content}\n .selected=${isSelected}\n .disabled=${this.disabled}\n @click=${() => {\n if (!this.disabled) this.onRegistrySelect?.(registry);\n }}\n ></axebow-selector-card>\n </sl-carousel-item>\n `;\n }\n\n private _renderRegistryCarousel(): TemplateResult {\n return html`\n <axebow-input\n .disabled=${this.disabled}\n label=\"${this.labels.registryLabel}\"\n required\n description=\"${this.labels.registryDescription}\"\n controlType=\"carousel\"\n .value=\"${this.selectedRegistry}\"\n .carouselItems=\"${this.registries}\"\n .carouselItemRenderer=${(registry: CarouselItem) => this._renderRegistryItem(registry)}\n ></axebow-input>\n `;\n }\n\n private _renderOneShotRegistryInputs(): TemplateResult {\n const secretOptions = this._secretOptions();\n const urlValid = isValidRegistryUrl(this.oneShotRegistryUrl);\n\n return html`\n <div class=\"flex flex-col gap-4\">\n <p>${unsafeHTML(this.labels.oneShotRegistryDescription)}</p>\n <div class=\"flex gap-[2%] w-full\">\n <div class=\"flex-1 min-w-0\">\n <axebow-input\n label=\"${this.labels.registryUrlLabel}\"\n placeholder=\"${this.labels.registryUrlPlaceholder}\"\n required\n .value=\"${this.oneShotRegistryUrl}\"\n .hasError=\"${!urlValid}\"\n .errorMessage=\"${this.labels.registryUrlInvalidLabel}\"\n .callback=${(e: Event) => this.onRegistryUrlChange?.((e.target as HTMLInputElement).value)}\n maxlength=\"500\"\n ></axebow-input>\n </div>\n <div class=\"flex-1 min-w-0 flex flex-col\">\n <div class=\"flex items-baseline gap-2\" style=\"height: 1.0625rem; margin-bottom: 0.25rem;\">\n <h4 class=\"font-semibold text-base leading-4.25 m-0 overflow-hidden text-ellipsis\">\n ${this.labels.registryCredentialsLabel}\n </h4>\n </div>\n <sl-select\n placeholder=\"${this.labels.registryCredentialsPlaceholder}\"\n clearable\n hoist\n .value=\"${this.oneShotRegistrySecret}\"\n @sl-change=${(e: Event) => this.onRegistrySecretSelect?.((e.target as HTMLSelectElement).value)}\n >\n <div\n class=\"flex items-center gap-2 cursor-pointer px-4 py-1\"\n @click=${(e: Event) => {\n e.stopPropagation();\n this.onCreateSecret?.();\n }}\n >\n <axebow-icon iconName=\"add\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n ${this.labels.createNewSecretLabel}\n </div>\n ${secretOptions.length > 0 ? html`<axebow-divider margin=\"0.25rem 0\"></axebow-divider>` : ''}\n ${secretOptions.map((s) => html`<sl-option value=\"${s.name}\">${s.name}</sl-option>`)}\n ${secretOptions.length === 0\n ? html`<sl-option disabled>${this.labels.noSecretsAvailableLabel}</sl-option>`\n : ''}\n </sl-select>\n </div>\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <axebow-tab-selector\n class=\"w-full\"\n .disabled=${this.disabled}\n .activeTab=${this.activeTab}\n @tab-change=${(e: CustomEvent) => this.onTabChange?.(e.detail.index)}\n >\n <span slot=\"tab-label-0\">${this.labels.defaultRegistryTabLabel}</span>\n <div slot=\"tab-panel-0\">${this._renderRegistryCarousel()}</div>\n\n <span slot=\"tab-label-1\">${this.labels.oneShotRegistryTabLabel}</span>\n <div slot=\"tab-panel-1\">${this._renderOneShotRegistryInputs()}</div>\n </axebow-tab-selector>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-registry-selector': AxebowRegistrySelector;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport type DialogType = 'basic' | 'form' | 'custom';\nexport type DialogButtonVariant = 'default' | 'primary' | 'success' | 'neutral' | 'warning' | 'danger' | 'text';\n\nexport interface DialogButtonConfig {\n label: string;\n variant?: DialogButtonVariant;\n outline?: boolean;\n disabled?: boolean;\n loading?: boolean;\n onClick?: () => void;\n}\n\n@customElement('axebow-dialog')\nexport class AxebowDialog extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(body) {\n padding: 1.5rem 1.5rem 0 1.5rem;\n }\n sl-dialog::part(footer) {\n padding: 2rem 1.5rem 1.5rem 1.5rem;\n }\n `,\n ];\n\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ type: String }) type: DialogType = 'basic';\n @property({ type: String }) dialogTitle = '';\n @property({ type: String }) icon = '';\n @property({ type: String }) iconColor = '';\n @property({ type: String }) description = '';\n\n @property({ attribute: false }) button1?: DialogButtonConfig;\n @property({ attribute: false }) button2?: DialogButtonConfig;\n @property({ attribute: false }) button3?: DialogButtonConfig;\n\n @property({ type: Boolean }) canCancel = false;\n @property({ type: String }) cancelLabel = 'Cancel';\n @property({ attribute: false }) onCancel?: () => void;\n\n @property({ type: Boolean }) canClose = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ attribute: false }) onClose?: () => void;\n @property({ type: String }) closeIcon = 'close';\n @property({ type: String }) closeIconColor = 'var(--axebow-primary)';\n\n @state() private _hasDescriptionSlotContent = false;\n\n private _onDescriptionSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n this._hasDescriptionSlotContent = slot.assignedNodes({ flatten: true }).some((node) => {\n return node.nodeType === Node.ELEMENT_NODE || !!node.textContent?.trim();\n });\n }\n\n private get _buttons(): DialogButtonConfig[] {\n return [this.button1, this.button2, this.button3].filter((button): button is DialogButtonConfig => !!button);\n }\n\n render() {\n const hasTrailingContent = this.type === 'form' || this.type === 'custom';\n const showDescription = !!this.description || this._hasDescriptionSlotContent;\n\n return html`\n <sl-dialog\n ?open=${this.open}\n no-header\n label=${this.dialogTitle}\n @sl-request-close=${(e: CustomEvent) => e.preventDefault()}\n >\n <div class=\"flex items-center justify-between gap-4 mb-6\">\n <div class=\"flex items-center gap-4 min-w-0\">\n ${this.icon\n ? html`<axebow-icon iconName=${this.icon} iconColor=${this.iconColor}></axebow-icon>`\n : ''}\n <h2 class=\"m-0 font-semibold text-lg truncate\">${this.dialogTitle}</h2>\n </div>\n ${this.canClose\n ? html`\n <button\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0\"\n aria-label=${this.closeLabel}\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=${this.closeIcon} iconColor=${this.closeIconColor} size=\"xl\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n\n <div class=\"${showDescription && hasTrailingContent ? 'mb-8' : ''}\" ?hidden=${!showDescription}>\n ${this.description\n ? html`<p class=\"m-0\">${this.description}</p>`\n : html`<slot name=\"description\" @slotchange=${this._onDescriptionSlotChange}></slot>`}\n </div>\n\n ${this.type === 'form' ? html`<div><slot name=\"form\"></slot></div>` : ''}\n ${this.type === 'custom' ? html`<div><slot name=\"body\"></slot></div>` : ''}\n\n ${this.canCancel || this._buttons.length > 0\n ? html`\n <div slot=\"footer\" class=\"flex items-center justify-end gap-2 w-full\">\n ${this.canCancel\n ? html`<axebow-button variant=\"default\" @click=${() => this.onCancel?.()}\n >${this.cancelLabel}</axebow-button\n >`\n : ''}\n ${this._buttons.map(\n (button) => html`\n <axebow-button\n variant=${button.variant ?? 'default'}\n ?outline=${button.outline}\n .disabled=${button.disabled ?? false}\n ?loading=${button.loading}\n @click=${() => button.onClick?.()}\n >\n ${button.label}\n </axebow-button>\n `\n )}\n </div>\n `\n : ''}\n </sl-dialog>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-input/axebow-tags-input.js';\nimport { Option } from '../axebow-input/axebow-input.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport type CollaboratorRoleOption = Option;\n\nexport interface CollaboratorRow {\n id: string;\n name: string;\n email: string;\n permission: string;\n invitePending: boolean;\n isYou: boolean;\n}\n\nexport interface CollaboratorsDialogLabels {\n dialogTitle: string;\n descriptionPrefix: string;\n userIdLabel: string;\n userIdHelp: string;\n emailPlaceholder: string;\n selectPermission: string;\n inviteButton: string;\n actualCollaborators: string;\n noCollaborators: string;\n inviteToCollaborate: string;\n inviteSent: string;\n roleHeader: string;\n updateUserAction: string;\n resendInviteAction: string;\n removeAction: string;\n closeButton: string;\n updateButton: string;\n closeAriaLabel: string;\n}\n\n@customElement('axebow-collaborators-dialog')\nexport class AxebowCollaboratorsDialog extends LitElement {\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ type: String }) tenantName = '';\n @property({ type: Array }) collaborators: CollaboratorRow[] = [];\n @property({ type: Array }) roleOptions: CollaboratorRoleOption[] = [];\n @property({ attribute: false }) labels!: CollaboratorsDialogLabels;\n @property({ type: Array }) newEmails: string[] = [];\n @property({ type: String }) currentInput = '';\n @property({ type: String }) newPermission = '';\n @property({ attribute: false }) onEmailsChange?: (emails: string[]) => void;\n @property({ attribute: false }) onCurrentInputChange?: (value: string) => void;\n @property({ attribute: false }) onPermissionChange?: (value: string) => void;\n @property({ attribute: false }) onInvite?: () => void;\n @property({ attribute: false }) selectedRole: Record<string, string> = {};\n @property({ attribute: false }) onSelectRole?: (email: string, role: string) => void;\n @property({ attribute: false }) onUpdateRole?: (email: string) => void;\n @property({ attribute: false }) onUpdateAllRoles?: () => void;\n\n @property({ attribute: false }) onResendInvite?: (email: string) => void;\n @property({ attribute: false }) onRemoveCollaborator?: (row: CollaboratorRow) => void;\n @property({ attribute: false }) onClose?: () => void;\n\n private readonly roleControlClasses =\n 'w-18.5 h-5.25 px-2 border border-solid border-[var(--axebow-gray)] rounded text-base bg-white flex items-center justify-between gap-1 box-border text-black';\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(panel) {\n background-color: var(--axebow-base);\n border-radius: 0.375rem;\n height: min(38.6875rem, 90vh);\n padding: 24px;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n margin-top: 5vh;\n }\n sl-dialog::part(header) {\n display: none;\n }\n sl-dialog::part(body) {\n padding: 0;\n margin: 0;\n flex: 1 1 auto;\n min-height: 0;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n sl-dialog::part(footer) {\n display: none;\n }\n @media (max-width: 540px) {\n sl-dialog::part(panel) {\n padding: 1rem;\n }\n }\n .collaborators-scroll::-webkit-scrollbar {\n width: 4px;\n }\n .collaborators-scroll::-webkit-scrollbar-track {\n background: transparent;\n }\n .collaborators-scroll::-webkit-scrollbar-thumb {\n background-color: var(--axebow-gray, #d1d5db);\n border-radius: 9999px;\n transition: background-color 0.2s;\n }\n .collaborators-scroll::-webkit-scrollbar-thumb:hover {\n background-color: var(--axebow-primary, var(--axebow-strong-gray));\n }\n `,\n ];\n\n private get _hasAnyInput(): boolean {\n return this.newEmails.length > 0 || this.currentInput.trim().length > 0;\n }\n\n private get _hasPendingRoleChanges(): boolean {\n return this.collaborators.some((c) => this.selectedRole[c.email] && this.selectedRole[c.email] !== c.permission);\n }\n\n private _roleLabel(permission: string): string {\n const match = this.roleOptions.find((o) => o.value === permission)?.label;\n return (match as string) ?? permission;\n }\n\n private _initializeRole(email: string, currentRole: string) {\n if (!this.selectedRole[email]) {\n this.onSelectRole?.(email, currentRole);\n }\n }\n\n private _handleMenuClick(e: Event, action: () => void) {\n e.stopPropagation();\n action();\n }\n\n render() {\n if (!this.open) return html``;\n\n const footerButtons = [\n { label: this.labels.closeButton, onClick: () => this.onClose?.() },\n ...(this._hasPendingRoleChanges\n ? [{ label: this.labels.updateButton, onClick: () => this.onUpdateAllRoles?.() }]\n : []),\n ];\n\n return html`\n <sl-dialog ?open=${this.open} label=${this.labels.dialogTitle} @sl-request-close=${(e: CustomEvent) => e.preventDefault()}>\n <div class=\"flex gap-4 items-start shrink-0\">\n <axebow-icon\n iconName=\"person_add\"\n iconColor=\"var(--axebow-primary)\"\n size=\"3xl\"\n class=\"shrink-0\"\n ></axebow-icon>\n <div class=\"flex flex-col gap-6 flex-1 min-w-0\">\n <div class=\"flex items-center justify-between gap-2 h-7\">\n <h2 class=\"m-0 text-xl font-semibold text-black truncate\">${this.labels.dialogTitle}</h2>\n <button\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0\"\n aria-label=\"${this.labels.closeAriaLabel}\"\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=\"close\" size=\"xl\"></axebow-icon>\n </button>\n </div>\n <p class=\"m-0 text-base text-black\">\n ${this.labels.descriptionPrefix} <strong>\"${this.tenantName}\"!</strong>\n </p>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-1 min-h-0 pl-11.75\">\n <div class=\"space-y-3 shrink-0\">\n <axebow-tags-input\n class=\"mb-4\"\n label=\"${this.labels.userIdLabel}\"\n description=\"${this.labels.userIdHelp}\"\n required\n placeholder=\"${this.labels.emailPlaceholder}\"\n .tags=${this.newEmails}\n .currentInput=${this.currentInput}\n .onTagsChange=${(tags: string[]) => this.onEmailsChange?.(tags)}\n .onCurrentInputChange=${(value: string) => this.onCurrentInputChange?.(value)}\n ></axebow-tags-input>\n <div class=\"flex gap-2 items-end\">\n <axebow-input\n controlType=\"select\"\n .value=${this.newPermission}\n placeholder=\"${this.labels.selectPermission}\"\n .options=${this.roleOptions}\n .clearable=${false}\n .callback=${(e: Event) => this.onPermissionChange?.((e.target as HTMLSelectElement).value)}\n class=\"flex-1\"\n .disabled=${!this._hasAnyInput}\n style=${!this._hasAnyInput\n ? '--sl-input-background-color: var(--axebow-base); --sl-input-border-color: var(--axebow-base);'\n : ''}\n ></axebow-input>\n\n <axebow-button\n variant=\"primary\"\n .disabled=${!this._hasAnyInput || !this.newPermission}\n @click=${() => this.onInvite?.()}\n class=\"shrink-0\"\n style=\"--sl-button-font-size-medium: 0.875rem; min-width: 140px;\"\n >\n ${this.labels.inviteButton}\n </axebow-button>\n </div>\n </div>\n <div class=\"flex flex-col flex-1 min-h-0 mt-5\">\n <axebow-divider></axebow-divider>\n <h3 class=\"text-base font-medium text-black mb-3 mt-4 shrink-0\">${this.labels.actualCollaborators}</h3>\n <div class=\"collaborators-scroll flex-1 min-h-0 overflow-y-auto\">\n ${this.collaborators.length > 0\n ? html`\n <div class=\"mr-2\">\n <axebow-divider margin=\"0\"></axebow-divider>\n ${this.collaborators.map(\n (c, index) => html`\n <div\n class=\"flex items-center justify-between py-2.5\n ${index !== this.collaborators.length - 1 ? 'border-b border-gray-200' : ''}\"\n >\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <div class=\"w-9 h-9 bg-white rounded flex items-center justify-center shrink-0\">\n ${c.invitePending\n ? html`<axebow-icon\n iconName=\"outgoing_mail\"\n iconColor=\"var(--axebow-dark-yellow)\"\n ></axebow-icon>`\n : html`<axebow-icon\n iconName=\"person_check\"\n iconColor=\"var(--axebow-primary)\"\n ></axebow-icon>`}\n </div>\n <div class=\"min-w-0 flex-1\">\n <div class=\"flex items-center gap-1.5 flex-wrap\">\n <span class=\"text-base font-medium text-black truncate\">${c.name}</span>\n ${c.invitePending\n ? html`<span class=\"text-base text-black\">${this.labels.inviteSent}</span>`\n : ''}\n </div>\n <p class=\"text-base text-black truncate\">ID: ${c.id}</p>\n </div>\n </div>\n <div class=\"flex items-center gap-2 shrink-0 ml-2\">\n ${!c.isYou\n ? html`\n <sl-dropdown placement=\"bottom-end\">\n <button\n slot=\"trigger\"\n class=\"${this.roleControlClasses} appearance-none cursor-pointer\n hover:bg-gray-50 focus:outline-2 focus:outline-blue-500 focus:outline-offset-1\"\n @click=${() => this._initializeRole(c.email, c.permission)}\n >\n <span class=\"flex-1 text-center\">${this._roleLabel(c.permission)}</span>\n <axebow-icon\n iconName=\"expand_more\"\n size=\"md\"\n iconColor=\"var(--axebow-tertiary)\"\n ></axebow-icon>\n </button>\n\n <sl-menu style=\"min-width: 180px;\">\n <div class=\"py-1\">\n <div\n class=\"px-3 py-2 text-base font-medium text-black uppercase tracking-wider border-b border-gray-200\"\n >\n ${this.labels.roleHeader}\n </div>\n ${this.roleOptions.map(\n (opt) => html`\n <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () =>\n this.onSelectRole?.(c.email, opt.value)\n )}\n >\n <div class=\"flex items-center justify-between w-full\">\n <span class=\"text-base\">${opt.label}</span>\n ${(this.selectedRole[c.email] || c.permission) === opt.value\n ? html`<axebow-icon\n iconName=\"check\"\n iconColor=\"var(--axebow-primary)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n </sl-menu-item>\n `\n )}\n </div>\n\n <axebow-divider margin=\"0\"></axebow-divider>\n\n <div class=\"py-1\">\n ${this.selectedRole[c.email] && this.selectedRole[c.email] !== c.permission\n ? html` <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onUpdateRole?.(c.email))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"sync\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black font-medium\"\n >${this.labels.updateUserAction}</span\n >\n </div>\n </sl-menu-item>`\n : ''}\n ${c.invitePending\n ? html` <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onResendInvite?.(c.email))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"send\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black\"\n >${this.labels.resendInviteAction}</span\n >\n </div>\n </sl-menu-item>`\n : ''}\n <sl-menu-item\n @click=${(e: Event) =>\n this._handleMenuClick(e, () => this.onRemoveCollaborator?.(c))}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon\n iconName=\"delete\"\n iconColor=\"var(--axebow-error)\"\n size=\"md\"\n ></axebow-icon>\n <span class=\"text-black\"\n >${this.labels.removeAction}</span\n >\n </div>\n </sl-menu-item>\n </div>\n </sl-menu>\n </sl-dropdown>\n `\n : html`\n <div class=\"${this.roleControlClasses}\">\n <span class=\"flex-1 text-center\">${this._roleLabel(c.permission)}</span>\n </div>\n `}\n </div>\n </div>\n <axebow-divider margin=\"0\"></axebow-divider>\n `\n )}\n </div>\n `\n : html`\n <div class=\"flex items-center justify-center py-8 text-black\">\n <div class=\"text-center\">\n <svg\n class=\"w-12 h-12 text-gray-300 mx-auto mb-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13.5-9a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0z\"\n ></path>\n </svg>\n <p class=\"text-base\">${this.labels.noCollaborators}</p>\n <p class=\"text-base text-black mt-1\">${this.labels.inviteToCollaborate}</p>\n </div>\n </div>\n `}\n </div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end gap-2 shrink-0\">\n ${footerButtons.map(\n (button) => html`\n <axebow-button variant=\"primary\" outline @click=${button.onClick}>${button.label}</axebow-button>\n `\n )}\n </div>\n </sl-dialog>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-manage-hyperlinks')\nexport class AxebowManageHyperlinks extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n button:hover:not(:disabled) {\n color: var(--axebow-gray) !important;\n }\n `\n ];\n\n @property({ type: String }) text: string = '';\n @property({ type: String }) icon: string = '';\n @property({ type: String }) color: string = 'var(--axebow-tertiary)';\n @property({ type: String }) iconColor: string = '';\n @property({ type: Boolean }) disabled: boolean = false;\n\n private _handleClick(e: MouseEvent) {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n this.dispatchEvent(new CustomEvent('hyperlink-click', {\n bubbles: true,\n composed: true,\n detail: { text: this.text }\n }));\n }\n\n render() {\n const buttonColor = this.color || 'var(--axebow-tertiary)';\n const iconColorProp = this.iconColor || 'currentColor';\n\n return html`\n <button\n type=\"button\"\n ?disabled=${this.disabled}\n @click=${this._handleClick}\n style=\"color: ${buttonColor};\"\n class=\"inline-flex items-center gap-1.5 bg-transparent border-none p-0 cursor-pointer font-semibold text-sm focus:outline-none transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <span>${this.text}</span>\n ${this.icon ? html`<axebow-icon iconName=\"${this.icon}\" iconColor=\"${iconColorProp}\"></axebow-icon>` : ''}\n </button>`;\n }\n}","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-manage-hyperlinks/axebow-manage-hyperlinks.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport type {\n ConfirmationSeverity,\n ConfirmationIntent,\n ConfirmationFormData,\n ConfirmationModalPayload,\n} from './axebow-modals-confirmation.models.js';\n\n/**\n * `<axebow-modals-confirmation>` is a confirmation modal component designed following\n * SOLID principles, DRY/KISS practices, and exact design specifications from Figma.\n *\n * It supports 4 severities (Destructive, Error, Neutral, Success), decisional/informational intents,\n * an optional 4-field confirmation form with password visibility toggle, optional hyperlink,\n * and customizable slots.\n */\n@customElement('axebow-modals-confirmation')\nexport class AxebowModalsConfirmation extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n font-family: 'Open Sans', system-ui, -apple-system, sans-serif;\n }\n\n /* Shoelace Dialog Custom Overrides */\n sl-dialog::part(panel) {\n background-color: var(--axebow-confirmation-modal-bg, #f0f1f5);\n border-radius: 0.375rem;\n box-shadow: 2px 2px 25px rgba(0, 0, 0, 0.1);\n padding: 0;\n width: 100%;\n max-width: var(--axebow-confirmation-modal-max-width, 579px);\n overflow: hidden;\n }\n\n sl-dialog::part(header),\n sl-dialog::part(header-actions) {\n display: none;\n }\n\n sl-dialog::part(body) {\n padding: 24px;\n }\n\n sl-dialog::part(footer) {\n padding: 0;\n }\n\n /* Standalone container styles (when rendered inline or without dialog) */\n .modal-card {\n background-color: var(--axebow-confirmation-modal-bg, #f0f1f5);\n border-radius: 0.375rem;\n box-shadow: 2px 2px 25px rgba(0, 0, 0, 0.1);\n padding: 24px;\n width: 100%;\n max-width: var(--axebow-confirmation-modal-max-width, 579px);\n box-sizing: border-box;\n }\n\n /* Form Input Styling */\n .form-field-input::part(base) {\n height: 40px;\n border-radius: 0.375rem;\n border: 1px solid #dbdde4;\n background-color: #ffffff;\n padding-left: 12px;\n padding-right: 12px;\n font-size: 14px;\n font-family: 'Open Sans', sans-serif;\n color: #000000;\n box-shadow: none;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n }\n\n .form-field-input::part(base):hover {\n border-color: #b0b4be;\n }\n\n .form-field-input::part(base):focus-within {\n border-color: #006bff;\n box-shadow: 0 0 0 2px rgba(0, 107, 255, 0.15);\n }\n\n .form-field-input::part(input) {\n font-size: 14px;\n font-family: 'Open Sans', sans-serif;\n color: #000000;\n }\n\n .form-field-input::part(input)::placeholder {\n color: #78787a;\n }\n\n /* Buttons Styling */\n .modal-btn {\n width: 150px;\n height: 40px;\n border-radius: 0.375rem;\n font-size: 14px;\n font-weight: 600;\n font-family: 'Open Sans', sans-serif;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n box-sizing: border-box;\n }\n\n .modal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Blue Primary Button */\n .btn-primary-blue {\n background-color: #006bff;\n color: #ffffff;\n border: none;\n }\n .btn-primary-blue:hover:not(:disabled) {\n background-color: #0056cc;\n }\n\n /* Blue Secondary Button */\n .btn-secondary-blue {\n background-color: transparent;\n color: #006bff;\n border: 1px solid #006bff;\n }\n .btn-secondary-blue:hover:not(:disabled) {\n background-color: rgba(0, 107, 255, 0.05);\n }\n\n /* Red Primary Button (Destructive) */\n .btn-primary-red {\n background-color: #e93a3a;\n color: #ffffff;\n border: none;\n }\n .btn-primary-red:hover:not(:disabled) {\n background-color: #d12b2b;\n }\n\n /* Red Secondary Button (Destructive) */\n .btn-secondary-red {\n background-color: transparent;\n color: #e93a3a;\n border: 1px solid #e93a3a;\n }\n .btn-secondary-red:hover:not(:disabled) {\n background-color: rgba(233, 58, 58, 0.05);\n }\n\n .modal-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n `,\n ];\n\n // Component Props (matching Figma properties & Spec Notes)\n @property({ type: Boolean, reflect: true }) open = true;\n @property({ type: Boolean }) inline = false; // Render directly without modal overlay backdrop\n @property({ type: String }) backgroundColor?: string; // Customizable modal background color\n @property({ type: String }) maxWidth?: string;\n @property({ type: String }) severity: ConfirmationSeverity = 'Neutral';\n @property({ type: String }) intent: ConfirmationIntent = 'Decisional';\n\n @property({ type: String }) popUpTittle = 'Pop-up tittle';\n /** Alias for popUpTittle */\n @property({ type: String })\n get popUpTitle(): string {\n return this.popUpTittle;\n }\n set popUpTitle(value: string) {\n this.popUpTittle = value;\n }\n\n @property({ type: String }) textBody = '';\n\n @property({ type: Boolean }) showIconOnTitle = true;\n @property({ type: Boolean }) showForm = true;\n @property({ type: Boolean }) showHyperlink = false;\n @property({ type: String }) hyperlinkText = 'Need help?';\n @property({ type: String }) hyperlinkHref?: string;\n\n @property({ type: Boolean }) showFooter = true;\n @property({ type: Boolean }) showSecondaryCTA = true;\n @property({ type: Boolean }) showPrimaryCTA = true;\n @property({ type: String }) secondaryButtonText = 'Secondary Button';\n @property({ type: String }) primaryButtonText = 'Primary Button';\n @property({ type: String }) secondaryButtonTooltip?: string;\n @property({ type: Boolean }) secondaryButtonDisabled = false;\n @property({ type: String }) primaryButtonTooltip?: string;\n @property({ type: Boolean }) primaryButtonDisabled = false;\n\n @property({ type: Boolean }) canClose = true;\n @property({ type: String }) entityName = 'entity-name';\n\n // Internal Form State\n @state() private _providerUsername = '';\n @state() private _providerPassword = '';\n @state() private _domain = '';\n @state() private _confirmText = '';\n @state() private _showPassword = false;\n\n // Custom Icon overrides (if caller wants to specify distinct icons)\n @property({ type: String }) iconName?: string;\n @property({ type: String }) iconColor?: string;\n\n /**\n * Returns severity configuration according to design specifications:\n * - Success: green check_circle icon, standard blue buttons\n * - Error: red error icon, standard blue buttons\n * - Neutral: blue info icon, standard blue buttons\n * - Destructive: red error icon, RED buttons (#E93A3A)\n */\n private get _severityConfig(): { icon: string; iconColor: string; isRedButtons: boolean } {\n if (this.iconName) {\n return {\n icon: this.iconName,\n iconColor: this.iconColor ?? (this.severity === 'Destructive' || this.severity === 'Error' ? '#E93A3A' : '#006BFF'),\n isRedButtons: this.severity === 'Destructive',\n };\n }\n\n switch (this.severity) {\n case 'Success':\n return { icon: 'check_circle', iconColor: '#10B981', isRedButtons: false };\n case 'Error':\n return { icon: 'error', iconColor: '#E93A3A', isRedButtons: false };\n case 'Destructive':\n return { icon: 'error', iconColor: '#E93A3A', isRedButtons: true };\n case 'Neutral':\n default:\n return { icon: 'info', iconColor: '#006BFF', isRedButtons: false };\n }\n }\n\n /**\n * Helper to retrieve current form payload object\n */\n public getFormData(): ConfirmationFormData {\n return {\n providerUsername: this._providerUsername,\n providerPassword: this._providerPassword,\n domain: this._domain,\n confirmText: this._confirmText,\n };\n }\n\n /**\n * Reset form fields to initial empty state\n */\n public resetForm(): void {\n this._providerUsername = '';\n this._providerPassword = '';\n this._domain = '';\n this._confirmText = '';\n this._showPassword = false;\n }\n\n private _notifyFormChange(): void {\n const formData = this.getFormData();\n this.dispatchEvent(\n new CustomEvent<ConfirmationFormData>('axebow-form-change', {\n detail: formData,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleClose(): void {\n this.dispatchEvent(\n new CustomEvent('axebow-close', {\n bubbles: true,\n composed: true,\n })\n );\n if (!this.inline) {\n this.open = false;\n }\n }\n\n private _handleSecondaryClick(): void {\n const payload: ConfirmationModalPayload = {\n severity: this.severity,\n intent: this.intent,\n formData: this.showForm ? this.getFormData() : undefined,\n };\n this.dispatchEvent(\n new CustomEvent<ConfirmationModalPayload>('axebow-cancel', {\n detail: payload,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handlePrimaryClick(): void {\n const payload: ConfirmationModalPayload = {\n severity: this.severity,\n intent: this.intent,\n formData: this.showForm ? this.getFormData() : undefined,\n };\n this.dispatchEvent(\n new CustomEvent<ConfirmationModalPayload>('axebow-confirm', {\n detail: payload,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleHyperlinkClick(e: Event): void {\n if (this.hyperlinkHref) {\n window.open(this.hyperlinkHref, '_blank');\n }\n this.dispatchEvent(\n new CustomEvent('axebow-hyperlink-click', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n /**\n * Renders the top header section (Icon 32x32 + Title + Close icon 24x24)\n */\n private _renderHeader() {\n const { icon, iconColor } = this._severityConfig;\n\n return html`\n <div class=\"flex items-start justify-between w-full\">\n <div class=\"flex items-start gap-4 min-w-0 flex-1\">\n ${this.showIconOnTitle\n ? html`\n <div class=\"shrink-0 flex items-center justify-center w-8 h-8\">\n <axebow-icon iconName=${icon} iconColor=${iconColor} size=\"3xl\"></axebow-icon>\n </div>\n `\n : html`<div class=\"shrink-0 w-8 h-8\" aria-hidden=\"true\"></div>`}\n <div class=\"flex flex-col gap-6 flex-1 min-w-0\">\n <h3 class=\"m-0 text-xl font-semibold text-black leading-tight truncate\">\n ${this.popUpTittle}\n </h3>\n ${this.textBody\n ? html`<p class=\"m-0 text-sm text-black font-normal leading-relaxed\">${this.textBody}</p>`\n : ''}\n <slot name=\"body\"></slot>\n <slot></slot>\n </div>\n </div>\n\n ${this.canClose\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center shrink-0 text-(--axebow-gray) hover:text-(--axebow-error) transition-colors ml-4\"\n aria-label=\"Close dialog\"\n @click=${this._handleClose}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"currentColor\" size=\"2xl\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n `;\n }\n\n /**\n * Renders the 4-field confirmation form (indented 47px from left, gap 16px between fields)\n */\n private _renderForm() {\n if (!this.showForm) return '';\n\n const expectedConfirmPlaceholder = `delete+[${this.entityName}]`;\n\n return html`\n <div class=\"pl-11.75 flex flex-col gap-4 w-full box-border\">\n <slot name=\"form\">\n <!-- Field 1: Provider username -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Provider username</label>\n <sl-input\n class=\"form-field-input\"\n placeholder=\"Enter user\"\n .value=${this._providerUsername}\n @sl-input=${(e: Event) => {\n this._providerUsername = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n\n <!-- Field 2: Provider password with toggle eye icon -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Provider password</label>\n <sl-input\n class=\"form-field-input\"\n type=${this._showPassword ? 'text' : 'password'}\n placeholder=\"Enter password\"\n .value=${this._providerPassword}\n @sl-input=${(e: Event) => {\n this._providerPassword = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n >\n <button\n slot=\"suffix\"\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-[#78787A] hover:text-black transition-colors\"\n @click=${() => (this._showPassword = !this._showPassword)}\n aria-label=${this._showPassword ? 'Hide password' : 'Show password'}\n >\n <axebow-icon\n iconName=${this._showPassword ? 'visibility_off' : 'visibility'}\n iconColor=\"currentColor\"\n size=\"xl\"\n ></axebow-icon>\n </button>\n </sl-input>\n </div>\n\n <!-- Field 3: Domain -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0\">Domain</label>\n <sl-input\n class=\"form-field-input\"\n placeholder=\"Enter domain\"\n .value=${this._domain}\n @sl-input=${(e: Event) => {\n this._domain = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n\n <!-- Field 4: Confirmation delete field -->\n <div class=\"flex flex-col gap-2 w-full\">\n <label class=\"text-sm font-semibold text-black m-0 flex items-center gap-1\">\n <span class=\"text-[#E93A3A] font-bold\">*</span>\n <span>Type \"${expectedConfirmPlaceholder}\" to confirm:</span>\n </label>\n <sl-input\n class=\"form-field-input\"\n placeholder=${expectedConfirmPlaceholder}\n .value=${this._confirmText}\n @sl-input=${(e: Event) => {\n this._confirmText = (e.target as HTMLInputElement).value;\n this._notifyFormChange();\n }}\n ></sl-input>\n </div>\n </slot>\n </div>\n `;\n }\n\n /**\n * Renders the action footer (Width 483px, indented 47px, hyperlink + buttons)\n */\n private _renderFooter() {\n if (!this.showFooter) return '';\n\n const isDestructive = this.severity === 'Destructive';\n const primaryVariant = isDestructive ? 'danger' : 'primary';\n const secondaryVariant = isDestructive ? 'danger' : 'primary';\n\n return html`\n <div class=\"pl-11.75 w-full flex items-center justify-between gap-4 box-border\">\n <slot name=\"footer\">\n <!-- Optional Hyperlink -->\n <div>\n ${this.showHyperlink\n ? html`\n <slot name=\"hyperlink\">\n <axebow-manage-hyperlinks\n .text=${this.hyperlinkText}\n @hyperlink-click=${this._handleHyperlinkClick}\n ></axebow-manage-hyperlinks>\n </slot>\n `\n : ''}\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex items-center gap-4 ml-auto\">\n ${this.showSecondaryCTA\n ? html`\n <axebow-button\n variant=${secondaryVariant}\n ?outline=${true}\n fixedHeight=\"40px\"\n .disabled=${this.secondaryButtonDisabled}\n @click=${this._handleSecondaryClick}\n >\n <span class=\"flex items-center justify-center gap-1\">\n <span>${this.secondaryButtonText}</span>\n ${this.secondaryButtonTooltip\n ? html`\n <axebow-tooltip content=${this.secondaryButtonTooltip} placement=\"top\">\n <axebow-icon iconName=\"info\" iconColor=\"currentColor\" size=\"md\" class=\"shrink-0 cursor-pointer ml-1\"></axebow-icon>\n </axebow-tooltip>\n `\n : ''}\n </span>\n </axebow-button>\n `\n : ''}\n ${this.showPrimaryCTA\n ? html`\n <axebow-button\n variant=${primaryVariant}\n fixedHeight=\"40px\"\n .disabled=${this.primaryButtonDisabled}\n @click=${this._handlePrimaryClick}\n >\n <span class=\"flex items-center justify-center gap-1\">\n <span>${this.primaryButtonText}</span>\n ${this.primaryButtonTooltip\n ? html`\n <axebow-tooltip content=${this.primaryButtonTooltip} placement=\"top\">\n <axebow-icon iconName=\"info\" iconColor=\"currentColor\" size=\"md\" class=\"shrink-0 cursor-pointer ml-1\"></axebow-icon>\n </axebow-tooltip>\n `\n : ''}\n </span>\n </axebow-button>\n `\n : ''}\n </div>\n </slot>\n </div>\n `;\n }\n\n /**\n * Renders the complete modal content layout (flex column, gap 32px)\n */\n private _renderContent() {\n return html`\n <div class=\"flex flex-col gap-8 w-full\">\n ${this._renderHeader()}\n ${this._renderForm()}\n ${this._renderFooter()}\n </div>\n `;\n }\n\n render() {\n const bgStyle = this.backgroundColor ? `--axebow-confirmation-modal-bg: ${this.backgroundColor}; background-color: ${this.backgroundColor};` : '';\n const widthStyle = this.maxWidth ? `--axebow-confirmation-modal-max-width: ${this.maxWidth};` : '';\n const hostStyle = `${bgStyle}${widthStyle}`;\n\n if (this.inline) {\n return html`\n <div class=\"modal-card\" style=${hostStyle}>\n ${this._renderContent()}\n </div>\n `;\n }\n\n return html`\n <sl-dialog\n ?open=${this.open}\n no-header\n label=${this.popUpTittle}\n style=${hostStyle}\n @sl-request-close=${(e: CustomEvent) => {\n e.preventDefault();\n this._handleClose();\n }}\n >\n ${this._renderContent()}\n </sl-dialog>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-modals-confirmation': AxebowModalsConfirmation;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-limits-counter')\nexport class AxebowLimitsCounter extends LitElement {\n @property({ type: String }) label = '';\n @property({ type: String }) current = '';\n @property({ type: String }) limit = '';\n @property({ type: String }) unit = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n\n private _format(value: string): string {\n const n = Number(value);\n return isNaN(n) ? value : n.toFixed(2);\n }\n\n render() {\n return html`\n <span class=\"inline-flex items-center whitespace-nowrap text-base text-black\"\n >${this.label}${this.unit ? ` ${this.unit}` : ''}:&nbsp;<span class=\"text-gray-600\"\n >${this._format(this.current)}</span\n >&nbsp;/&nbsp;<span class=\"font-semibold\">${this._format(this.limit)}</span></span\n >\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-limits-counter/axebow-limits-counter.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface ResourceLimitItem {\n label: string;\n current: string;\n limit: string;\n unit?: string;\n}\n\n@customElement('axebow-resources-counter')\nexport class AxebowResourcesCounter extends LitElement {\n @property({ type: Array }) items: ResourceLimitItem[] = [];\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"w-121 h-7 bg-white py-1 px-2 rounded flex items-center justify-between gap-[0.53125rem] box-border\">\n ${this.items.map(\n (item, index) => html`\n ${index > 0\n ? html`<span class=\"shrink-0 inline-flex items-center\"\n >&nbsp;<div class=\"w-1.75 h-5 shrink-0 inline-flex items-center justify-center text-gray-300\">\n |\n </div>\n &nbsp;</span\n >`\n : ''}\n <axebow-limits-counter\n label=${item.label}\n current=${item.current}\n limit=${item.limit}\n unit=${item.unit ?? ''}\n ></axebow-limits-counter>\n `\n )}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, unsafeCSS, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/tooltip/tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type IconSize = 'xx-small' | 'x-small' | 'small' | 'medium' | 'large' | 'x-large';\n\n@customElement('axebow-tooltip')\nexport class AxebowTooltip extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-flex;\n align-items: center;\n }\n `,\n ];\n\n @property({ type: String }) icon = 'info';\n @property({ type: String }) color = 'var(--axebow-primary)';\n @property({ type: String }) size: string = 'xl';\n @property({ type: String }) content = '';\n @property({ type: String }) placement: 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' = 'top';\n @property({ type: Boolean }) hoist = true;\n @property({ type: Boolean }) disabled = false;\n\n render() {\n return html`\n <sl-tooltip\n placement=${this.placement}\n ?hoist=${this.hoist}\n ?disabled=${this.disabled}\n exportparts=\"body, base, popup, arrow\"\n >\n <div slot=\"content\">\n ${this.content ? this.content : html`<slot name=\"content\"></slot>`}\n </div>\n <slot>\n <axebow-icon\n .iconName=${this.icon}\n .iconColor=${this.color}\n .size=${this.size}\n class=\"cursor-pointer flex items-center justify-center\"\n ></axebow-icon>\n </slot>\n </sl-tooltip>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\n\n@customElement(\"axebow-adjustment-resources-counter\")\nexport class AxebowAdjustmentResourcesCounter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n `,\n ];\n\n @property({ type: String }) type: 'normal' | 'boxed' = 'normal';\n @property({ type: Boolean }) criticalHighlight = false;\n @property({ type: Number }) number = 0;\n @property({ type: String }) description = \"\";\n @property({ type: String }) tooltipText = \"\";\n\n render() {\n switch (this.type) {\n case 'normal':\n return this._renderNormal();\n case 'boxed':\n return this._renderBoxed();\n default:\n return this._renderNormal();\n }\n }\n\n private _renderBoxed() {\n return html`\n <div class=\"flex flex-col items-center py-2 px-3 w-30.75 h-fit border border-solid border-[#DBDDE4] rounded-md relative\">\n ${this.tooltipText ? html`\n <axebow-tooltip\n class=\"absolute top-1 right-1\"\n icon=\"info\"\n color=\"var(--color-gray)\"\n size=\"xl\"\n .content=${this.tooltipText}\n ></axebow-tooltip>\n ` : ''}\n <div class=\"flex items-center gap-1\">\n <p class=\"text-lg font-semibold text-[#344966]\">${this.number}</p>\n </div>\n <p class=\"text-center\">${this.description}</p>\n </div>`;\n }\n\n private _renderNormal() {\n return html`\n <div class=\"flex flex-col py-2 w-27 h-fit ${this.criticalHighlight ? \"border-b border-solid border-(--axebow-premium-text)\" : \"\"}\">\n <div class=\"flex items-center gap-1\">\n <p class=\"text-lg font-semibold text-[#344966]\">${this.number}</p>\n ${this.criticalHighlight ? html`<axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-premium-text)\" size=\"xl\"></axebow-icon>` : ''}\n </div>\n <p>${this.description}</p>\n </div>`;\n }\n}\n\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/icon/icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface UploadZoneLabels {\n invalidZipStructure: string;\n clickToSelectDifferent: string;\n clickToUpload: string;\n orDragAndDrop: string;\n}\n\n@customElement('axebow-drag-drop-upload-file')\nexport class AxebowDragDropUploadFile extends LitElement {\n @property({ type: String }) fileName = '';\n @property({ type: String }) fileSizeLabel = '';\n @property({ type: String }) errorMessage = '';\n @property({ attribute: false }) labels!: UploadZoneLabels;\n @property({ attribute: false }) onFileSelected?: (file: File | null) => void;\n\n @state() private _isDragging = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .dropzone .upload-icon {\n color: #9ca3af;\n }\n .dropzone:hover .upload-icon,\n .dropzone:active .upload-icon,\n .dropzone.is-active .upload-icon {\n color: var(--axebow-tertiary);\n }\n .dropzone:hover .upload-text,\n .dropzone:active .upload-text,\n .dropzone.is-active .upload-text {\n color: var(--axebow-tertiary);\n }\n `,\n ];\n\n private _triggerFileInput = () => {\n (this.shadowRoot?.getElementById('zip-file-input') as HTMLInputElement)?.click();\n };\n\n private _handleFileSelection = (e: Event) => {\n const input = e.target as HTMLInputElement;\n this.onFileSelected?.(input.files?.[0] || null);\n };\n\n private _handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = false;\n this.onFileSelected?.(e.dataTransfer?.files?.[0] || null);\n };\n\n private _handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = true;\n };\n\n private _handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this._isDragging = false;\n };\n\n render() {\n const stateClasses = this.errorMessage\n ? 'border-[var(--axebow-error)] bg-red-50'\n : this.fileName\n ? 'border-[var(--axebow-tertiary)] bg-sky-50'\n : this._isDragging\n ? 'is-active border-[var(--axebow-tertiary)] bg-sky-100 scale-[1.02]'\n : 'border-gray-300 bg-white hover:border-[var(--axebow-tertiary)] hover:bg-gray-50';\n\n return html`\n <div\n class=\"dropzone w-full h-[8.26375rem] box-border flex flex-col items-center justify-center overflow-hidden border-2 border-dashed rounded-md p-4 text-center transition-all duration-300 ease-in-out cursor-pointer ${stateClasses}\"\n @click=${this._triggerFileInput}\n @dragover=${this._handleDragOver}\n @dragleave=${this._handleDragLeave}\n @drop=${this._handleDrop}\n >\n <input\n id=\"zip-file-input\"\n type=\"file\"\n accept=\".zip\"\n style=\"display: none;\"\n @change=${this._handleFileSelection}\n />\n ${this.errorMessage\n ? html`\n <div>\n <sl-icon name=\"exclamation-triangle\" style=\"font-size: 2rem; color: var(--axebow-error);\"></sl-icon>\n <div class=\"mt-2\">\n <p class=\"font-semibold text-(--axebow-error) text-base m-0\">${this.labels.invalidZipStructure}</p>\n <p class=\"text-base text-gray-700 mt-1 m-0\">${this.errorMessage}</p>\n </div>\n <p class=\"text-base text-gray-500 mt-2 m-0\">${this.labels.clickToSelectDifferent}</p>\n </div>\n `\n : this.fileName\n ? html`\n <div>\n <sl-icon name=\"check-circle\" style=\"font-size: 2rem; color: var(--axebow-tertiary);\"></sl-icon>\n <div class=\"flex items-center justify-center gap-2 mt-1\">\n <sl-icon name=\"file-zip\" style=\"font-size: 1.25rem;\"></sl-icon>\n <div>\n <p class=\"font-semibold text-base m-0\">${this.fileName}</p>\n <p class=\"text-base text-gray-500 m-0\">${this.fileSizeLabel}</p>\n </div>\n </div>\n <p class=\"text-base text-gray-500 mt-1 m-0\">${this.labels.clickToSelectDifferent}</p>\n </div>\n `\n : html`\n <div>\n <sl-icon name=\"cloud-upload\" class=\"upload-icon\" style=\"font-size: 2rem;\"></sl-icon>\n <p class=\"upload-text font-semibold text-base mt-1 m-0\">${this.labels.clickToUpload}</p>\n <p class=\"upload-text text-base text-gray-500 m-0\">${this.labels.orDragAndDrop}</p>\n </div>\n `}\n </div>\n `;\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type BannerType = 'info' | 'success' | 'warning' | 'error';\n\n/**\n * Purely presentational inline banner - message content comes in via the\n * default slot, everything else (type, icon, sizing, auto-hide duration)\n * is caller-supplied properties. Holds no business logic of its own beyond\n * the optional auto-hide timer, which only toggles its own visibility and\n * notifies the caller via `dismiss`.\n */\n@customElement('axebow-banner')\nexport class AxebowBanner extends LitElement {\n @property({ type: String }) type: BannerType = 'info';\n @property({ type: Boolean }) dismissible: boolean = false;\n @property({ type: String }) iconName: string | null = null;\n @property({ type: Boolean }) rounded: boolean = false;\n @property({ type: Boolean }) compact: boolean = false;\n @property({ type: Number }) durationMs?: number;\n\n private autoHideTimer?: ReturnType<typeof setTimeout>;\n\n @state() private visible = true;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n disconnectedCallback() {\n this.clearAutoHideTimer();\n super.disconnectedCallback?.();\n }\n\n updated(changedProps: Map<string, any>) {\n if (changedProps.has('visible') || changedProps.has('durationMs') || changedProps.has('persistent')) {\n this.setupAutoHide();\n }\n }\n\n private setupAutoHide() {\n this.clearAutoHideTimer();\n if (!this.visible) return;\n if (typeof this.durationMs === 'number' && this.durationMs > 0) {\n this.autoHideTimer = setTimeout(() => {\n this.visible = false;\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('dismiss', { bubbles: true, composed: true }));\n }, this.durationMs);\n }\n }\n\n private clearAutoHideTimer() {\n if (this.autoHideTimer) {\n clearTimeout(this.autoHideTimer as any);\n this.autoHideTimer = undefined;\n }\n }\n\n render() {\n if (!this.visible) return html``;\n\n const map: Record<BannerType, { bg: string; border: string; text: string; icon: string }> = {\n info: { bg: 'bg-blue-50', border: 'border-blue-200', text: 'text-blue-800', icon: 'text-blue-600' },\n success: { bg: 'bg-green-50', border: 'border-green-200', text: 'text-green-800', icon: 'text-green-600' },\n warning: {\n bg: 'bg-(--axebow-warning-bg)',\n border: 'border-(--axebow-dark-yellow)',\n text: 'text-yellow-800',\n icon: 'text-yellow-600',\n },\n error: {\n bg: 'bg-(--axebow-error-bg)',\n border: 'border-(--axebow-error-border)',\n text: 'text-[var(--axebow-error)]',\n icon: 'text-[var(--axebow-error)]',\n },\n };\n\n const classes = map[this.type] || map.info;\n const padding = this.compact ? 'px-3 py-1.5' : 'px-4 pb-4 pt-3';\n\n return html`\n <div\n class=\"w-full ${padding} border ${classes.border} border-solid ${classes.bg} ${this.rounded\n ? 'rounded-md'\n : ''} flex items-start gap-[0.625rem]\"\n >\n <div class=\"w-6 h-6 shrink-0 flex items-center justify-center\">\n ${this.iconName\n ? html`<axebow-icon\n class=\"${classes.icon}\"\n iconName=\"${this.iconName}\"\n iconColor=\"${classes.icon}\"\n ></axebow-icon>`\n : html`<axebow-icon\n class=\"${classes.icon}\"\n iconName=\"${this.getDefaultIcon()}\"\n iconColor=\"${classes.icon}\"\n ></axebow-icon>`}\n </div>\n <div class=\"flex-1\">\n <slot></slot>\n </div>\n </div>\n `;\n }\n\n private getDefaultIcon() {\n switch (this.type) {\n case 'success':\n return 'check_circle';\n case 'warning':\n return 'warning';\n case 'error':\n return 'error';\n case 'info':\n default:\n return 'info';\n }\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/switch/switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational on/off switch: a thin wrapper around sl-switch\n * with the thumb always contained inside the track, axebow-gray thumb\n * on white when off, white thumb on axebow-success when on. Owns no\n * state of its own - the caller tracks checked and reacts to onChange.\n */\n@customElement('axebow-switch')\nexport class AxebowSwitch extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n vertical-align: bottom;\n }\n sl-switch {\n vertical-align: bottom;\n }\n sl-switch::part(base) {\n display: flex !important;\n }\n sl-switch::part(control) {\n box-sizing: border-box !important;\n background-color: var(--axebow-white, #ffffff) !important;\n border: 1px solid var(--axebow-table-header-border) !important;\n border-radius: var(--height) !important;\n }\n sl-switch::part(thumb) {\n background-color: var(--axebow-gray) !important;\n border-color: var(--axebow-gray) !important;\n border-radius: 50% !important;\n }\n sl-switch[checked]::part(control) {\n background-color: var(--axebow-success) !important;\n border-color: var(--axebow-table-header-border) !important;\n }\n sl-switch[checked]::part(thumb) {\n background-color: var(--axebow-white, #ffffff) !important;\n border-color: var(--axebow-success) !important;\n }\n `,\n ];\n\n @property({ type: Boolean }) checked = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: String }) width?: string;\n @property({ type: String }) height?: string;\n @property({ attribute: false }) onChange?: (checked: boolean) => void;\n\n render() {\n const customSizeStyle = this.width && this.height ? `--width: ${this.width}; --height: ${this.height};` : '';\n\n return html`\n <sl-switch\n size=\"${this.size}\"\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n style=\"--sl-color-primary-600: var(--axebow-success); --thumb-size: 0.875rem; ${customSizeStyle}\"\n @sl-change=${(e: Event) => this.onChange?.((e.target as HTMLInputElement).checked)}\n >\n <slot></slot>\n </sl-switch>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/dialog/dialog.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-banner/axebow-banner.js';\nimport '../axebow-switch/axebow-switch.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-resources-counter/axebow-resources-counter.js';\nimport '../axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.js';\nimport type { ResourceLimitItem } from '../axebow-resources-counter/axebow-resources-counter.js';\nimport type { UploadZoneLabels } from '../axebow-drag-drop-upload-file/axebow-drag-drop-upload-file.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\nexport interface RuntimeZipDialogLabels extends UploadZoneLabels {\n title: string;\n uploadDescriptionPrefix: string;\n environmentResourcesInfo: string;\n zipWarningStrong: string;\n zipWarningEg: string;\n zipWarningCannotValidate: string;\n zipWarningFailing: string;\n serviceName: string;\n serviceNamePlaceholder: string;\n serviceNameHelp: string;\n dslDeployment: string;\n deploy: string;\n cancel: string;\n}\n\n@customElement('axebow-runtime-zip-dialog')\nexport class AxebowRuntimeZipDialog extends LitElement {\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ attribute: false }) labels!: RuntimeZipDialogLabels;\n\n @property({ type: String }) tenantName = '';\n @property({ type: String }) accountName = '';\n @property({ type: String }) environmentName = '';\n @property({ type: Array }) resourceLimits: ResourceLimitItem[] = [];\n\n @property({ type: String }) serviceName = '';\n @property({ type: String }) serviceNameError = '';\n @property({ type: Boolean }) serviceNameDisabled = false;\n @property({ attribute: false }) onServiceNameInput?: (value: string) => void;\n\n @property({ type: Boolean }) isDslZip = false;\n @property({ attribute: false }) onDslChange?: (checked: boolean) => void;\n\n @property({ type: String }) fileName = '';\n @property({ type: String }) fileSizeLabel = '';\n @property({ type: String }) fileError = '';\n @property({ attribute: false }) onFileSelected?: (file: File | null) => void;\n\n @property({ type: Boolean }) isDeployEnabled = false;\n @property({ type: Boolean }) isDeploying = false;\n @property({ attribute: false }) onDeploy?: () => void;\n @property({ attribute: false }) onClose?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-dialog {\n --width: 36.1875rem;\n }\n sl-dialog::part(panel) {\n background-color: var(--axebow-base);\n width: 36.1875rem;\n height: 44.51375rem;\n padding: 1.5rem;\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n border-radius: 0.25rem;\n overflow: hidden;\n }\n sl-dialog::part(header) {\n display: none;\n }\n sl-dialog::part(body) {\n padding: 0;\n margin: 0;\n flex: 1 1 auto;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n sl-dialog::part(footer) {\n display: none;\n }\n `,\n ];\n\n render() {\n return html`\n <sl-dialog\n label=${this.labels?.title ?? ''}\n ?open=${this.open}\n @sl-request-close=${(e: CustomEvent) => {\n if (e.detail?.source === 'overlay') e.preventDefault();\n else this.onClose?.();\n }}\n >\n <div class=\"flex flex-col gap-6 shrink-0 pl-11.75\">\n <div class=\"flex items-center justify-between gap-2\">\n <h2 class=\"m-0 text-xl font-semibold\">${this.labels.title}</h2>\n <div\n class=\"w-6 h-6 shrink-0 flex items-center justify-center cursor-pointer\"\n @click=${() => this.onClose?.()}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"var(--axebow-gray)\" size=\"xl\"></axebow-icon>\n </div>\n </div>\n <p class=\"w-120.75 h-21.25 leading-4.25 m-0\">\n ${this.labels.uploadDescriptionPrefix}<br /><br />\n \"${this.tenantName} &gt; ${this.accountName} &gt;\n <span class=\"text-(--axebow-primary)\">${this.environmentName}</span>\".<br /><br />\n <strong>${this.labels.environmentResourcesInfo}</strong>\n </p>\n </div>\n\n <div class=\"flex flex-col gap-4 pl-11.75\">\n ${this.resourceLimits.length > 0\n ? html`<axebow-resources-counter .items=${this.resourceLimits}></axebow-resources-counter>`\n : ''}\n\n <axebow-banner\n type=\"warning\"\n rounded\n dismissible\n compact\n style=\"width: 30.25rem; height: 5.75rem; overflow: hidden;\"\n >\n <p class=\"m-0 font-medium text-base leading-[1.21875rem]\">\n <strong>${this.labels.zipWarningStrong} </strong>${this.labels.zipWarningEg}\n <strong>${this.labels.zipWarningCannotValidate}</strong> ${this.labels.zipWarningFailing}\n </p>\n </axebow-banner>\n\n <axebow-divider\n width=\"100%\"\n color=\"var(--axebow-gray)\"\n margin=\"0\"\n style=\"max-width: 30.25rem;\"\n ></axebow-divider>\n\n <axebow-input\n style=\"width: 30.25rem;\"\n label=${this.labels.serviceName}\n description=${this.labels.serviceNameHelp}\n placeholder=${this.labels.serviceNamePlaceholder}\n .value=${this.serviceName}\n .required=${true}\n .disabled=${this.serviceNameDisabled}\n .hasError=${!!this.serviceNameError}\n errorMessage=${this.serviceNameError}\n .callback=${(e: Event) => this.onServiceNameInput?.((e.target as HTMLInputElement).value)}\n ></axebow-input>\n\n <div class=\"flex items-center w-121 h-5\">\n <axebow-switch .checked=${this.isDslZip} .onChange=${(checked: boolean) => this.onDslChange?.(checked)}>\n <span class=\"text-base\">${this.labels.dslDeployment}</span>\n </axebow-switch>\n </div>\n\n <axebow-drag-drop-upload-file\n .fileName=${this.fileName}\n .fileSizeLabel=${this.fileSizeLabel}\n .errorMessage=${this.fileError}\n .labels=${this.labels}\n .onFileSelected=${(file: File | null) => this.onFileSelected?.(file)}\n ></axebow-drag-drop-upload-file>\n </div>\n\n <div class=\"flex justify-end gap-4 shrink-0\">\n <axebow-button\n variant=\"primary\"\n outline\n fixedWidth=\"9.375rem\"\n fixedHeight=\"2.5rem\"\n @click=${() => this.onClose?.()}\n >\n ${this.labels.cancel}\n </axebow-button>\n <axebow-button\n variant=\"primary\"\n fixedWidth=\"9.375rem\"\n fixedHeight=\"2.5rem\"\n .disabled=${!this.isDeployEnabled || this.isDeploying}\n @click=${() => this.onDeploy?.()}\n >\n ${this.labels.deploy}\n </axebow-button>\n </div>\n </sl-dialog>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ActionMenuItem } from './../cards/card.models.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\n\n@customElement('axebow-more-actions')\nexport class AxebowMoreActions extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n }\n axebow-button::part(base) {\n min-width: auto !important;\n }\n `,\n ];\n\n @property({ type: Boolean }) open = false;\n @property({ type: String }) placement: 'top' | 'bottom' = 'bottom';\n @property({ type: Boolean }) disabled = false;\n @property({ type: Array }) options: ActionMenuItem[] = [];\n @property({ type: String }) title = '';\n @property({ type: String }) iconName = '';\n @property({ type: Boolean }) openToRight = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n @property({ type: String }) fixedHeight?: string;\n\n @state() private _fixedPos = { top: 0, right: 0 };\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n window.addEventListener('scroll', this._handleScroll, true);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n window.removeEventListener('scroll', this._handleScroll, true);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this.open && !this.contains(e.target as Node)) {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n };\n\n private _handleScroll = () => {\n if (this.open && this.openToRight) {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n };\n\n private _toggle(e: Event) {\n if (this.disabled) return;\n e.stopPropagation();\n if (!this.open && this.openToRight) {\n const btn = this.shadowRoot?.querySelector<HTMLElement>('.trigger');\n if (btn) {\n const rect = btn.getBoundingClientRect();\n this._fixedPos = { top: rect.bottom + 8, right: window.innerWidth - rect.right };\n }\n }\n this.open = !this.open;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: this.open } }));\n }\n\n private _handleSlotClick() {\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }\n\n render() {\n const placementClass = this.placement === 'top' ? 'bottom-full mb-2' : 'top-full mt-2';\n const dropdownStyle = this.openToRight\n ? `position:fixed;top:${this._fixedPos.top}px;right:${this._fixedPos.right}px;z-index:1000;`\n : '';\n\n return html`\n <div class=\"relative w-full h-full flex justify-end\">\n <axebow-button\n class=\"trigger w-full h-full\"\n variant=\"tertiary\"\n fixedWidth=\"100%\"\n fixedHeight=${this.fixedHeight}\n ?disabled=${this.disabled}\n @click=${this._toggle}\n >\n ${this.iconName\n ? html`<axebow-icon iconName=${this.iconName} size=\"md\" iconColor=\"currentColor\"></axebow-icon>`\n : this.open ? this.closeLabel : (this.title || this.moreActionsLabel)}\n </axebow-button>\n ${this.open\n ? html`\n <div\n class=\"absolute right-0 z-10 bg-white border border-(--axebow-gray) rounded-md shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] p-2 min-w-44 flex flex-col ${placementClass}\"\n style=${dropdownStyle}\n @click=${this._handleSlotClick}\n >\n ${this.options?.length\n ? this.options.map(\n (opt) => html`\n <button\n class=\"flex items-center gap-2 text-left py-1 px-2 cursor-pointer rounded border border-transparent bg-transparent w-full hover:bg-gray-100\"\n @click=${(e: Event) => {\n e.stopPropagation();\n opt.onTap(e);\n this.open = false;\n this.dispatchEvent(new CustomEvent('toggled', { detail: { open: false } }));\n }}\n @mouseenter=${(e: Event) => ((e.currentTarget as HTMLElement).style.borderColor = `var(--axebow-${opt.type})`)}\n @mouseleave=${(e: Event) => ((e.currentTarget as HTMLElement).style.borderColor = 'transparent')}\n >\n <axebow-icon iconName=${opt.icon} iconColor=\"var(--axebow-${opt.type})\" size=\"md\"></axebow-icon>\n <p class=\"m-0 whitespace-nowrap\" style=\"color:var(--axebow-${opt.type});\">${opt.label}</p>\n </button>\n `\n )\n : html`<slot></slot>`}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-card-cloud-logo')\nexport class AxebowCardCloudLogo extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: contents; }`,\n ];\n\n @property({ type: String }) src: string | null = null;\n @property({ type: String }) size: 'small' | 'large' = 'large';\n\n render() {\n if (!this.src) return html``;\n\n return this.size === 'small'\n ? html`<div class=\"flex items-center justify-center shrink-0\" style=\"height:1.125rem;width:1.125rem;\"><img src=${this.src} class=\"max-h-full max-w-full object-contain\" /></div>`\n : html`<div class=\"flex items-center justify-center shrink-0\" style=\"height:3.125rem;width:3.125rem;\"><img src=${this.src} class=\"max-h-full max-w-full object-contain\" /></div>`;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RevisionItem } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\n@customElement('axebow-card-version-selector')\nexport class AxebowCardVersionSelector extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n width: auto;\n max-width: var(--axebow-card-version-selector-max-width, 120px);\n margin-block: 0.25rem;\n }\n sl-select {\n --sl-input-background-color: transparent;\n --sl-input-border-color: transparent;\n --sl-input-background-color-focus: transparent;\n --sl-input-border-color-focus: transparent;\n --sl-focus-ring-width: 0px;\n --sl-color-primary-500: var(--axebow-tertiary);\n --sl-color-primary-600: var(--axebow-tertiary);\n --sl-input-spacing-small: 0.1875rem;\n --sl-input-height-small: auto;\n --sl-input-font-size-small: var(--text-base, 0.75rem);\n --sl-font-size-medium: var(--text-base, 0.75rem);\n --sl-spacing-small: 0;\n display: inline-flex !important;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n min-width: 0;\n width: fit-content !important;\n max-width: var(--axebow-card-version-selector-max-width, 120px) !important;\n }\n sl-select::part(form-control) {\n display: inline-block;\n width: fit-content;\n border: none;\n background-color: transparent;\n padding: 0;\n min-width: 0;\n }\n sl-select::part(form-control-input) {\n display: inline-block;\n width: fit-content;\n }\n sl-select::part(display-input) { padding: 0; color: var(--axebow-tertiary); font-size: 0.75rem !important; transition: color 0.15s ease; }\n sl-select::part(combobox) {\n padding-inline-start: 0.25rem !important;\n padding-block: 0.125rem !important;\n gap: 0.25rem !important;\n justify-content: flex-start;\n cursor: pointer;\n border: none;\n outline: 1px solid transparent;\n outline-offset: -1px;\n border-radius: 0.375rem;\n background-color: transparent;\n transition: background-color 0.15s ease, outline-color 0.15s ease;\n }\n sl-select[open]::part(combobox) {\n outline-color: var(--axebow-tertiary);\n border-radius: 0.375rem 0.375rem 0 0;\n background-color: white;\n }\n sl-select::part(expand-icon) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n width: 1.125rem;\n height: 1.125rem;\n border: 1px solid var(--axebow-tertiary);\n border-radius: 0.25rem;\n color: var(--axebow-tertiary);\n background-color: transparent;\n transition: color 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;\n }\n sl-select::part(listbox) {\n border-color: var(--axebow-tertiary);\n border-top: none;\n border-radius: 0 0 0.375rem 0.375rem;\n box-shadow: none;\n margin-top: -1px;\n }\n sl-option::part(base) { font-size: 0.75rem; padding-inline-start: 0.25rem !important; }\n sl-option::part(checked-icon) { display: none; }\n\n sl-select:hover::part(display-input) { color: var(--axebow-gray); }\n sl-select:hover::part(expand-icon) { color: var(--axebow-gray); border-color: var(--axebow-gray); }\n\n sl-select[open]::part(expand-icon) {\n color: white;\n border-color: var(--axebow-tertiary);\n background-color: var(--axebow-tertiary);\n }\n `,\n ];\n\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) maxWidth?: string;\n\n protected updated(changed: PropertyValues) {\n super.updated(changed);\n if (changed.has('maxWidth')) {\n if (this.maxWidth) this.style.setProperty('--axebow-card-version-selector-max-width', this.maxWidth);\n else this.style.removeProperty('--axebow-card-version-selector-max-width');\n }\n }\n\n private _formatRevision(id: string): string {\n if (!id) return '';\n const parts = id.split('/');\n return parts[parts.length - 1] ?? id;\n }\n\n render() {\n return html`\n <sl-select size=\"small\" value=${this.displayedRevision} ?disabled=${this.disabled} @sl-change=${this._onChange}>\n ${this.revisions.map(\n (rev) => html`\n <sl-option value=${rev.id}>\n ${this._formatRevision(rev.id)}\n ${rev.id !== this.displayedRevision\n ? html`<axebow-icon slot=\"suffix\" iconName=\"update\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>`\n : ''}\n </sl-option>\n `\n )}\n </sl-select>\n `;\n }\n\n private _onChange(e: CustomEvent) {\n const revision = (e.target as HTMLSelectElement).value;\n this.dispatchEvent(new CustomEvent('revision-change', { detail: { revision }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\n\n@customElement('axebow-role-tooltip')\nexport class AxebowRoleTooltip extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: contents; }\n axebow-tooltip::part(body),\n sl-tooltip::part(body) {\n background-color: var(--axebow-white);\n color: var(--axebow-primary);\n padding: 1rem;\n border: 3px solid var(--axebow-table-border);\n width: 280px;\n }\n ul {\n margin: 0.5rem 0 0;\n padding-left: 1.2rem;\n list-style: disc;\n }\n li {\n font-size: 0.8rem;\n line-height: 1.5;\n }\n `,\n ];\n\n @property({ type: String }) heading = '';\n @property({ type: Array }) items: string[] = [];\n @property({ type: String }) color = 'var(--axebow-primary)';\n\n render() {\n if (!this.heading) return html``;\n\n return html`\n <axebow-tooltip placement=\"right\">\n <div slot=\"content\">\n <strong>${this.heading}</strong>\n <ul>\n ${this.items.map((item) => html`<li>${item}</li>`)}\n </ul>\n </div>\n <axebow-icon iconName=\"info\" class=\"cursor-pointer\" iconColor=${this.color}></axebow-icon>\n </axebow-tooltip>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardBadge, CardType, RevisionItem, RoleTooltipContent } from '../card.models.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\nimport '@shoelace-style/shoelace/dist/components/badge/badge.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-card-cloud-logo.js';\nimport './axebow-card-version-selector.js';\nimport './axebow-role-tooltip.js';\n\n@customElement('axebow-card-header')\nexport class AxebowCardHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n sl-badge::part(base) { background-color: var(--axebow-secondary); color: white; }\n `,\n ];\n\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) tenantOrAccount = '';\n @property({ type: String }) name = '';\n @property({ type: String }) badge: CardBadge = 'none';\n @property({ type: String }) subtitle = '';\n @property({ type: String }) cardType: CardType = 'account';\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: String }) freeIaasLabel = 'Free IaaS';\n @property({ type: String }) freeIaasTitle = 'Free Infrastructure';\n @property({ type: String }) freeIaasDesc = 'This environment uses free infrastructure.';\n @property({ type: String }) haLabel = 'Highly Available';\n @property({ type: String }) haTitle = 'High Availability enabled';\n @property({ type: String }) role = '';\n @property({ type: Object }) roleTooltips: Record<string, RoleTooltipContent> = {};\n @property({ type: String }) roleTooltipColor = 'var(--axebow-primary)';\n\n private _renderBadge() {\n if (this.badge === 'free-iaas') {\n return html`\n <axebow-tooltip>\n <div slot=\"content\" style=\"max-width:300px;\">\n <strong>${this.freeIaasTitle}</strong>\n <p style=\"margin-top:0.5rem;\">${this.freeIaasDesc}</p>\n </div>\n <div class=\"flex items-center gap-2 cursor-pointer\">\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n <span class=\"text-(--axebow-rich-black)\">${this.freeIaasLabel}</span>\n </div>\n </axebow-tooltip>\n `;\n }\n if (this.badge === 'ha') {\n return html`\n <axebow-tooltip content=${this.haTitle}>\n <sl-badge variant=\"neutral\" pill size=\"small\" class=\"cursor-pointer\">${this.haLabel}</sl-badge>\n </axebow-tooltip>\n `;\n }\n return html``;\n }\n\n private _headerHeight(): string {\n switch (this.cardType) {\n case 'tenant':\n return '4.375rem';\n case 'environment':\n return '3.6875rem';\n case 'account':\n case 'runtime':\n default:\n return '4.125rem';\n }\n }\n\n render() {\n const isTenant = this.cardType === 'tenant';\n const isCompact = this.cardType === 'environment' || isTenant;\n const isRuntime = this.cardType === 'runtime';\n const heightStyle = `height:${this._headerHeight()}`;\n\n if (isCompact) {\n return html`\n <div class=\"${isTenant ? 'w-88.5 mx-auto' : 'w-full'} bg-(--axebow-anti-flash-white) rounded-md flex flex-col justify-center px-5 py-3 box-border\" style=${heightStyle}>\n <div class=\"flex flex-col flex-1 min-w-0\">\n ${this.tenantOrAccount || this.logoSrc\n ? html`\n <div class=\"flex gap-2 items-center leading-none mt-1\">\n <axebow-card-cloud-logo .src=${this.logoSrc} size=\"small\"></axebow-card-cloud-logo>\n <span class=\"font-semibold text-(--axebow-gray) leading-none\">${this.tenantOrAccount}</span>\n </div>\n `\n : ''}\n <div class=\"flex justify-between items-center\">\n <span class=\"font-bold text-lg text-(--axebow-primary) leading-snug pt-0.5\">${this.name}</span>\n ${this._renderBadge()}\n </div>\n ${this.subtitle\n ? html`\n <div class=\"text-(--axebow-gray) flex items-center gap-1 mt-1\">\n ${this.subtitle}\n ${isTenant && this.roleTooltips[this.role]\n ? html`\n <axebow-role-tooltip\n .heading=${this.roleTooltips[this.role].title}\n .items=${this.roleTooltips[this.role].items}\n color=${this.roleTooltipColor}\n ></axebow-role-tooltip>\n `\n : html`<slot name=\"subtitle-tooltip\"></slot>`}\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"w-full bg-(--axebow-anti-flash-white) rounded-md flex items-center ${isRuntime ? 'gap-3 py-2 px-3' : 'gap-2 py-2 px-2'} box-border\" style=${heightStyle}>\n <axebow-card-cloud-logo .src=${this.logoSrc} size=\"large\"></axebow-card-cloud-logo>\n <div class=\"flex flex-col ${isRuntime ? 'flex-1 min-w-0 justify-center' : 'w-71 h-9.75'}\">\n ${!isRuntime && this.tenantOrAccount\n ? html`<div class=\"h-4.25 flex items-center\"><span class=\"text-base font-semibold text-(--axebow-gray) leading-none\">${this.tenantOrAccount}</span></div>`\n : ''}\n <div class=\"flex justify-between items-center ${isRuntime ? 'mt-1.5' : 'h-5.5'}\">\n <span class=\"font-bold text-lg text-(--axebow-primary) leading-snug ${isRuntime ? 'pl-1' : ''}\">${this.name}</span>\n ${this._renderBadge()}\n </div>\n ${isRuntime\n ? html`\n <div class=\"revision-wrap flex items-center mt-0\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n @revision-change=${this._onRevisionChange}\n ></axebow-card-version-selector>\n </div>\n `\n : this.subtitle\n ? html`<div class=\"text-xs text-(--axebow-gray) flex items-center gap-1 mt-1\">${this.subtitle}<slot name=\"subtitle-tooltip\"></slot></div>`\n : ''}\n </div>\n </div>\n `;\n }\n\n private _onRevisionChange(e: CustomEvent) {\n this.dispatchEvent(new CustomEvent('revision-change', { detail: e.detail, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('axebow-card-stat-item')\nexport class AxebowCardStatItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Number }) value: number = 0;\n @property({ type: String }) title = '';\n @property({ type: String }) label = '';\n @property({ type: Boolean }) active = true;\n\n render() {\n return html`\n <div class=\"flex flex-col items-center justify-center text-center w-30\">\n <h4 class=\"text-[18px] leading-none text-(--axebow-primary) font-bold m-0 whitespace-nowrap\">${this.value}</h4>\n <p class=\"mt-2 text-base leading-none m-0 whitespace-nowrap\">${this.title}</p>\n <div class=\"mt-1.75 h-3.5 leading-none\">\n ${this.label\n ? html`\n <span\n class=\"text-(--axebow-gray) font-semibold text-base whitespace-nowrap ${this.active ? 'cursor-pointer opacity-100' : 'cursor-not-allowed opacity-50'}\"\n @click=${this._onClick}\n >${this.label}</span>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private _onClick() {\n if (this.active) {\n this.dispatchEvent(new CustomEvent('label-click', { bubbles: true, composed: true }));\n }\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardType, MainStatsType } from '../card.models.js';\nimport './axebow-card-stat-item.js';\n\n@customElement('axebow-card-stats-row')\nexport class AxebowCardStatsRow extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) stats: MainStatsType[] = [];\n @property({ type: String }) cardType: CardType = 'account';\n\n private _hasButtons(): boolean {\n return this.cardType === 'account' || this.cardType === 'environment' || this.cardType === 'tenant';\n }\n\n render() {\n const heightClass = this._hasButtons() ? 'h-17.75' : 'h-11.25';\n\n return html`\n <div class=\"grid grid-cols-[7.5rem_7.5rem_7.5rem] items-center gap-0.5 w-91 ${heightClass} box-border\">\n ${this.stats.map(\n (stat, index) => html`\n <axebow-card-stat-item\n .value=${stat.value}\n .title=${stat.title}\n .label=${stat.label}\n .active=${stat.active !== false}\n @label-click=${() => this._handleLabelClick(index)}\n ></axebow-card-stat-item>\n `\n )}\n </div>\n `;\n }\n\n private _handleLabelClick(index: number) {\n this.dispatchEvent(\n new CustomEvent('stat-label-click', { detail: { index }, bubbles: true, composed: true })\n );\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-filter-item')\nexport class AxebowCardFilterItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: String }) name = '';\n @property({ type: Boolean }) showAttention = false;\n\n render() {\n return html`\n <div\n class=\"w-full py-1 px-2 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${this._onClick}\n >\n <p class=\"m-0\">${this.name}</p>\n ${this.showAttention\n ? html`<axebow-icon iconName=\"error\" size=\"md\" iconColor=\"var(--axebow-error)\"></axebow-icon>`\n : ''}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(\n new CustomEvent('item-select', { detail: { name: this.name }, bubbles: true, composed: true })\n );\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { CardFilterItem } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport './axebow-card-filter-item.js';\n\n@customElement('axebow-card-filter')\nexport class AxebowCardFilter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) items: CardFilterItem[] = [];\n @property({ type: String }) selected: string | null = null;\n @property({ type: String }) emptyLabel = '';\n @property({ type: String }) emptyActionLabel = '';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Boolean }) opened = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: Boolean }) isDisabled = false;\n\n render() {\n const showEmpty = !this.selected && this.items.length === 0;\n\n return html`\n <div class=\"relative\">\n <div class=\"flex justify-between items-center border-b border-(--axebow-light-gray) w-full h-8 box-border px-2 cursor-pointer\">\n ${showEmpty\n ? html`\n <p\n class=\"m-0 ${this.isPlainRole || this.isDisabled\n ? 'text-(--axebow-gray) cursor-default opacity-50'\n : 'text-(--axebow-tertiary) cursor-pointer'}\"\n @click=${this.isPlainRole || this.isDisabled ? undefined : this._onEmptyAction}\n >\n ${this.emptyActionLabel}\n </p>\n `\n : html`\n <div\n class=\"flex w-full justify-between items-center ${this.isDisabled ? 'opacity-50 cursor-not-allowed' : ''}\"\n @click=${this.isDisabled ? undefined : this._onToggle}\n >\n <span class=\"text-(--axebow-tertiary)\">${this.selected ?? this.emptyLabel}</span>\n <div class=\"flex items-center gap-2\">\n ${this.showAttention\n ? html`<p class=\"text-(--axebow-error) m-0 text-xs\">${this.attentionLabel}</p>`\n : ''}\n <axebow-icon iconName=\"chevron_right\" rotate=\"90\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `}\n </div>\n\n <div class=\"${this.opened ? '' : 'hidden'} absolute top-full left-0 right-0 z-10 flex flex-col bg-white rounded-b-lg border border-(--axebow-light-gray) shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] max-h-40 overflow-y-auto\">\n <p class=\"w-full p-2 cursor-pointer m-0 hover:bg-(--axebow-light-gray)\" @click=${() => this._onSelect(null)}>${this.emptyLabel}</p>\n ${this.items.map(\n (item) => html`\n <axebow-card-filter-item\n .name=${item.name}\n .showAttention=${item.showAttention}\n @item-select=${(e: CustomEvent) => this._onSelect(e.detail.name)}\n ></axebow-card-filter-item>\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _onToggle() {\n this.dispatchEvent(new CustomEvent('toggle-open', { bubbles: true, composed: true }));\n }\n\n private _onSelect(name: string | null) {\n this.dispatchEvent(new CustomEvent('filter-select', { detail: { name }, bubbles: true, composed: true }));\n }\n\n private _onEmptyAction() {\n this.dispatchEvent(new CustomEvent('empty-action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RuntimeFilterRole } from '../card.models.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-table-header')\nexport class AxebowCardTableHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Boolean }) opened = false;\n @property({ type: String }) filterDisplayText = '';\n @property({ type: String }) allLabel = 'All Roles & Instances';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Array }) filterRoles: RuntimeFilterRole[] = [];\n\n render() {\n return html`\n <div class=\"relative\">\n <div\n class=\"flex justify-between items-center border-b border-(--axebow-light-gray) w-full h-8 box-border px-2 cursor-pointer\"\n @click=${this._onToggle}\n >\n <span class=\"text-(--axebow-tertiary)\">${this.filterDisplayText || this.allLabel}</span>\n <div class=\"flex items-center gap-2\">\n ${this.showAttention ? html`<p class=\"text-(--axebow-error) m-0 text-xs\">${this.attentionLabel}</p>` : ''}\n <axebow-icon iconName=\"chevron_right\" rotate=\"90\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n\n <div class=\"${this.opened ? '' : 'hidden'} absolute top-full left-0 right-0 z-10 flex flex-col bg-white rounded-b-lg border border-(--axebow-light-gray) shadow-[2px_2px_25px_0px_rgba(0,0,0,0.1)] max-h-40 overflow-y-auto\">\n <p class=\"w-full p-2 cursor-pointer m-0 hover:bg-(--axebow-light-gray)\" @click=${() => this._onSelect('', 'all')}>${this.allLabel}</p>\n ${this.filterRoles.map(\n (role) => html`\n <div\n class=\"w-full py-1 px-2 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${() => this._onSelect(role.name, 'role')}\n >\n <div class=\"flex items-center gap-2\">\n ${role.logo ? html`<img src=${role.logo} class=\"w-5 h-5\" />` : ''}\n <p class=\"m-0\">${role.name}</p>\n </div>\n </div>\n ${role.instances.map(\n (inst) => html`\n <div\n class=\"w-full py-1 px-2 pl-6 flex justify-between items-center cursor-pointer hover:bg-(--axebow-light-gray)\"\n @click=${() => this._onSelect(inst.name, 'instance')}\n >\n <div class=\"flex items-center gap-2\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <p class=\"m-0\">${inst.name}</p>\n </div>\n ${inst.needsAttention\n ? html`<axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>`\n : ''}\n </div>\n `\n )}\n `\n )}\n </div>\n </div>\n `;\n }\n\n private _onToggle() {\n this.dispatchEvent(new CustomEvent('toggle-open', { bubbles: true, composed: true }));\n }\n\n private _onSelect(selected: string, type: 'instance' | 'role' | 'all') {\n this.dispatchEvent(new CustomEvent('filter-change', { detail: { selected, type }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\nimport { TableStatsType } from '../card.models.js';\n\n@customElement('axebow-card-resource-row')\nexport class AxebowCardResourceRow extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: contents; }`,\n ];\n\n @property({ type: Object }) stat!: TableStatsType;\n @property({ type: Number }) attentionThreshold = 90;\n @property({ type: Boolean }) isLast = false;\n @property({ type: Boolean }) allEmpty = false;\n\n private formatNumber(value?: number | string): number | string {\n if (value === undefined || value === null) return '-.-';\n if (typeof value !== 'number') return value;\n return Number(value.toFixed(2));\n }\n\n render() {\n const stat = this.stat;\n const showDivider = !stat.hidden && !this.isLast;\n const textClass = stat.isSecondary ? 'text-sm font-normal' : 'text-base font-semibold';\n const barHeightClass = stat.isSecondary ? 'h-2.25' : 'h-2.75';\n const rowHeightClass = stat.isSecondary ? 'h-5.25' : 'h-7';\n const cellClass = `w-full ${rowHeightClass} box-border ${showDivider ? 'border-b border-dashed border-(--axebow-light-gray)' : ''}`;\n\n if (stat.hidden) {\n return html`\n <div class=\"flex items-center ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n <div class=\"flex items-center justify-end ${cellClass}\"></div>\n `;\n }\n\n return html`\n <div class=\"flex items-center ${cellClass}\">\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=${stat.icon} size=\"md\" rotate=${stat.iconRotation ?? 0}></axebow-icon>\n <span class=\"${textClass}\">${stat.title}</span>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <p class=\"${textClass} m-0\">${this.formatNumber(stat.value)}</p>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <div class=\"${barHeightClass} w-35 bg-(--axebow-light-gray) rounded-md relative overflow-hidden\">\n <div\n class=\"absolute h-full ${stat.percentage >= this.attentionThreshold ? 'bg-(--axebow-error)' : 'bg-(--axebow-gray)'}\"\n style=\"width:${stat.percentage}%;\"\n ></div>\n </div>\n </div>\n\n <div class=\"flex items-center justify-end ${cellClass}\">\n <p class=\"${textClass} m-0\">\n ${this.allEmpty\n ? '-.-'\n : html`${this.formatNumber(stat.maxValue)}<span class=\"font-normal\">${stat.title === 'vCPU' ? '' : stat.tagValue ?? ''}</span>`}\n </p>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { TableStatsType } from '../card.models.js';\nimport './axebow-card-resource-row.js';\n\n@customElement('axebow-card-resource-table')\nexport class AxebowCardResourceTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Array }) rows: TableStatsType[] = [];\n @property({ type: Number }) attentionThreshold = 90;\n\n render() {\n const visibleRows = this.rows.filter((r) => !r.hidden);\n const lastVisible = visibleRows[visibleRows.length - 1];\n const allEmpty = visibleRows.every((r) => Number(r.maxValue ?? 0) === 0);\n\n return html`\n <div class=\"grid grid-cols-[auto_auto_1fr_auto] gap-x-2 gap-y-1 w-full px-2 pt-px box-border\">\n ${this.rows.map(\n (stat) => html`\n <axebow-card-resource-row\n .stat=${stat}\n .attentionThreshold=${this.attentionThreshold}\n .isLast=${stat === lastVisible}\n .allEmpty=${allEmpty}\n ></axebow-card-resource-row>\n `\n )}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-attention-banner')\nexport class AxebowCardAttentionBanner extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n .error-bg { background-color: color-mix(in srgb, var(--axebow-error) 10%, white); }\n .clickable { cursor: pointer; }\n .clickable:hover { background-color: var(--axebow-base); --axebow-error: var(--axebow-gray); }\n axebow-button::part(label) { color: var(--axebow-error); font-weight: 600; display: flex; align-items: center; gap: 2px; }\n axebow-button::part(base) { padding: 0; height: auto; min-height: unset; pointer-events: none; background-color: transparent; }\n axebow-icon { display: inline-flex; align-items: center; line-height: 1; }\n `,\n ];\n\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) label = 'View details';\n @property({ type: String }) askOwnerLabel = 'Ask an owner or admin to solve this problem';\n\n render() {\n return html`\n <div\n class=\"${this.isPlainRole ? '' : 'error-bg clickable'} flex items-center justify-center gap-1 w-full h-8.75 box-border px-3 text-sm text-center overflow-hidden\"\n @click=${this.isPlainRole ? undefined : this._onClick}\n >\n ${this.isPlainRole\n ? html`<span class=\"text-(--axebow-error)\">${this.askOwnerLabel}</span>`\n : html`\n <axebow-button variant=\"text\" size=\"small\">\n ${this.label}\n <axebow-icon iconName=\"arrow_forward\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>\n </axebow-button>\n `}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-action-banner')\nexport class AxebowCardActionBanner extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; }\n .tertiary-bg { background-color: color-mix(in srgb, var(--axebow-tertiary) 10%, white); }\n .clickable { cursor: pointer; }\n .clickable:hover { background-color: var(--axebow-base); --axebow-tertiary: var(--axebow-gray); }\n axebow-button::part(label) { color: var(--axebow-tertiary); font-weight: 600; display: flex; align-items: center; gap: 2px; }\n axebow-button::part(base) { padding: 0; height: auto; min-height: unset; pointer-events: none; background-color: transparent; }\n axebow-icon { display: inline-flex; align-items: center; line-height: 1; }\n `,\n ];\n\n @property({ type: String }) label = 'View details';\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) notAllowedLabel = '';\n\n render() {\n return html`\n <div\n class=\"${this.isPlainRole ? '' : 'tertiary-bg clickable'} flex items-center justify-center gap-1 w-full h-8.75 box-border px-3 text-sm text-center overflow-hidden\"\n @click=${this.isPlainRole ? undefined : this._onClick}\n >\n ${this.isPlainRole\n ? html`<span class=\"text-(--axebow-gray)\">${this.notAllowedLabel}</span>`\n : html`\n <axebow-button variant=\"text\" size=\"small\">\n ${this.label}\n <axebow-icon iconName=\"arrow_forward\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </axebow-button>\n `}\n </div>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-tooltip/axebow-tooltip.js';\nimport '@shoelace-style/shoelace/dist/components/spinner/spinner.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-status')\nexport class AxebowCardStatus extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: block; flex: 1; min-width: 0; }\n axebow-tooltip::part(base),\n sl-tooltip::part(base) { max-width: none; white-space: normal; word-break: break-word; }\n `,\n ];\n\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) borderColor = '';\n @property({ type: Boolean }) showSpinner = false;\n\n render() {\n if (!this.statusCode) {\n return html`<div class=\"w-full whitespace-nowrap overflow-hidden text-ellipsis\"><slot></slot></div>`;\n }\n\n return html`\n <div class=\"flex items-center gap-1 min-w-0 w-full\">\n ${this.showSpinner ? html`<sl-spinner style=\"--indicator-color:${this.borderColor};\"></sl-spinner>` : ''}\n <p class=\"font-bold m-0 line-clamp-1\" style=\"color:${this.borderColor};\" title=${this.statusCode}>${this.statusCode}</p>\n <axebow-tooltip content=${this.statusMessage}>\n <axebow-icon class=\"cursor-pointer shrink-0\" iconColor=${this.borderColor} iconName=\"info\" size=\"md\"></axebow-icon>\n </axebow-tooltip>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ActionMenuItem } from '../card.models.js';\nimport './../../axebow-more-actions/axebow-more-actions.js';\nimport './axebow-card-status.js';\n\n@customElement('axebow-card-footer')\nexport class AxebowCardFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: block; }`,\n ];\n\n @property({ type: Boolean }) isFreeIaaS = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) borderColor = '';\n @property({ type: Boolean }) showSpinner = false;\n @property({ type: Boolean }) moreActionsOpen = false;\n @property({ type: Array }) moreActionsOptions: ActionMenuItem[] = [];\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n @property({ type: String }) actionLabel = '';\n\n render() {\n const showDropdown = !this.isFreeIaaS && !this.isPlainRole && this.moreActionsOptions.length > 0;\n const showAction = !showDropdown && !!this.actionLabel;\n\n return html`\n <div class=\"flex justify-between items-center relative h-8 gap-2\">\n <axebow-card-status\n .statusCode=${this.statusCode}\n .statusMessage=${this.statusMessage}\n .borderColor=${this.borderColor}\n .showSpinner=${this.showSpinner}\n >\n <slot></slot>\n </axebow-card-status>\n ${showDropdown\n ? html`\n <axebow-more-actions\n class=\"w-27.5 h-8 shrink-0\"\n placement=\"top\"\n .open=${this.moreActionsOpen}\n .options=${this.moreActionsOptions}\n .closeLabel=${this.closeLabel}\n .moreActionsLabel=${this.moreActionsLabel}\n @toggled=${this._onToggled}\n ></axebow-more-actions>\n `\n : showAction\n ? html`<axebow-button\n variant=\"text\"\n size=\"medium\"\n hoverStyle=\"border\"\n paddingLeft=\"0.5rem\"\n paddingRight=\"0.5rem\"\n fixedWidth=\"7.0625rem\"\n fixedHeight=\"2rem\"\n @click=${this._onAction}\n >${this.actionLabel}</axebow-button\n >`\n : ''}\n </div>\n `;\n }\n\n private _onToggled(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('more-actions-toggled', { detail: { open: e.detail.open }, bubbles: true, composed: true })\n );\n }\n\n private _onAction() {\n this.dispatchEvent(new CustomEvent('footer-action-click', { bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport {\n ActionMenuItem,\n CardBadge,\n CardFilterItem,\n CardType,\n MainStatsType,\n RevisionItem,\n RoleTooltipContent,\n RuntimeFilterRole,\n TableStatsType,\n} from './card.models.js';\nimport './../axebow-more-actions/axebow-more-actions.js';\nimport './parts/axebow-card-header.js';\nimport './parts/axebow-card-stats-row.js';\nimport './parts/axebow-card-filter.js';\nimport './parts/axebow-card-table-header.js';\nimport './parts/axebow-card-resource-table.js';\nimport './parts/axebow-card-attention-banner.js';\nimport './parts/axebow-card-action-banner.js';\nimport './parts/axebow-card-footer.js';\n\n@customElement('axebow-base-card')\nexport class AxebowBaseCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host { display: inline-block; max-width: 100%; }\n .deploy-time {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n `,\n ];\n\n @property({ type: String, reflect: true, attribute: 'card-type' }) cardType: CardType = 'account';\n @property({ type: String }) name = '';\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) tenantOrAccount = '';\n @property({ type: String }) badge: CardBadge = 'none';\n @property({ type: String }) subtitle = '';\n\n @property({ type: Array }) mainStats: MainStatsType[] = [];\n\n @property({ type: Array }) tableStats: TableStatsType[] = [];\n @property({ type: Number }) attentionThreshold = 90;\n\n @property({ type: Array }) filterItems: CardFilterItem[] = [];\n @property({ type: String }) selected: string | null = null;\n @property({ type: Boolean }) filterOpened = false;\n @property({ type: String }) emptyLabel = '';\n @property({ type: String }) emptyActionLabel = '';\n @property({ type: String }) attentionLabel = 'Attention needed';\n @property({ type: Boolean }) showAttention = false;\n @property({ type: Boolean }) isPlainRole = false;\n @property({ type: Boolean }) isDeleting = false;\n @property({ type: Boolean }) isDisabled = false;\n\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) isDeployed = false;\n @property({ type: String }) deployedLabel = 'Deployed';\n\n @property({ type: Array }) filterRoles: RuntimeFilterRole[] = [];\n @property({ type: String }) filterDisplayText = '';\n @property({ type: String }) allLabel = 'All Roles & Instances';\n\n @property({ type: String }) borderColor = '';\n @property({ type: String }) statusCode = '';\n @property({ type: String }) statusMessage = '';\n @property({ type: String }) serviceDetailLabel = 'Service detail';\n\n @property({ type: Boolean }) showActionBanner = false;\n @property({ type: Boolean }) showWarningBanner = false;\n @property({ type: String }) manageLabel = 'Manage';\n @property({ type: String }) askOwnerLabel = 'Ask your owner';\n @property({ type: String }) invalidCredsLabel = 'Invalid credentials.';\n @property({ type: String }) limitReachedLabel = 'Limit reached.';\n @property({ type: String }) andLabel = 'and';\n @property({ type: String }) actionBannerLabel = '';\n @property({ type: String }) notAllowedLabel = '';\n\n @property({ type: Boolean }) moreActionsOpen = false;\n @property({ type: Array }) moreActionsOptions: ActionMenuItem[] = [];\n @property({ type: Boolean }) isFreeIaaS = false;\n @property({ type: String }) closeLabel = 'Close';\n @property({ type: String }) moreActionsLabel = 'More';\n\n @property({ type: String }) freeIaasLabel = 'Free IaaS';\n @property({ type: String }) freeIaasTitle = 'Free Infrastructure';\n @property({ type: String }) freeIaasDesc = 'This environment uses free infrastructure.';\n @property({ type: String }) haLabel = 'Highly Available';\n @property({ type: String }) haTitle = 'High Availability enabled';\n\n @property({ type: String }) role = '';\n @property({ type: Object }) roleTooltips: Record<string, RoleTooltipContent> = {};\n @property({ type: String }) roleTooltipColor = 'var(--axebow-primary)';\n\n private static readonly SIZE_CLASSES: Record<CardType, string> = {\n tenant: 'w-95 min-h-107.5',\n account: 'w-95 min-h-113.25',\n environment: 'w-95 min-h-113.25',\n runtime: 'w-95 min-h-102.5',\n };\n\n private _hasAttention(): boolean {\n const primary = this.tableStats.slice(0, 3).map((r) => r.title);\n return this.tableStats.some((s) => primary.includes(s.title) && s.percentage >= this.attentionThreshold);\n }\n\n render() {\n const isRuntime = this.cardType === 'runtime';\n\n const hasError = this.showWarningBanner || this._hasAttention();\n const showErrorBanner = this.showActionBanner && hasError;\n const showNormalBanner = this.showActionBanner && !hasError;\n const showBanner = showErrorBanner || showNormalBanner;\n\n return html`\n <div\n class=\"${AxebowBaseCard.SIZE_CLASSES[this.cardType]} bg-(--axebow-white) rounded-md px-2 pt-2 pb-2 flex flex-col justify-between gap-2 box-border ${isRuntime ? 'border-t-4' : ''} transition-shadow duration-200 ease-in-out hover:shadow-[0_4px_12px_0_rgba(13,24,33,0.08)] ${this.isDeleting ? 'pointer-events-none cursor-not-allowed grayscale' : ''}\"\n style=${isRuntime ? `border-top-color:${this.borderColor};` : ''}\n ?inert=${this.isDeleting}\n >\n <div class=\"flex flex-col gap-2\">\n <axebow-card-header\n .cardType=${this.cardType}\n .logoSrc=${this.logoSrc}\n .tenantOrAccount=${this.tenantOrAccount}\n .name=${this.name}\n .badge=${this.badge}\n .subtitle=${this.subtitle}\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n .freeIaasLabel=${this.freeIaasLabel}\n .freeIaasTitle=${this.freeIaasTitle}\n .freeIaasDesc=${this.freeIaasDesc}\n .haLabel=${this.haLabel}\n .haTitle=${this.haTitle}\n .role=${this.role}\n .roleTooltips=${this.roleTooltips}\n .roleTooltipColor=${this.roleTooltipColor}\n @revision-change=${(e: CustomEvent) =>\n this.dispatchEvent(new CustomEvent('revision-change', { detail: e.detail, bubbles: true, composed: true }))}\n >\n <slot slot=\"subtitle-tooltip\" name=\"subtitle-tooltip\"></slot>\n </axebow-card-header>\n\n <div class=\"w-full flex flex-col gap-2\">\n ${isRuntime\n ? html`\n <div class=\"flex flex-row justify-between items-center min-h-10 max-h-10 overflow-hidden\">\n <span class=\"deploy-time text-(--axebow-secondary)\"><slot name=\"time-elapsed\"></slot></span>\n ${this.isDeployed\n ? html`<span class=\"text-(--axebow-secondary) border-2 border-(--axebow-secondary) rounded-md py-0.5 px-1.5 whitespace-nowrap text-xs\">${this.deployedLabel}</span>`\n : ''}\n </div>\n `\n : html`\n <axebow-card-stats-row\n .stats=${this.mainStats}\n .cardType=${this.cardType}\n @stat-label-click=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('stat-label-click', { detail: e.detail, bubbles: true, composed: true }))}\n ></axebow-card-stats-row>\n `}\n\n <div class=\"flex flex-col w-full h-full\">\n <div class=\"w-87 mx-2 border border-(--axebow-light-gray) box-border ${showBanner ? 'rounded-t-md' : 'rounded-md'}\">\n ${isRuntime\n ? html`\n <axebow-card-table-header\n .opened=${this.filterOpened}\n .filterDisplayText=${this.filterDisplayText}\n .allLabel=${this.allLabel}\n .attentionLabel=${this.attentionLabel}\n .showAttention=${this.showAttention}\n .filterRoles=${this.filterRoles}\n @toggle-open=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('toggle-filter', { bubbles: true, composed: true }))}\n @filter-change=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('filter-change', { detail: e.detail, bubbles: true, composed: true }))}\n ></axebow-card-table-header>\n `\n : html`\n <axebow-card-filter\n .items=${this.filterItems}\n .selected=${this.selected}\n .emptyLabel=${this.emptyLabel}\n .emptyActionLabel=${this.emptyActionLabel}\n .attentionLabel=${this.attentionLabel}\n .showAttention=${this.showAttention}\n .opened=${this.filterOpened}\n .isPlainRole=${this.isPlainRole}\n .isDisabled=${this.isDeleting || this.isDisabled}\n @filter-select=${(e: CustomEvent) =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('filter-select', { detail: e.detail, bubbles: true, composed: true }))}\n @toggle-open=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('toggle-filter', { bubbles: true, composed: true }))}\n @empty-action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('empty-action-click', { bubbles: true, composed: true }))}\n ></axebow-card-filter>\n `}\n\n <axebow-card-resource-table\n .rows=${this.tableStats}\n .attentionThreshold=${this.attentionThreshold}\n ></axebow-card-resource-table>\n </div>\n\n <div class=\"w-87 mx-2 h-8.75 box-border ${showBanner ? 'border-x border-b border-(--axebow-light-gray) rounded-b-md overflow-hidden' : ''}\">\n ${showErrorBanner\n ? html`<axebow-card-attention-banner\n .isPlainRole=${this.isPlainRole}\n .label=${this.actionBannerLabel}\n .askOwnerLabel=${this.askOwnerLabel}\n @action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }))}\n ></axebow-card-attention-banner>`\n : showNormalBanner\n ? html`<axebow-card-action-banner\n .label=${this.actionBannerLabel}\n .isPlainRole=${this.isPlainRole}\n .notAllowedLabel=${this.notAllowedLabel}\n @action-click=${() =>\n !this.isDeleting && this.dispatchEvent(new CustomEvent('action-click', { bubbles: true, composed: true }))}\n ></axebow-card-action-banner>`\n : ''}\n </div>\n </div>\n\n <slot name=\"extra-features\"></slot>\n </div>\n </div>\n\n <axebow-card-footer\n class=\"px-2\"\n .isFreeIaaS=${this.isFreeIaaS}\n .isPlainRole=${this.isPlainRole}\n .statusCode=${isRuntime ? this.statusCode : ''}\n .statusMessage=${isRuntime ? this.statusMessage : ''}\n .borderColor=${this.borderColor}\n .showSpinner=${isRuntime && this.borderColor === 'var(--axebow-gray)'}\n .moreActionsOpen=${this.moreActionsOpen}\n .moreActionsOptions=${isRuntime ? [] : this.moreActionsOptions}\n .closeLabel=${this.closeLabel}\n .moreActionsLabel=${this.moreActionsLabel}\n .actionLabel=${isRuntime ? this.serviceDetailLabel : ''}\n @more-actions-toggled=${(e: CustomEvent) =>\n this.dispatchEvent(new CustomEvent('more-actions-toggled', { detail: e.detail, bubbles: true, composed: true }))}\n @footer-action-click=${() =>\n this.dispatchEvent(new CustomEvent('service-detail-click', { bubbles: true, composed: true }))}\n >\n <slot name=\"status-footer\"></slot>\n </axebow-card-footer>\n\n <slot name=\"dialogs\" class=\"contents\"></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-card-special-link')\nexport class AxebowCardSpecialLink extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`:host { display: inline-flex; }`,\n ];\n\n @property({ type: String }) label = '';\n @property({ type: String }) color = 'var(--axebow-error)';\n @property({ type: String }) icon = 'arrow_forward';\n\n render() {\n return html`\n <span class=\"cursor-pointer\" style=\"color:${this.color};\" @click=${this._onClick}>\n ${this.label}\n <axebow-icon iconName=${this.icon} iconColor=${this.color} size=\"md\"></axebow-icon>\n </span>\n `;\n }\n\n private _onClick() {\n this.dispatchEvent(new CustomEvent('link-click', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme, STATUS_COLORS } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\n\nexport type AlertVariant = 'success' | 'info' | 'neutral' | 'warning' | 'error';\n\nconst VARIANT_CONFIG: Record<AlertVariant, { icon: string; iconColor: string }> = {\n success: { icon: 'check_circle', iconColor: STATUS_COLORS.HEALTHY },\n info: { icon: 'info', iconColor: 'var(--axebow-tertiary)' },\n neutral: { icon: 'settings', iconColor: 'var(--axebow-secondary)' },\n warning: { icon: 'warning', iconColor: STATUS_COLORS.WARNING },\n error: { icon: 'error', iconColor: STATUS_COLORS.ERROR },\n};\n\n/**\n * Purely presentational toast/alert. Holds no business state of its own -\n * message, variant and the close/action callbacks are supplied by the\n * caller. `visible` is a controlled prop; the component only calls\n * `onClose` once its own hide animation finishes, it never removes itself\n * from the DOM.\n */\n@customElement('axebow-alert')\nexport class AxebowAlert extends LitElement {\n @property({ type: String }) variant: AlertVariant = 'info';\n @property({ type: String }) message = '';\n @property({ type: Boolean }) closable = true;\n @property({ type: Boolean }) visible = false;\n @property({ type: String }) actionLabel = '';\n @property({ type: String }) closeLabel = 'Close';\n @property({ attribute: false }) onAction?: () => void;\n @property({ attribute: false }) onClose?: () => void;\n\n @property({ type: Number }) duration = 4000;\n\n private _isClosing = false;\n private _autoCloseTimeout?: ReturnType<typeof setTimeout>;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n animation: slideIn 0.3s ease-out;\n pointer-events: auto;\n }\n\n @keyframes slideIn {\n from {\n transform: translateX(100%);\n opacity: 0;\n }\n to {\n transform: translateX(0);\n opacity: 1;\n }\n }\n\n :host(.closing) {\n animation: slideOut 0.3s ease-in;\n }\n\n @keyframes slideOut {\n from {\n transform: translateX(0);\n opacity: 1;\n }\n to {\n transform: translateX(100%);\n opacity: 0;\n }\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n if (this.duration > 0) {\n this._autoCloseTimeout = setTimeout(() => this._handleClose(), this.duration);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._autoCloseTimeout) clearTimeout(this._autoCloseTimeout);\n }\n\n private _handleClose() {\n if (this._isClosing) return;\n this._isClosing = true;\n\n if (this._autoCloseTimeout) clearTimeout(this._autoCloseTimeout);\n\n this.classList.add('closing');\n setTimeout(() => {\n this.visible = false;\n this.onClose?.();\n }, 300);\n }\n\n render() {\n if (!this.visible) return html``;\n\n const config = VARIANT_CONFIG[this.variant] ?? VARIANT_CONFIG.info;\n\n return html`\n <div\n class=\"theme flex items-start gap-3 p-4 rounded-md border-l-4 shadow-md transition-all duration-300 bg-white axebow-shadow\"\n style=\"border-left-color: ${config.iconColor};\"\n >\n <axebow-icon iconName=\"${config.icon}\" iconColor=\"${config.iconColor}\" size=\"3xl\"></axebow-icon>\n <div class=\"flex-1 min-w-0\">\n <p class=\"line-clamp-11 overflow-hidden m-0\" .innerHTML=${this.message}></p>\n </div>\n ${this.actionLabel\n ? html`<axebow-button\n variant=\"text\"\n size=\"small\"\n fixedWidth=\"2.3125rem\"\n fixedHeight=\"1.0625rem\"\n @click=${() => {\n this.onAction?.();\n this._handleClose();\n }}\n >${this.actionLabel}</axebow-button\n >`\n : ''}\n ${this.closable\n ? html`\n <button\n @click=${() => this._handleClose()}\n aria-label=${this.closeLabel}\n class=\"text-gray-500 hover:text-gray-700 cursor-pointer p-0 border-0 bg-transparent\"\n >\n <axebow-icon iconName=\"close\" size=\"md\"></axebow-icon>\n </button>\n `\n : ''}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../cards/parts/axebow-card-version-selector.js';\nimport type { RevisionItem } from '../cards/card.models.js';\n\n@customElement('axebow-draggable-service')\nexport class AxebowDraggableService extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) serviceName = '';\n @property({ type: String }) resourcesSummary = '';\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) showVersionSelector = false;\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: String }) dragData = '';\n\n private _handleDragStart(e: DragEvent) {\n if (this.disabled || !e.dataTransfer) return;\n e.dataTransfer.setData('application/json', this.dragData);\n e.dataTransfer.effectAllowed = 'copy';\n }\n\n render() {\n return html`\n <div\n class=\"w-56.5 h-12.75 pt-2 pb-2 pr-2 box-border flex items-center gap-1 rounded-md ${this.disabled\n ? 'bg-(--axebow-base) opacity-50 cursor-not-allowed'\n : 'bg-(--axebow-base) cursor-grab'}\"\n draggable=\"${this.disabled ? 'false' : 'true'}\"\n @dragstart=${this._handleDragStart}\n >\n <axebow-icon class=\"w-4.5 h-4.5 shrink-0\" iconName=\"drag_indicator\" iconColor=\"var(--axebow-gray)\"></axebow-icon>\n <div class=\"flex flex-col gap-1 min-w-0 flex-1\">\n <div class=\"h-4.25 flex items-center gap-1 min-w-0\">\n <h1 class=\"w-27 h-4.25 leading-4.25 truncate m-0 text-base font-semibold text-(--axebow-black)\">\n ${this.serviceName}\n </h1>\n ${this.showVersionSelector\n ? html`<div class=\"flex-1 min-w-0 flex justify-end\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n .displayedRevision=${this.displayedRevision}\n ></axebow-card-version-selector>\n </div>`\n : ''}\n </div>\n <p class=\"h-3.5 leading-3.5 truncate m-0 text-sm text-(--axebow-gray)\">${this.resourcesSummary}</p>\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-search/axebow-search.js';\nimport '../axebow-draggable-service/axebow-draggable-service.js';\n\nexport interface AxebowServiceListItem {\n name: string;\n resourcesSummary: string;\n disabled: boolean;\n dragData: string;\n}\n@customElement('axebow-services-panel')\nexport class AxebowServicesPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n flex-shrink: 0;\n }\n `,\n ];\n\n @property({ type: Boolean }) collapsed = true;\n @property({ type: Array }) services: AxebowServiceListItem[] = [];\n @property({ type: String }) searchTerm = '';\n\n @property({ type: String }) title = '';\n @property({ type: String }) dragDropText = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) noServicesFoundText = '';\n\n render() {\n if (this.collapsed) {\n return html`\n <div\n class=\"h-10 w-10 rounded-full bg-(--axebow-tertiary) hover:bg-(--axebow-gray) transition-colors duration-200 flex items-center justify-center cursor-pointer\"\n @click=${this._handleToggle}\n >\n <axebow-icon iconName=\"add\" iconColor=\"white\"></axebow-icon>\n </div>\n `;\n }\n\n return html`\n <div class=\"flex items-start\">\n ${this._renderCard()}\n <div\n class=\"w-4.25 h-4.5 mt-2.25 pl-px flex items-center justify-center border border-l-0 border-solid border-(--axebow-tertiary) hover:border-(--axebow-gray) transition-colors duration-200 rounded cursor-pointer bg-(--axebow-tertiary)/15\"\n @click=${this._handleToggle}\n >\n <axebow-icon iconName=\"close\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `;\n }\n\n private _renderCard() {\n return html`\n <div class=\"flex flex-col gap-2 w-60.5 shrink-0\">\n <div class=\"h-full bg-white rounded-md axebow-shadow p-2 box-border\">\n <div class=\"flex justify-between items-center gap-4\">\n <h1 class=\"font-semibold text-base text-(--axebow-secondary) uppercase px-1\">${this.title}</h1>\n </div>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80\"></div>\n <axebow-search\n class=\"px-1 my-2\"\n width=\"13.625rem\"\n placeholder=\"${this.searchPlaceholder}\"\n .value=${this.searchTerm}\n @search-change=${(e: CustomEvent<{ value: string }>) => this._handleSearchChange(e.detail.value)}\n ></axebow-search>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80 my-1.5\"></div>\n <p class=\"text-base text-center text-(--axebow-secondary) px-2\">${this.dragDropText}</p>\n <div class=\"w-full h-px bg-(--axebow-light-gray)/80\"></div>\n ${this._renderServicesList()}\n </div>\n </div>\n `;\n }\n\n private _renderServicesList() {\n if (this.services.length === 0) {\n return html`<p class=\"text-sm text-(--axebow-gray) px-2 mt-2\">${this.noServicesFoundText}</p>`;\n }\n return html`\n <div class=\"flex flex-col gap-1.5 mt-2\">\n ${this.services.map(\n (service) => html`\n <axebow-draggable-service\n .serviceName=${service.name}\n .resourcesSummary=${service.resourcesSummary}\n .disabled=${service.disabled}\n .dragData=${service.dragData}\n ></axebow-draggable-service>\n `\n )}\n </div>\n `;\n }\n\n private _handleToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, composed: true }));\n }\n\n private _handleSearchChange(value: string) {\n this.dispatchEvent(new CustomEvent('search-change', { detail: { value }, bubbles: true, composed: true }));\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\n\n@customElement('axebow-channel-config-panel')\nexport class AxebowChannelConfigPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n flex-shrink: 0;\n }\n `,\n ];\n @property({ type: Boolean }) empty = true;\n @property({ type: String }) channelTypeLabel = '';\n @property({ type: Boolean }) canEditAll = true;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) height = '80vh';\n\n render() {\n return html`\n <div\n class=\"bg-white rounded-md axebow-shadow p-2 w-62.5 flex-col gap-3 transition-all duration-300 ease-in-out overflow-hidden\n hidden lg:flex ${this.empty ? 'justify-center items-center text-(--axebow-gray)' : ''}\"\n style=\"height: ${this.height};\"\n >\n ${this.empty\n ? ''\n : html`\n <div\n class=\"flex flex-col gap-3 opacity-100 transition-opacity duration-300 delay-100 w-full h-full overflow-y-auto\"\n >\n <div class=\"flex justify-between items-center gap-2 pointer-events-auto\">\n <h1\n class=\"font-semibold text-sm text-(--axebow-secondary) truncate m-0\"\n style=\"width: 14.625rem; height: 1rem; line-height: 1rem;\"\n >\n ${this.channelTypeLabel}\n </h1>\n ${this.canEditAll && !this.disabled\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer\"\n @click=${this._handleDelete}\n >\n <axebow-icon iconName=\"delete\" iconColor=\"var(--axebow-error)\" size=\"base\"></axebow-icon>\n </div>\n `\n : ''}\n ${this.disabled\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer pointer-events-auto\"\n @click=${this._handleClose}\n >\n <axebow-icon iconName=\"close\" iconColor=\"var(--axebow-gray)\" size=\"base\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n <div class=\"flex flex-col gap-2 w-full ${this.disabled ? 'pointer-events-none' : ''}\">\n <slot name=\"name-input\"></slot>\n <slot name=\"port-input\"></slot>\n <slot name=\"gateway-toggle\"></slot>\n <slot name=\"gateway-options\"></slot>\n </div>\n </div>\n `}\n </div>\n `;\n }\n\n private _handleDelete() {\n this.dispatchEvent(new CustomEvent('delete', { bubbles: true, composed: true }));\n }\n\n private _handleClose() {\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n}\n","import '../axebow-divider/axebow-divider.js';\n\nexport interface AxebowMeshChannelData {\n readonly id: string;\n readonly name: string;\n readonly isPublic?: boolean;\n readonly port?: number;\n readonly portNum?: string;\n readonly protocol?: string;\n readonly showIcon?: boolean;\n readonly needsPort?: boolean;\n readonly isDuplicate?: boolean;\n readonly duplicateClass?: string;\n /** Already-formatted tooltip shown on the gateway icon, when showIcon is set. */\n readonly gatewayTooltip?: string;\n /** Already-translated tooltip for the \"port not configured\" warning icon. */\n readonly portWarningTooltip?: string;\n /** Already-translated tooltip for the \"duplicate channel name\" error icon. */\n readonly duplicateTooltip?: string;\n}\n\nexport interface AxebowMeshNodeLabels {\n serverChannelsTitle: string;\n clientChannelsTitle: string;\n duplexChannelsTitle: string;\n noChannelsText: string;\n comingSoonText: string;\n}\n\nexport function createElement<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n className?: string,\n textContent?: string\n): HTMLElementTagNameMap[K] {\n const el = document.createElement(tag);\n if (className) el.className = className;\n if (textContent) el.textContent = textContent;\n return el;\n}\n\nexport function createIcon(iconName: string, color: string, size: string, title?: string): HTMLElement {\n const icon = document.createElement('axebow-icon') as HTMLElement;\n icon.setAttribute('iconName', iconName);\n icon.setAttribute('iconColor', color);\n icon.setAttribute('size', size);\n if (title) icon.setAttribute('title', title);\n return icon;\n}\n\nfunction buildPortDot(channelId: string, side: 'left' | 'right'): HTMLElement {\n const dot = createElement('div', `port-dot port-dot-${side}`);\n dot.setAttribute('magnet', 'true');\n dot.setAttribute('port', `${channelId}-${side}`);\n dot.setAttribute('data-port-id', channelId);\n return dot;\n}\n\nfunction buildChannelRow(ch: AxebowMeshChannelData): HTMLElement {\n const row = createElement('div', `channel channel-row ${ch.duplicateClass || ''}`);\n\n const leftDot = buildPortDot(ch.id, 'left');\n row.appendChild(leftDot);\n\n const nameSpan = createElement('span', 'channel-name');\n nameSpan.setAttribute('data-channel-id', ch.id);\n nameSpan.textContent = ch.name;\n\n if (ch.showIcon) {\n const icon = createIcon('captive_portal', 'var(--axebow-primary)', 'small', ch.gatewayTooltip);\n icon.classList.add('channel-icon', 'protocol-icon');\n nameSpan.appendChild(icon);\n }\n row.appendChild(nameSpan);\n\n const iconsContainer = createElement('div', 'channel-icons-container flex items-center gap-1');\n\n if (ch.needsPort) {\n const warnIcon = createIcon('warning', 'var(--axebow-warning)', 'small', ch.portWarningTooltip);\n warnIcon.classList.add('channel-icon', 'warning-icon-right');\n iconsContainer.appendChild(warnIcon);\n }\n if (ch.isDuplicate) {\n const errIcon = createIcon('error', 'var(--axebow-error)', 'x-small', ch.duplicateTooltip);\n errIcon.classList.add('channel-icon', 'error-icon-right');\n iconsContainer.appendChild(errIcon);\n }\n row.appendChild(iconsContainer);\n\n const rightDot = buildPortDot(ch.id, 'right');\n row.appendChild(rightDot);\n\n const overlay = createElement('div', 'channel-drag-overlay');\n overlay.setAttribute('data-port-id', ch.id);\n overlay.setAttribute('port', ch.id);\n\n overlay.addEventListener('click', (e) => {\n e.stopPropagation();\n overlay.dispatchEvent(\n new CustomEvent('channel-clicked', {\n detail: { id: ch.id },\n bubbles: true,\n composed: true,\n })\n );\n });\n\n row.appendChild(overlay);\n\n return row;\n}\n\nfunction buildChannelSection(\n title: string,\n noChannelsText: string,\n channels: AxebowMeshChannelData[],\n addButton: HTMLElement | null\n): HTMLElement {\n const fragment = document.createDocumentFragment();\n\n const titleDiv = createElement('div', 'channel-title');\n const h4 = createElement('h4', undefined, title);\n titleDiv.appendChild(h4);\n if (addButton) titleDiv.appendChild(addButton);\n fragment.appendChild(titleDiv);\n\n const listDiv = createElement('div');\n if (channels.length === 0) {\n listDiv.appendChild(createElement('p', 'gray-text', noChannelsText));\n } else {\n channels.forEach((ch) => listDiv.appendChild(buildChannelRow(ch)));\n }\n fragment.appendChild(listDiv);\n\n const container = createElement('div');\n container.appendChild(fragment);\n return container;\n}\n\nfunction buildComingSoonSection(title: string, comingSoonText: string): HTMLElement {\n const fragment = document.createDocumentFragment();\n\n const titleDiv = createElement('div', 'channel-title');\n titleDiv.appendChild(createElement('h4', undefined, title));\n fragment.appendChild(titleDiv);\n\n const listDiv = createElement('div');\n listDiv.appendChild(createElement('p', 'gray-text', comingSoonText));\n fragment.appendChild(listDiv);\n\n const container = createElement('div');\n container.appendChild(fragment);\n return container;\n}\n\nexport function buildAddButton(channelType: string): HTMLElement {\n const container = createElement('div', 'add-button-container');\n container.classList.add(`add-button-${channelType}`);\n const icon = createIcon('add', 'var(--axebow-tertiary)', 'small');\n container.appendChild(icon);\n\n container.addEventListener('mouseenter', () => icon.setAttribute('iconColor', 'var(--axebow-gray)'));\n container.addEventListener('mouseleave', () => icon.setAttribute('iconColor', 'var(--axebow-tertiary)'));\n\n container.addEventListener('click', (e) => {\n e.stopPropagation();\n container.dispatchEvent(\n new CustomEvent('add-channel', {\n detail: { type: channelType },\n bubbles: true,\n composed: true,\n })\n );\n });\n\n return container;\n}\n\nfunction buildDivider(): HTMLElement {\n const divider = document.createElement('axebow-divider');\n divider.classList.add('mesh-node-divider');\n return divider;\n}\n\nexport interface AxebowMainNodeData {\n label: string;\n serverChannels?: AxebowMeshChannelData[];\n clientChannels?: AxebowMeshChannelData[];\n duplexChannels?: AxebowMeshChannelData[];\n}\n\nexport function buildMainNodeContent(\n data: AxebowMainNodeData,\n labels: AxebowMeshNodeLabels,\n serverAddButton: HTMLElement | null,\n clientAddButton: HTMLElement | null\n): HTMLElement {\n const root = createElement('div');\n root.setAttribute('data-node-type', 'main');\n\n const card = createElement('div', 'service-card');\n card.appendChild(createElement('h4', 'service-name', data.label));\n\n const serverSection = buildChannelSection(\n labels.serverChannelsTitle,\n labels.noChannelsText,\n data.serverChannels || [],\n serverAddButton\n );\n card.appendChild(serverSection);\n card.appendChild(buildDivider());\n\n const clientSection = buildChannelSection(\n labels.clientChannelsTitle,\n labels.noChannelsText,\n data.clientChannels || [],\n clientAddButton\n );\n card.appendChild(clientSection);\n card.appendChild(buildDivider());\n\n const duplexSection = buildComingSoonSection(labels.duplexChannelsTitle, labels.comingSoonText);\n card.appendChild(duplexSection);\n\n root.appendChild(card);\n return root;\n}\n\nexport interface AxebowExternalNodeData extends AxebowMainNodeData {\n additionalClass?: string;\n labelClass?: string;\n}\n\nexport function buildExternalNodeContent(\n data: AxebowExternalNodeData,\n labels: Pick<AxebowMeshNodeLabels, 'serverChannelsTitle' | 'clientChannelsTitle' | 'noChannelsText'>\n): { root: HTMLElement; trashButton: HTMLElement; trashIcon: HTMLElement } {\n const root = createElement('div', data.additionalClass || '');\n root.setAttribute('data-node-type', 'external');\n\n const card = createElement('div', 'service-card');\n\n const label = createElement('h4', data.labelClass || '');\n label.style.marginBottom = '0.5rem';\n label.textContent = data.label;\n card.appendChild(label);\n\n const serverSection = buildChannelSection(\n labels.serverChannelsTitle,\n labels.noChannelsText,\n data.serverChannels || [],\n null\n );\n card.appendChild(serverSection);\n card.appendChild(buildDivider());\n\n const clientSection = buildChannelSection(\n labels.clientChannelsTitle,\n labels.noChannelsText,\n data.clientChannels || [],\n null\n );\n card.appendChild(clientSection);\n\n root.appendChild(card);\n\n const trashBtn = createElement('div', 'trash-button');\n\n const trashIcon = createIcon('delete', 'var(--axebow-error)', 'x-small');\n trashIcon.classList.add('delete-button');\n trashBtn.appendChild(trashIcon);\n\n root.appendChild(trashBtn);\n\n return { root, trashButton: trashBtn, trashIcon };\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport '../axebow-icon/axebow-icon.js';\n\nexport interface HelpBubbleOption {\n label: string;\n url: string;\n}\n\n/**\n * Purely presentational floating help bubble. Which links to show (and\n * their already-translated labels) are supplied entirely by the caller -\n * the component only owns its own open/closed hover state and opens the\n * given URL in a new tab.\n */\n@customElement('axebow-help-bubble')\nexport class AxebowHelpBubble extends LitElement {\n @property({ type: Array }) options: HelpBubbleOption[] = [];\n\n @state() private _isOpen = false;\n\n static styles = unsafeCSS(tailwindCss);\n\n private _openLink(url: string) {\n window.open(url, '_blank');\n }\n\n render() {\n return html`\n <div\n class=\"flex flex-col items-end gap-2\"\n @mouseenter=${() => (this._isOpen = true)}\n @mouseleave=${() => (this._isOpen = false)}\n >\n ${this._isOpen\n ? html`\n <div class=\"flex flex-col bg-white rounded-md axebow-shadow overflow-hidden min-w-[8.2rem]\">\n <div class=\"flex justify-center px-3 py-1\">\n <div class=\"flex flex-col\">\n ${this.options.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2 px-3 py-1 my-0.5 rounded-md cursor-pointer hover:bg-[var(--axebow-anti-flash-white)] transition-colors\"\n @click=${() => this._openLink(option.url)}\n >\n <span class=\"text-sm font-semibold text-(--axebow-primary) whitespace-nowrap\"\n >${option.label}</span\n >\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-gray)\" size=\"base\"></axebow-icon>\n </div>\n `\n )}\n </div>\n </div>\n </div>\n `\n : ''}\n <div\n class=\"w-12 h-12 rounded-full flex items-center justify-center cursor-pointer shadow-lg transition-colors duration-200 self-end ${this\n ._isOpen\n ? 'bg-(--axebow-gray)'\n : 'bg-(--axebow-tertiary)'}\"\n >\n <axebow-icon iconName=\"contact_support\" iconColor=\"white\" size=\"xl\"></axebow-icon>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational stat card. Clickability and navigation are\n * entirely up to the caller via `onClick` - the component itself never\n * knows about routes.\n */\n@customElement('axebow-number-card')\nexport class AxebowNumberCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) icon = '';\n @property({ type: Number }) number = 0;\n @property({ type: String }) label = '';\n @property({ attribute: false }) onClick?: () => void;\n\n render() {\n const clickable = !!this.onClick;\n return html`\n <div\n class=\"flex items-center gap-3 w-70.5 h-20 box-border bg-white border-solid border border-[#DBDDE4] rounded-md p-3 ${clickable\n ? 'cursor-pointer axebow-shadow-hover'\n : ''}\"\n @click=${() => this.onClick?.()}\n >\n <div\n class=\"w-10.5 h-10.5 shrink-0 flex items-center justify-center bg-(--axebow-base) rounded-md\"\n >\n <axebow-icon iconName=${this.icon} size=\"3xl\"></axebow-icon>\n </div>\n <div class=\"flex flex-col min-w-0\">\n <h2 class=\"m-0 text-lg font-bold\">${this.number}</h2>\n <p class=\"m-0 text-base font-semibold text-(--axebow-gray) truncate\">${this.label}</p>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-number-card/axebow-number-card.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface NumberCardItem {\n icon: string;\n number: number;\n label: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational row of stat cards. Wraps to multiple lines on\n * narrow viewports since each card has a fixed width.\n */\n@customElement('axebow-numbers-section')\nexport class AxebowNumbersSection extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: Array }) items: NumberCardItem[] = [];\n\n render() {\n return html`\n <div class=\"flex flex-wrap gap-4\">\n ${this.items.map(\n (item) => html`\n <axebow-number-card\n icon=${item.icon}\n .number=${item.number}\n label=${item.label}\n .onClick=${item.onClick}\n ></axebow-number-card>\n `\n )}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface PillItem {\n icon?: string;\n image?: string;\n label: string;\n buttonText: string;\n buttonIcon?: string;\n onClick?: () => void;\n}\n\n/**\n * Purely presentational call-to-action pill. Width fills whatever flex\n * row the caller puts it in; height hugs its own content - neither is\n * hardcoded here.\n */\n@customElement('axebow-pill')\nexport class AxebowPill extends LitElement {\n @property({ type: String }) icon = '';\n @property({ type: String }) image = '';\n @property({ type: String }) label = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) buttonIcon = '';\n @property({ attribute: false }) onClick?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n flex: 1 1 0%;\n min-width: 0;\n }\n .axebow-white-button-text::part(label) {\n color: white;\n }\n .pill:hover .axebow-white-button-text::part(label) {\n color: var(--axebow-primary) !important;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"pill group flex flex-col items-center justify-center gap-3 p-6\n transition-colors duration-300\n bg-(--axebow-primary) rounded-md text-white cursor-pointer shadow-md\n hover:border-2 hover:px-5.5 hover:border-solid hover:border-(--axebow-primary)\n hover:bg-white hover:text-(--axebow-primary) hover:shadow-lg\"\n @click=${() => this.onClick?.()}\n @mouseenter=${this._handleMouseEnter}\n @mouseleave=${this._handleMouseLeave}\n >\n ${this.image\n ? html`<img\n src=\"${this.image}\"\n class=\"w-12 h-12 transition-[filter] duration-300 ease-in-out group-hover:invert\"\n />`\n : html`<axebow-icon iconName=\"${this.icon}\" iconColor=\"white\" size=\"3xl\"></axebow-icon>`}\n <p class=\"text-center flex items-center justify-center px-2 font-medium m-0\">${this.label}</p>\n <axebow-button variant=\"text\" class=\"axebow-white-button-text\">\n ${this.buttonText}\n ${this.buttonIcon\n ? html`<axebow-icon iconName=\"${this.buttonIcon}\" iconColor=\"white\" size=\"md\"></axebow-icon>`\n : ''}\n </axebow-button>\n </div>\n `;\n }\n\n private _handleMouseEnter(event: Event) {\n const pill = event.currentTarget as HTMLElement;\n pill.querySelectorAll('axebow-icon').forEach((icon) => {\n icon.setAttribute('iconColor', 'var(--axebow-primary)');\n });\n }\n\n private _handleMouseLeave(event: Event) {\n const pill = event.currentTarget as HTMLElement;\n pill.querySelectorAll('axebow-icon').forEach((icon) => {\n icon.setAttribute('iconColor', 'white');\n });\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational header/collapse toggle for the quick-tip section.\n * `paddingBottom` (the floating collapsed button's bottom offset, so it\n * clears the app footer) and `onToggle` are both supplied by the caller -\n * the component owns no footer-tracking or navigation logic of its own.\n */\n@customElement('axebow-quick-tip-button')\nexport class AxebowQuickTipButton extends LitElement {\n @property({ type: String }) label = '';\n @property({ type: String }) showLabel = '';\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) isStarted = false;\n @property({ type: Number }) paddingBottom = 50;\n @property({ attribute: false }) onToggle?: () => void;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n\n .collapsed-container {\n position: fixed;\n left: 50%;\n transform: translateX(-50%);\n z-index: 50;\n transition:\n bottom 0.3s ease,\n opacity 0.3s ease;\n width: auto;\n animation: fadeIn 0.3s ease-out;\n }\n\n @keyframes fadeIn {\n from {\n opacity: 0;\n transform: translate(-50%, 20px);\n }\n to {\n opacity: 1;\n transform: translate(-50%, 0);\n }\n }\n\n .collapsed-button {\n background-color: white;\n border: 1px solid var(--axebow-light-gray);\n border-bottom: none;\n color: var(--axebow-gray);\n transition: all 0.2s ease;\n box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);\n border-radius: 0.375rem 0.375rem 0 0;\n }\n\n .collapsed-button:hover {\n border-color: var(--axebow-tertiary);\n color: var(--axebow-tertiary);\n background-color: var(--axebow-base);\n transform: translateY(-2px);\n }\n `,\n ];\n\n render() {\n if (this.collapsed && this.isStarted) {\n return this._renderFloatingButton();\n }\n\n return html`\n <div class=\"flex justify-center items-center gap-4 mb-6\">\n <h2 class=\"text-(--axebow-primary) text-lg font-black leading-none\">${this.label}</h2>\n ${this.isStarted\n ? html`\n <axebow-icon\n iconName=\"visibility_off\"\n class=\"cursor-pointer hover:text-(--axebow-tertiary) transition-colors\"\n iconColor=\"currentColor\"\n @click=${() => this.onToggle?.()}\n ></axebow-icon>\n `\n : ''}\n </div>\n `;\n }\n\n private _renderFloatingButton() {\n return html`\n <div class=\"collapsed-container\" style=\"bottom: ${this.paddingBottom}px;\" @click=${() => this.onToggle?.()}>\n <button class=\"collapsed-button w-47.75 h-7 flex items-center justify-center gap-2 cursor-pointer\">\n <span class=\"whitespace-nowrap text-sm font-bold\">${this.showLabel}</span>\n <axebow-icon iconName=\"visibility\" size=\"md\" iconColor=\"currentColor\"></axebow-icon>\n </button>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface InfrastructureItem {\n title: string;\n description: string;\n}\n\n/**\n * Purely presentational \"how your infrastructure is organized\" card.\n * Heading, image and the already-translated item list are all supplied\n * by the caller.\n */\n@customElement('axebow-infrastructure-card')\nexport class AxebowInfrastructureCard extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) heading = '';\n @property({ type: String }) imageUrl = '';\n @property({ type: Array }) items: InfrastructureItem[] = [];\n\n render() {\n return html`\n <div class=\"w-294 flex flex-col bg-white rounded-md shadow-sm\">\n <h3 class=\"text-md font-bold leading-tight text-center mt-8 mx-12 mb-6.5 text-(--axebow-primary)\">\n ${this.heading}\n </h3>\n <div class=\"w-270 mx-12 mb-8 flex items-center gap-8.75\">\n <img src=\"${this.imageUrl}\" class=\"w-130.25 h-49.5 object-contain shrink-0\" />\n <div class=\"w-131 text-base text-start\">\n <p class=\"m-0\">\n ${this.items.map(\n (item, index) => html`\n <span class=\"text-(--axebow-primary) font-bold\">${item.title}:</span> ${item.description}${index <\n this.items.length - 1\n ? html`<br /><br />`\n : ''}\n `\n )}\n </p>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport '../axebow-pill/axebow-pill.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-icon/axebow-icon.js';\nimport type { PillItem } from '../axebow-pill/axebow-pill.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational \"let's start it\" card. Title, description and\n * the already-translated pill configs (each carrying its own `onClick`)\n * are all supplied by the caller. The contact button only renders when\n * `contactUrl` is given - whether that link is configured is decided by\n * the caller, not here.\n */\n@customElement('axebow-getting-started-card')\nexport class AxebowGettingStartedCard extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) heading = '';\n @property({ type: String }) description = '';\n @property({ type: Array }) pills: PillItem[] = [];\n\n @property({ type: String }) contactUrl = '';\n @property({ type: String }) contactLabel = '';\n @property({ type: String }) dontShowAgainLabel = '';\n @property({ type: Boolean }) dontShowAgain = false;\n @property({ attribute: false }) onDontShowAgainChange?: (checked: boolean) => void;\n @property({ type: String }) notNowLabel = '';\n @property({ attribute: false }) onNotNow?: () => void;\n\n render() {\n return html`\n <div class=\"w-294 flex flex-col bg-white rounded-md shadow-sm\">\n <h2 class=\"text-md font-bold text-center mt-6 mx-6 mb-4 text-(--axebow-primary)\">${this.heading}</h2>\n <div class=\"w-282 mx-6\">\n <axebow-divider margin=\"0\"></axebow-divider>\n </div>\n <div class=\"w-282 h-52.75 mx-6 flex flex-col\">\n <p class=\"text-base text-center my-4 text-black\">${this.description}</p>\n <div class=\"flex gap-4\">\n ${this.pills.map(\n (pill) => html`\n <axebow-pill\n icon=${pill.icon || ''}\n image=${pill.image || ''}\n label=${pill.label}\n buttonText=${pill.buttonText}\n buttonIcon=${pill.buttonIcon || ''}\n .onClick=${pill.onClick}\n ></axebow-pill>\n `\n )}\n </div>\n </div>\n <div class=\"w-282 mx-6 mt-4 mb-4\">\n <axebow-divider margin=\"0\"></axebow-divider>\n </div>\n <div class=\"w-139 h-9.5 mx-auto mb-6 flex items-center justify-center gap-4\">\n ${this.contactUrl\n ? html`\n <axebow-button variant=\"primary\" outline @click=${() => window.open(this.contactUrl, '_blank')}>\n ${this.contactLabel}\n <axebow-icon iconName=\"open_in_new\" size=\"md\" slot=\"suffix\"></axebow-icon>\n </axebow-button>\n `\n : ''}\n <div class=\"flex items-center gap-2\">\n <sl-checkbox\n .checked=${this.dontShowAgain}\n @sl-change=${(e: Event) => this.onDontShowAgainChange?.((e.target as HTMLInputElement).checked)}\n >\n ${this.dontShowAgainLabel}\n </sl-checkbox>\n <axebow-button fixedWidth=\"5.625rem\" variant=\"text\" @click=${() => this.onNotNow?.()}>${this.notNowLabel}</axebow-button>\n </div>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface MarketplaceCardResource {\n icon: string;\n iconRotate?: number;\n text: string;\n exceedsLimit?: boolean;\n}\n\n/**\n * Purely presentational marketplace item card. Every label, resource\n * figure, badge color and the deploy callback are supplied by the\n * caller - the component owns no domain, translation or resource\n * availability logic of its own.\n */\n@customElement('axebow-marketplace-card')\nexport class AxebowMarketplaceCard extends LitElement {\n @property({ type: String }) logoSrc = '';\n @property({ type: String }) name = '';\n @property({ type: String }) version = '';\n @property({ type: Array }) versions: string[] = [];\n @property({ type: String }) domain = '';\n @property({ type: String }) domainColor = 'var(--axebow-primary)';\n @property({ type: String }) description = '';\n @property({ type: Array }) resources: MarketplaceCardResource[] = [];\n @property({ type: Boolean }) disabled = false;\n\n @property({ type: String }) badgeLabel = '';\n @property({ type: String }) badgeIcon = '';\n @property({ type: String }) badgeIconColor = 'var(--axebow-gray)';\n @property({ type: String }) badgeWidth = '3.5625rem';\n @property({ type: String }) badgeBgColor = 'var(--axebow-primary-light)';\n @property({ type: String }) badgeTextColor = 'var(--axebow-primary)';\n\n @property({ type: String }) deployLabel = '';\n @property({ attribute: false }) onDeploy?: () => void;\n\n @state() private _deployHovered = false;\n @state() private _versionsOpen = false;\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this._versionsOpen && !e.composedPath().includes(this)) {\n this._versionsOpen = false;\n }\n };\n\n private _closeVersions() {\n this._versionsOpen = false;\n }\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n axebow-button[variant='text']:hover::part(base) {\n background-color: var(--axebow-base);\n }\n axebow-button[variant='text']:hover::part(label) {\n color: var(--axebow-gray);\n text-decoration: none;\n }\n `,\n ];\n\n private _hasResourceWarning(): boolean {\n return this.resources.some((resource) => resource.exceedsLimit);\n }\n\n private _renderResources() {\n return html`\n <div class=\"flex items-center gap-1 min-w-0 overflow-hidden flex-1\">\n ${this.resources.map(\n (resource, index) => html`\n <axebow-icon\n class=\"shrink-0\"\n iconName=${resource.icon}\n iconColor=\"var(--axebow-gray)\"\n rotate=${resource.iconRotate ?? 0}\n size=\"md\"\n ></axebow-icon>\n <span class=\"truncate ${resource.exceedsLimit ? 'underline decoration-(--axebow-error)' : ''}\">\n ${resource.text}${index < this.resources.length - 1 ? ' |' : ''}\n </span>\n `\n )}\n ${this._hasResourceWarning()\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"dangerous\"\n iconColor=\"var(--axebow-error)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n `;\n }\n\n private _renderVersionSelector() {\n return html`\n <div class=\"relative shrink-0\">\n <div\n class=\"w-15.25 h-4.5 box-border flex items-center overflow-hidden border border-(--axebow-light-gray) rounded-md\"\n >\n <span class=\"flex-1 min-w-0 truncate text-base pl-1.5\">${this.version}</span>\n <div\n class=\"w-4.25 h-4.5 box-border flex items-center justify-center shrink-0 cursor-pointer border-l border-solid border-(--axebow-light-gray)\"\n @click=${() => (this._versionsOpen = !this._versionsOpen)}\n >\n <axebow-icon iconName=\"keyboard_arrow_down\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n\n ${this._versionsOpen\n ? html`\n <div\n class=\"absolute top-full left-0 mt-1 w-full box-border bg-(--axebow-white) border border-(--axebow-light-gray) rounded-md flex flex-col overflow-hidden z-10\"\n >\n ${this.versions.map(\n (v) => html`\n <button\n class=\"text-base text-left bg-transparent border-none cursor-pointer px-1.5 py-1 truncate hover:bg-(--axebow-anti-flash-white)\"\n @click=${() => this._closeVersions()}\n >\n ${v}\n </button>\n `\n )}\n </div>\n `\n : ''}\n </div>\n `;\n }\n\n private _renderBadge() {\n return html`\n <div\n class=\"h-7.5 flex items-center justify-center gap-1 rounded shrink-0\"\n style=\"width:${this.badgeWidth}; background-color:${this.badgeBgColor};\"\n >\n ${this.badgeIcon\n ? html`<span class=\"w-2 h-3 flex items-center justify-center overflow-hidden shrink-0\">\n <axebow-icon iconName=${this.badgeIcon} iconColor=${this.badgeIconColor} size=\"sm\"></axebow-icon>\n </span>`\n : ''}\n <span class=\"text-sm font-semibold uppercase tracking-wider\" style=\"color:${this.badgeTextColor};\">\n ${this.badgeLabel}\n </span>\n </div>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"w-95 h-57.5 box-border p-4 flex flex-col gap-4\n bg-(--axebow-white) rounded-md axebow-shadow-hover\n ${this.disabled ? 'bg-(--axebow-base)' : ''}\"\n >\n <div class=\"w-87 h-12.25 flex items-center gap-3 min-w-0 shrink-0\">\n <img\n src=\"${this.logoSrc}\"\n class=\"w-11.5 h-11.5 shrink-0 aspect-square object-contain rounded\"\n alt=\"${this.name} logo\"\n />\n <div class=\"flex flex-col gap-1.25 w-full min-w-0\">\n <div class=\"flex items-center justify-between gap-1 w-full min-w-0\">\n <h3 class=\"text-md font-bold text-(--axebow-primary) truncate m-0\">${this.name}</h3>\n ${this._renderVersionSelector()}\n </div>\n <div class=\"flex items-center gap-1 text-base text-(--axebow-gray) w-full min-w-0\">\n ${this._renderResources()}\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-2 flex-1 min-w-0 overflow-hidden\">\n <span class=\"underline truncate block text-base\" style=\"color:${this.domainColor};\">${this.domain}</span>\n <span\n class=\"text-base text-(--axebow-black) line-clamp-2 overflow-hidden wrap-break-word\"\n title=${this.description}\n >\n ${this.description}\n </span>\n </div>\n\n <div class=\"flex items-center justify-between gap-1 flex-wrap shrink-0\">\n ${this._renderBadge()}\n <axebow-button\n variant=\"text\"\n size=\"small\"\n fixedWidth=\"5.8125rem\"\n fixedHeight=\"2rem\"\n .disabled=${this.disabled}\n @click=${() => this.onDeploy?.()}\n @mouseenter=${() => (this._deployHovered = true)}\n @mouseleave=${() => (this._deployHovered = false)}\n >\n <axebow-icon\n slot=\"prefix\"\n iconName=\"sound_sampler\"\n size=\"md\"\n iconColor=\"${this._deployHovered ? 'var(--axebow-gray)' : 'var(--axebow-tertiary)'}\"\n ></axebow-icon>\n <span class=\"text-base\">${this.deployLabel}</span>\n </axebow-button>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational deploy-source action card. Title, icon, deploy\n * label and the click callback are all supplied by the caller - the\n * component owns no navigation or deployment logic of its own.\n */\n@customElement('axebow-deploy-card')\nexport class AxebowDeployCard extends LitElement {\n @property({ type: String }) title = '';\n @property({ type: String }) icon = '';\n @property({ type: String }) deployLabel = '';\n @property({ attribute: false }) onClick?: () => void;\n @property({ type: String }) width = '36.1875rem';\n @property({ type: String }) height = '3.625rem';\n\n @state() private _deployHovered = false;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n axebow-button[variant='text']:hover::part(base) {\n background-color: var(--axebow-base);\n }\n axebow-button[variant='text']:hover::part(label) {\n color: var(--axebow-gray);\n text-decoration: none;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"box-border p-3.25 flex items-center gap-4\n bg-(--axebow-white) border border-solid border-(--axebow-table-header-border) rounded-md\n axebow-shadow-hover\"\n style=\"width:${this.width};height:${this.height};\"\n >\n <div class=\"w-8 h-8 flex items-center justify-center bg-(--axebow-base) rounded-md shrink-0\">\n <span class=\"w-4.25 h-4.25 flex items-center justify-center overflow-hidden\">\n <axebow-icon iconName=${this.icon} iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </span>\n </div>\n <p class=\"text-md font-semibold text-(--axebow-primary) m-0 truncate\">${this.title}</p>\n <axebow-button\n variant=\"text\"\n class=\"ml-auto\"\n fixedWidth=\"5.625rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onClick?.()}\n @mouseenter=${() => (this._deployHovered = true)}\n @mouseleave=${() => (this._deployHovered = false)}\n >\n <axebow-icon\n slot=\"prefix\"\n iconName=\"sound_sampler\"\n size=\"xl\"\n iconColor=\"${this._deployHovered ? 'var(--axebow-gray)' : 'var(--axebow-tertiary)'}\"\n ></axebow-icon>\n ${this.deployLabel}\n </axebow-button>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ResourceCardRow {\n icon: string;\n label: string;\n count: number;\n freeCount?: string;\n onSeeInNewTab?: () => void;\n onSeeHere?: () => void;\n}\n\n/**\n * Purely presentational tenant resource summary card. Every row (icon,\n * label, count) and every navigation callback are supplied by the\n * caller - the component owns no routing or window-opening logic of\n * its own.\n */\n@customElement('axebow-resource-card')\nexport class AxebowResourceCard extends LitElement {\n @property({ type: String }) tenantName = '';\n @property({ type: Array }) rows: ResourceCardRow[] = [];\n @property({ type: String }) seeInNewTabLabel = '';\n @property({ type: String }) seeHereLabel = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"w-full h-77.25 box-border bg-(--axebow-white) rounded-md border border-solid border-(--axebow-table-header-border) flex flex-col axebow-shadow-hover overflow-hidden\"\n >\n <div\n class=\"w-full h-11 box-border shrink-0 flex items-center justify-between px-4 py-2.75\n bg-(--axebow-anti-flash-white) border-b border-solid border-(--axebow-light-gray)\"\n >\n <span class=\"text-lg font-semibold text-(--axebow-primary) truncate\">${this.tenantName}</span>\n <div class=\"w-6 h-6 flex items-center justify-center shrink-0\">\n <span class=\"w-4.5 h-4.5 flex items-center justify-center overflow-hidden\">\n <axebow-icon iconName=\"cloud_circle\" iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </span>\n </div>\n </div>\n\n <div class=\"flex flex-col px-4 pt-1 pb-4\">\n ${this.rows.map(\n (row) => html`\n <div class=\"w-full h-12.25 box-border flex flex-col\">\n <div class=\"flex-1 flex items-center justify-between text-[0.9375rem]\">\n <div class=\"w-30 h-5 flex items-center gap-1 min-w-0 shrink-0\">\n <div class=\"w-5 h-5 flex items-center justify-center shrink-0\">\n <axebow-icon iconName=\"${row.icon}\" iconColor=\"var(--axebow-primary)\" size=\"md\"></axebow-icon>\n </div>\n <span class=\"text-base font-semibold text-(--axebow-black) truncate\">${row.label}</span>\n </div>\n\n <div class=\"flex items-center shrink-0\">\n <span class=\"w-18.75 h-4.25 flex items-center justify-center font-semibold text-(--axebow-black) whitespace-nowrap\"\n >${row.count}</span\n ><span class=\"w-17 h-4.25 flex items-center text-(--axebow-gray) whitespace-nowrap\"\n >${row.freeCount ? ` ${row.freeCount}` : ''}</span\n >\n </div>\n\n <button\n class=\"w-26.25 h-8 box-border flex items-center justify-center gap-1 bg-transparent border-none cursor-pointer rounded whitespace-nowrap text-(--axebow-gray) hover:bg-(--axebow-anti-flash-white) shrink-0\"\n @click=${() => row.onSeeInNewTab?.()}\n >\n ${this.seeInNewTabLabel}\n <axebow-icon iconName=\"open_in_new\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </button>\n\n <button\n class=\"w-20.5 h-8 box-border flex items-center justify-center bg-transparent border-none cursor-pointer rounded whitespace-nowrap text-(--axebow-tertiary) hover:bg-(--axebow-anti-flash-white) hover:text-(--axebow-gray) shrink-0\"\n @click=${() => row.onSeeHere?.()}\n >\n ${this.seeHereLabel}\n </button>\n </div>\n\n <div class=\"pt-2 shrink-0\">\n <div class=\"w-full h-px bg-(--axebow-base)\"></div>\n </div>\n </div>\n `\n )}\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport '../axebow-quick-tip-button/axebow-quick-tip-button.js';\nimport '../axebow-infrastructure-card/axebow-infrastructure-card.js';\nimport '../axebow-getting-started-card/axebow-getting-started-card.js';\nimport type { InfrastructureItem } from '../axebow-infrastructure-card/axebow-infrastructure-card.js';\nimport type { PillItem } from '../axebow-pill/axebow-pill.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational composition of the quick-tip toggle button, the\n * infrastructure explainer card and the getting-started card. Owns only\n * the expand/collapse animation and scroll-into-view UI mechanics - every\n * piece of copy, image, callback and the footer-clearance offset come\n * from the caller.\n */\n@customElement('axebow-quick-tip-section')\nexport class AxebowQuickTipSection extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n #content-section {\n scroll-margin-top: 180px;\n transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);\n overflow: hidden;\n }\n\n .content-hidden {\n opacity: 0;\n max-height: 0;\n margin-top: 0;\n pointer-events: none;\n }\n\n .content-visible {\n opacity: 1;\n max-height: 2000px;\n margin-top: 1rem;\n }\n `,\n ];\n\n @property({ type: Boolean }) showContent = true;\n @property({ type: Boolean }) isStarted = false;\n @property({ type: Number }) paddingBottom = 50;\n @property({ attribute: false }) onToggle?: () => void;\n\n @property({ type: String }) buttonLabel = '';\n @property({ type: String }) buttonShowLabel = '';\n\n @property({ type: String }) infrastructureHeading = '';\n @property({ type: String }) infrastructureImageUrl = '';\n @property({ type: Array }) infrastructureItems: InfrastructureItem[] = [];\n\n @property({ type: String }) gettingStartedHeading = '';\n @property({ type: String }) gettingStartedDescription = '';\n @property({ type: Array }) pills: PillItem[] = [];\n\n @property({ type: String }) contactUrl = '';\n @property({ type: String }) contactLabel = '';\n @property({ type: String }) dontShowAgainLabel = '';\n @property({ type: Boolean }) dontShowAgain = false;\n @property({ attribute: false }) onDontShowAgainChange?: (checked: boolean) => void;\n @property({ type: String }) notNowLabel = '';\n @property({ attribute: false }) onNotNow?: () => void;\n\n @query('#content-section') private _contentSection?: HTMLElement;\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n const previousShowContent = changedProperties.get('showContent');\n if (previousShowContent === false && this.showContent) {\n requestAnimationFrame(() => {\n this._contentSection?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n });\n }\n }\n\n render() {\n return html`\n <axebow-quick-tip-button\n label=${this.buttonLabel}\n showLabel=${this.buttonShowLabel}\n ?collapsed=${!this.showContent}\n ?isStarted=${this.isStarted}\n .paddingBottom=${this.paddingBottom}\n .onToggle=${this.onToggle}\n ></axebow-quick-tip-button>\n\n <div\n id=\"content-section\"\n class=\"${this.showContent || !this.isStarted\n ? 'content-visible'\n : 'content-hidden'} flex flex-col gap-4 items-center justify-center\"\n >\n <axebow-infrastructure-card\n heading=${this.infrastructureHeading}\n imageUrl=${this.infrastructureImageUrl}\n .items=${this.infrastructureItems}\n ></axebow-infrastructure-card>\n <axebow-getting-started-card\n heading=${this.gettingStartedHeading}\n description=${this.gettingStartedDescription}\n .pills=${this.pills}\n contactUrl=${this.contactUrl}\n contactLabel=${this.contactLabel}\n dontShowAgainLabel=${this.dontShowAgainLabel}\n ?dontShowAgain=${this.dontShowAgain}\n .onDontShowAgainChange=${this.onDontShowAgainChange}\n notNowLabel=${this.notNowLabel}\n .onNotNow=${this.onNotNow}\n ></axebow-getting-started-card>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-more-actions/axebow-more-actions.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport type { ActionMenuItem } from '../cards/card.models.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ChartSeries {\n labels: string[];\n data: number[];\n max: number;\n}\n\nexport interface UsageBreakdown {\n current: { storage: number; volatileStorage: number; nonReplicatedStorage: number; persistentStorage: number };\n limit: {\n storage: { max: number };\n volatileStorage: { max: number };\n nonReplicatedStorage: { max: number };\n persistentStorage: { max: number };\n };\n}\n\nexport interface StatusIcon {\n iconName: string;\n iconColor: string;\n tooltip?: string;\n spinner?: boolean;\n}\n\nexport interface ResourceSubRow {\n name: string;\n logoUrl?: string;\n vCpu: string;\n vCpuChart?: ChartSeries;\n vCpuUtilizationPercent?: string;\n memory: string;\n memoryChart?: ChartSeries;\n memoryUtilizationPercent?: string;\n storage: string;\n usage?: UsageBreakdown;\n showActionButton?: boolean;\n actionButtonLabel?: string;\n actionButtonDisabled?: boolean;\n onAction?: () => void;\n /** @deprecated use showActionButton */\n showDeployButton?: boolean;\n /** @deprecated use actionButtonLabel */\n deployButtonLabel?: string;\n /** @deprecated use actionButtonDisabled */\n deployButtonDisabled?: boolean;\n /** @deprecated use onAction */\n onDeploy?: () => void;\n moreActions?: ActionMenuItem[];\n warningIcon?: StatusIcon;\n}\n\n/** @deprecated Alias for ResourceSubRow */\nexport type EnvironmentRow = ResourceSubRow;\n\nexport interface ResourceTableRow {\n id: string;\n name: string;\n logoUrl?: string;\n vCpu: string;\n vCpuChart?: ChartSeries;\n vCpuUtilizationPercent?: string;\n memory: string;\n memoryChart?: ChartSeries;\n memoryUtilizationPercent?: string;\n storage: string;\n usage?: UsageBreakdown;\n statusIcon?: StatusIcon;\n warningIcon?: StatusIcon;\n showCreateSubRowButton?: boolean;\n createSubRowLabel?: string;\n onCreateSubRow?: () => void;\n /** @deprecated use showCreateSubRowButton */\n showCreateEnvironmentButton?: boolean;\n /** @deprecated use createSubRowLabel */\n createEnvironmentLabel?: string;\n /** @deprecated use onCreateSubRow */\n onCreateEnvironment?: () => void;\n moreActions?: ActionMenuItem[];\n subRows?: ResourceSubRow[];\n /** @deprecated use subRows */\n environments?: ResourceSubRow[];\n defaultExpanded?: boolean;\n}\n\n/** @deprecated Alias for ResourceTableRow */\nexport type AccountRow = ResourceTableRow;\n\nexport interface TenantResourceTableLabels {\n rowTitle?: string;\n /** @deprecated use rowTitle */\n accountsEnv?: string;\n vCpu?: string;\n vCpuUtil?: string;\n memory?: string;\n memUtil?: string;\n storage?: string;\n actions?: string;\n}\n\nconst DEFAULT_LABELS: TenantResourceTableLabels = {\n rowTitle: 'Title',\n accountsEnv: 'Title',\n vCpu: 'vCPU',\n vCpuUtil: 'vCPU Utilization',\n memory: 'Memory',\n memUtil: 'Mem. Utilization',\n storage: 'Storage',\n actions: 'Actions',\n};\n\n/**\n * Purely presentational expandable resource table. All\n * numbers, chart series, labels and callbacks are pre-computed by the\n * caller. The state owned here is which table rows are expanded.\n */\n@customElement('axebow-tenant-resource-table')\nexport class AxebowTenantResourceTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: Array }) rows: ResourceTableRow[] = [];\n @property({ attribute: false }) labels?: TenantResourceTableLabels;\n @property({ type: Boolean }) showActions = false;\n @property({ type: Boolean }) showMoreActionsColumn = false;\n @property({ type: String }) emptyStateMessage = '';\n @property({ type: String }) chartHeight?: string;\n @property({ type: Boolean }) fixedColumnWidths = false;\n\n private get _cols() {\n return this.fixedColumnWidths\n ? {\n rowGap: '',\n rowWidth: 'w-286',\n name: 'w-63.5',\n vCpu: 'w-18 ml-[1.265625rem]',\n vCpuUtil: 'w-37 ml-[0.5rem]',\n memory: 'w-20 ml-[1.265625rem]',\n memUtil: 'w-37 ml-[0.5rem]',\n storage: 'w-25 ml-[1.265625rem]',\n actions: 'w-53.25 ml-[1.265625rem]',\n }\n : {\n rowGap: 'gap-2',\n rowWidth: 'w-full',\n name: 'flex-1 min-w-44',\n vCpu: 'w-16',\n vCpuUtil: 'flex-1 min-w-32',\n memory: 'w-20',\n memUtil: 'flex-1 min-w-32',\n storage: 'w-24',\n actions: 'flex-1 min-w-53.25',\n };\n }\n\n @state() private _expanded = new Set<string>();\n private _initialized = false;\n\n protected willUpdate(changed: Map<string, unknown>) {\n if (changed.has('rows') && !this._initialized && this.rows.length > 0) {\n this._initialized = true;\n this._expanded = new Set(this.rows.filter((r) => r.defaultExpanded !== false).map((r) => r.id));\n }\n }\n\n private _toggle(id: string) {\n const next = new Set(this._expanded);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this._expanded = next;\n }\n\n private get _activeLabels(): TenantResourceTableLabels {\n const title = this.labels?.rowTitle ?? this.labels?.accountsEnv ?? DEFAULT_LABELS.rowTitle;\n return { ...DEFAULT_LABELS, rowTitle: title, accountsEnv: title, ...this.labels };\n }\n\n private _renderDivider() {\n return html`<span class=\"w-px h-4 bg-gray-300 shrink-0\"></span>`;\n }\n\n private _renderHeader() {\n const l = this._activeLabels;\n const c = this._cols;\n return html`\n <div\n class=\"${c.rowWidth} min-w-160 h-8 flex items-center ${c.rowGap} rounded-md bg-(--axebow-base) border border-solid border-(--axebow-table-header-border) px-4 box-border\"\n >\n <div class=\"flex items-center gap-2 ${c.name} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600 truncate\">${l.rowTitle}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.vCpu} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.vCpu}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.vCpuUtil} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.vCpuUtil}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.memory} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.memory}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.memUtil} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.memUtil}</span>\n ${this._renderDivider()}\n </div>\n <div class=\"flex items-center gap-2 ${c.storage} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.storage}</span>\n ${this.showActions ? this._renderDivider() : ''}\n </div>\n ${this.showActions\n ? html`<div class=\"flex items-center ${c.actions} shrink-0\">\n <span class=\"flex-1 text-center font-semibold text-gray-600\">${l.actions}</span>\n </div>`\n : ''}\n </div>\n `;\n }\n\n private _renderChartCell(chart?: ChartSeries, percent?: string, idPrefix?: string) {\n if (!chart || !chart.labels || chart.labels.length === 0) {\n return html`\n <div class=\"flex items-center justify-center\">\n <span class=\"font-normal text-gray-700\">${percent ?? '0.0'}%</span>\n </div>\n `;\n }\n return html`\n <div class=\"flex items-center justify-center gap-6\">\n <usage-chart\n class=\"w-20 shrink-0\"\n height=${ifDefined(this.chartHeight)}\n chartId=${idPrefix}\n chartType=\"line\"\n .labels=${chart.labels}\n .data=${{ Usage: chart.data }}\n .yAxisMax=${chart.max}\n ></usage-chart>\n <span class=\"font-normal text-gray-700 whitespace-nowrap\">${percent ?? '0.0'}%</span>\n </div>\n `;\n }\n\n private _renderStatusIcon(icon?: StatusIcon) {\n if (!icon) return '';\n const iconEl = icon.spinner\n ? html`<sl-spinner style=\"font-size: 0.85rem; --indicator-color: var(--axebow-tertiary);\"></sl-spinner>`\n : html`<axebow-icon\n iconName=${icon.iconName}\n iconColor=${icon.iconColor}\n size=\"md\"\n class=\"cursor-pointer shrink-0\"\n ></axebow-icon>`;\n return icon.tooltip ? html`<axebow-tooltip content=${icon.tooltip}>${iconEl}</axebow-tooltip>` : iconEl;\n }\n\n private _renderTableRow(row: ResourceTableRow, index: number) {\n const children = row.subRows ?? row.environments;\n const hasSubRows = !!(children && children.length > 0);\n const isExpanded = this._expanded.has(row.id);\n const showCreateBtn = row.showCreateSubRowButton ?? row.showCreateEnvironmentButton;\n const createBtnLabel = row.createSubRowLabel ?? row.createEnvironmentLabel;\n const onCreateBtn = row.onCreateSubRow ?? row.onCreateEnvironment;\n const c = this._cols;\n\n return html`\n <div class=\"border-b border-solid border-(--axebow-light-gray) last:border-b-0\">\n <div\n class=\"${c.rowWidth} min-w-160 min-h-12 flex items-center ${c.rowGap} ${hasSubRows ? 'cursor-pointer hover:bg-gray-50' : ''} py-1.5 px-4 box-border\"\n @click=${hasSubRows ? () => this._toggle(row.id) : null}\n >\n <div class=\"${c.name} shrink-0 flex items-center gap-2\">\n ${hasSubRows\n ? html`\n <axebow-icon\n iconName=${isExpanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n class=\"shrink-0\"\n ></axebow-icon>\n `\n : html`<span class=\"w-4 inline-block\"></span>`}\n ${row.logoUrl ? html`<img src=${row.logoUrl} class=\"w-5 h-5 object-contain shrink-0\" />` : ''}\n <span class=\"font-semibold text-(--axebow-primary) truncate\">${row.name}</span>\n ${this._renderStatusIcon(row.statusIcon)}\n <span class=\"flex-1\"></span>\n ${this._renderStatusIcon(row.warningIcon)}\n </div>\n <div class=\"${c.vCpu} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${row.vCpu}</div>\n <div class=\"${c.vCpuUtil} shrink-0\">\n ${this._renderChartCell(row.vCpuChart, row.vCpuUtilizationPercent, `chart-account-${index}-vcpu`)}\n </div>\n <div class=\"${c.memory} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${row.memory}</div>\n <div class=\"${c.memUtil} shrink-0\">\n ${this._renderChartCell(row.memoryChart, row.memoryUtilizationPercent, `chart-account-${index}-mem`)}\n </div>\n <div class=\"${c.storage} shrink-0 flex items-center justify-center gap-1.5 min-w-0\">\n <span class=\"font-normal text-gray-700\">${row.storage}</span>\n ${row.usage ? html`<usage-tooltip .usage=${row.usage}></usage-tooltip>` : ''}\n </div>\n ${this.showActions\n ? html`<div\n class=\"${c.actions} shrink-0 flex items-center gap-4\"\n @click=${(e: Event) => e.stopPropagation()}\n >\n <div class=\"flex-1 flex items-center justify-center\">\n ${showCreateBtn\n ? html`<axebow-button variant=\"text\" @click=${() => onCreateBtn?.()}>\n ${createBtnLabel}\n </axebow-button>`\n : ''}\n </div>\n ${this.showMoreActionsColumn\n ? html`<div class=\"w-9.5 shrink-0 flex items-center justify-center\">\n ${row.moreActions?.length\n ? html`<axebow-more-actions\n placement=\"bottom\"\n openToRight\n .options=${row.moreActions}\n iconName=\"more_horiz\"\n fixedHeight=\"2rem\"\n ></axebow-more-actions>`\n : ''}\n </div>`\n : ''}\n </div>`\n : ''}\n </div>\n ${isExpanded && hasSubRows\n ? children!.map((subRow, subIndex) => this._renderSubRow(subRow, index, subIndex))\n : ''}\n </div>\n `;\n }\n\n private _renderSubRow(subRow: ResourceSubRow, rowIndex: number, subIndex: number) {\n const showActionBtn = subRow.showActionButton ?? subRow.showDeployButton;\n const actionBtnLabel = subRow.actionButtonLabel ?? subRow.deployButtonLabel;\n const actionBtnDisabled = subRow.actionButtonDisabled ?? subRow.deployButtonDisabled;\n const onActionBtn = subRow.onAction ?? subRow.onDeploy;\n const c = this._cols;\n\n return html`\n <div class=\"${c.rowWidth} min-w-160 min-h-12 flex items-center ${c.rowGap} bg-gray-50/50 border-t border-solid border-(--axebow-light-gray) py-1.5 px-4 box-border\">\n <div class=\"${c.name} shrink-0 flex items-center gap-2\">\n <axebow-icon\n iconName=\"subdirectory_arrow_right\"\n iconColor=\"var(--axebow-gray)\"\n size=\"sm\"\n class=\"shrink-0\"\n ></axebow-icon>\n ${subRow.logoUrl ? html`<img src=${subRow.logoUrl} class=\"w-5 h-5 object-contain shrink-0\" />` : ''}\n <span class=\"font-normal text-gray-700 truncate\">${subRow.name}</span>\n <span class=\"flex-1\"></span>\n ${this._renderStatusIcon(subRow.warningIcon)}\n </div>\n <div class=\"${c.vCpu} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${subRow.vCpu}</div>\n <div class=\"${c.vCpuUtil} shrink-0\">\n ${this._renderChartCell(subRow.vCpuChart, subRow.vCpuUtilizationPercent, `chart-env-${rowIndex}-${subIndex}-vcpu`)}\n </div>\n <div class=\"${c.memory} shrink-0 text-center font-normal text-gray-700 whitespace-nowrap\">${subRow.memory}</div>\n <div class=\"${c.memUtil} shrink-0\">\n ${this._renderChartCell(subRow.memoryChart, subRow.memoryUtilizationPercent, `chart-env-${rowIndex}-${subIndex}-mem`)}\n </div>\n <div class=\"${c.storage} shrink-0 flex items-center justify-center gap-1.5 min-w-0\">\n <span class=\"font-normal text-gray-700\">${subRow.storage}</span>\n ${subRow.usage ? html`<usage-tooltip .usage=${subRow.usage}></usage-tooltip>` : ''}\n </div>\n ${this.showActions\n ? html`<div class=\"${c.actions} shrink-0 flex items-center gap-4\">\n <div class=\"flex-1 flex items-center justify-center\">\n ${showActionBtn\n ? html`<axebow-button\n variant=\"primary\"\n fixedWidth=\"9.9375rem\"\n fixedHeight=\"2rem\"\n ?disabled=${actionBtnDisabled}\n @click=${() => onActionBtn?.()}\n >\n ${actionBtnLabel}\n </axebow-button>`\n : ''}\n </div>\n ${this.showMoreActionsColumn\n ? html`<div class=\"w-9.5 shrink-0 flex items-center justify-center\">\n ${subRow.moreActions?.length\n ? html`<axebow-more-actions\n placement=\"bottom\"\n openToRight\n .options=${subRow.moreActions}\n iconName=\"more_horiz\"\n fixedHeight=\"2rem\"\n ></axebow-more-actions>`\n : ''}\n </div>`\n : ''}\n </div>`\n : ''}\n </div>\n `;\n }\n\n render() {\n if (!this.rows || this.rows.length === 0) {\n return html`\n <div class=\"w-full py-4 px-6 text-center bg-[#F0F1F5] rounded-md box-border\">\n <p class=\"text-(--axebow-secondary) m-0 font-normal\">\n ${this.emptyStateMessage || 'There are currently no items in this table.'}\n </p>\n </div>\n `;\n }\n\n const c = this._cols;\n return html`\n <div\n class=\"${c.rowWidth} flex flex-col rounded-md bg-white box-border ${this.fixedColumnWidths\n ? 'overflow-hidden'\n : 'overflow-x-auto overflow-y-hidden'}\"\n >\n ${this._renderHeader()}\n <div>${this.rows.map((row, index) => this._renderTableRow(row, index))}</div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-tenant-resource-table': AxebowTenantResourceTable;\n }\n}\n","import { Chart } from 'chart.js/auto';\nimport type { ChartDataset, ChartOptions, ChartTypeRegistry } from 'chart.js';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('table-chart')\nexport class TableChart extends LitElement {\n @property({ type: String }) chartType: keyof ChartTypeRegistry = 'line';\n @property({ type: String }) chartId = '';\n @property({ type: Array }) chartLabels: string[] = [];\n @property({ attribute: false }) chartDatasets: ChartDataset[] = [];\n @property({ attribute: false }) chartOptions: ChartOptions = {};\n @property({ type: String }) height = '4rem';\n\n private chartInstance: Chart | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n canvas {\n width: 100% !important;\n height: 100% !important;\n }\n `,\n ];\n\n private createChart() {\n const canvas = this.renderRoot.querySelector('canvas') as HTMLCanvasElement;\n if (!canvas) {\n console.error('Canvas not found for:', this.chartId);\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n console.error('Could not get canvas context:', this.chartId);\n return;\n }\n if (this.chartInstance) {\n return;\n }\n\n this.chartInstance = new Chart(ctx, {\n type: this.chartType,\n data: {\n labels: this.chartLabels,\n datasets: this.chartDatasets,\n },\n options: this.chartOptions,\n });\n }\n\n protected firstUpdated() {\n this.createChart();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n super.updated(changedProperties);\n if (!this.chartInstance) {\n this.createChart();\n return;\n }\n if (changedProperties.has('chartType')) {\n this.chartInstance.destroy();\n this.chartInstance = null;\n this.createChart();\n return;\n }\n if (changedProperties.has('chartLabels') || changedProperties.has('chartDatasets')) {\n this.chartInstance.data.labels = this.chartLabels;\n this.chartInstance.data.datasets = this.chartDatasets;\n }\n if (changedProperties.has('chartOptions')) {\n this.chartInstance.options = this.chartOptions;\n }\n if (\n changedProperties.has('chartLabels') ||\n changedProperties.has('chartDatasets') ||\n changedProperties.has('chartOptions')\n ) {\n this.chartInstance.update('none');\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.chartInstance) {\n this.chartInstance.destroy();\n this.chartInstance = null;\n }\n }\n\n render() {\n return html`\n <div class=\"relative w-full h-full\">\n <div class=\"w-full relative\" style=\"height: ${this.height};\">\n <canvas></canvas>\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../cards/parts/axebow-card-version-selector.js';\nimport { RevisionItem } from '../cards/card.models.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ServiceHeaderResourceLimits {\n cpu: number;\n memory: number;\n storage: number;\n volatileStorage: number;\n nonReplicatedStorage: number;\n persistentStorage: number;\n}\n\n@customElement('axebow-service-detail-header')\nexport class AxebowServiceDetailHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n padding-bottom: 1rem;\n }\n `,\n ];\n\n @property({ type: String }) locationTitle = '';\n @property({ type: String }) locationLogoUrl?: string;\n @property({ type: String }) locationTenantAccount = '';\n @property({ type: String }) locationEnvironment = '';\n @property({ type: String }) locationProject = '';\n\n @property({ type: String }) softLimitsTitle = '';\n @property({ attribute: false }) softLimits!: ServiceHeaderResourceLimits;\n @property({ type: String }) hardLimitsTitle = '';\n @property({ attribute: false }) hardLimits!: ServiceHeaderResourceLimits;\n @property({ type: String }) vcpusLabel = '';\n @property({ type: String }) gbRamLabel = '';\n @property({ type: String }) gbLabel = '';\n @property({ type: String }) gbStorageLabel = '';\n @property({ type: String }) storageLabel = '';\n @property({ type: String }) volatileLabel = '';\n @property({ type: String }) nonRepPersLabel = '';\n @property({ type: String }) persistentRepLabel = '';\n\n @property({ type: String }) runningVersionTitle = '';\n @property({ type: String }) updateZipTooltip = '';\n @property({ type: Array }) revisions: RevisionItem[] = [];\n @property({ type: String }) displayedRevision = '';\n @property({ type: Boolean }) revisionsDisabled = false;\n @property({ type: String }) updateWithZipLabel = '';\n\n @property({ type: Boolean }) showActionNeeded = false;\n @property({ type: String }) actionNeededTitle = '';\n @property({ type: String }) deployLabel = '';\n\n private _handleUpdateWithZip() {\n this.dispatchEvent(new CustomEvent('show-zip-dialog', { bubbles: true, composed: true }));\n }\n\n private _handleDeploy() {\n this.dispatchEvent(new CustomEvent('deploy', { bubbles: true, composed: true }));\n }\n\n private _renderTitle(text: string) {\n return html`<h3 class=\"m-0 text-sm font-bold uppercase text-(--axebow-gray)\">${text}</h3>`;\n }\n\n private _renderLocation() {\n const widthClass = this.showActionNeeded ? 'w-63.75' : 'w-99.75';\n return html`\n <div class=\"flex flex-col gap-1 ${widthClass} shrink-0\">\n ${this._renderTitle(this.locationTitle)}\n <div\n class=\"${widthClass} h-19.75 box-border flex items-center justify-between gap-4 bg-(--axebow-base) rounded-md py-4.75 px-4\"\n >\n ${this.locationLogoUrl\n ? html`<img src=${this.locationLogoUrl} class=\"h-full aspect-square object-contain shrink-0\" />`\n : html`<div class=\"h-full aspect-square shrink-0\"></div>`}\n <div class=\"flex flex-col gap-0.5 min-w-0 flex-1\">\n <p class=\"m-0 text-base font-semibold text-(--axebow-primary) truncate\">${this.locationTenantAccount}</p>\n <h5 class=\"m-0 text-lg font-semibold text-(--axebow-primary) truncate\">${this.locationEnvironment}</h5>\n <p class=\"m-0 text-xs text-(--axebow-gray) truncate\">${this.locationProject}</p>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderLimitsTooltip(limits: ServiceHeaderResourceLimits) {\n return html`\n <axebow-tooltip class=\"p-0\" placement=\"right\">\n <div slot=\"content\">\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"database\" size=\"md\"></axebow-icon>\n <span>${this.storageLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.storage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.volatileLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.volatileStorage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.nonRepPersLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.nonReplicatedStorage} ${this.gbLabel}</span>\n </div>\n <div class=\"flex items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\"></axebow-icon>\n <span>${this.persistentRepLabel}</span>\n <span class=\"ml-auto font-bold\">${limits.persistentStorage} ${this.gbLabel}</span>\n </div>\n </div>\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </axebow-tooltip>\n `;\n }\n\n private _renderLimitsBlock(title: string, limits: ServiceHeaderResourceLimits) {\n return html`\n <div class=\"flex flex-col gap-1 w-66 shrink-0\">\n ${this._renderTitle(title)}\n <div\n class=\"w-66 h-19.75 box-border flex items-center justify-between gap-6 bg-(--axebow-base) rounded-md py-4.75 px-4\"\n >\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.cpu}</span>\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.vcpusLabel}</span>\n </div>\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.memory}</span>\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.gbRamLabel}</span>\n </div>\n <div class=\"flex flex-col items-start gap-0.5\">\n <span class=\"text-lg font-semibold text-(--axebow-primary)\">${limits.storage}</span>\n <div class=\"flex items-center gap-1\">\n <span class=\"text-base text-(--axebow-gray) whitespace-nowrap\">${this.gbStorageLabel}</span>\n ${this._renderLimitsTooltip(limits)}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderRunningVersion() {\n return html`\n <div class=\"flex flex-col gap-1 w-41.75 shrink-0\">\n ${this._renderTitle(this.runningVersionTitle)}\n <div class=\"w-41.75 h-19.75 box-border flex flex-col gap-2\">\n <axebow-card-version-selector\n .revisions=${this.revisions}\n displayedRevision=${this.displayedRevision}\n ?disabled=${this.revisionsDisabled}\n maxWidth=\"10.4375rem\"\n ></axebow-card-version-selector>\n <div class=\"flex items-center gap-1.5\">\n <axebow-button\n variant=\"primary\"\n outline\n fixedWidth=\"8.75rem\"\n fixedHeight=\"2.375rem\"\n @click=${this._handleUpdateWithZip}\n >\n ${this.updateWithZipLabel}\n </axebow-button>\n <axebow-tooltip placement=\"top\">\n <div slot=\"content\" class=\"max-w-65\">${this.updateZipTooltip}</div>\n <div class=\"w-4.5 h-4.5 flex items-center justify-center\">\n <axebow-icon iconName=\"info\" iconColor=\"var(--axebow-gray)\" size=\"sm\"></axebow-icon>\n </div>\n </axebow-tooltip>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderActionNeeded() {\n if (!this.showActionNeeded) return '';\n return html`\n <div class=\"flex flex-col gap-1 w-32 shrink-0\">\n ${this._renderTitle(this.actionNeededTitle)}\n <div\n class=\"w-32 h-24.75 box-border flex items-center justify-center border border-solid border-(--axebow-light-gray) rounded-md\"\n >\n <axebow-button variant=\"success\" fixedWidth=\"5.625rem\" fixedHeight=\"2.375rem\" @click=${this._handleDeploy}>\n ${this.deployLabel}\n </axebow-button>\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"w-293.5 h-32.75 box-border flex items-start gap-4 bg-white rounded-md p-4\">\n ${this._renderLocation()} ${this._renderLimitsBlock(this.softLimitsTitle, this.softLimits)}\n ${this._renderLimitsBlock(this.hardLimitsTitle, this.hardLimits)} ${this._renderRunningVersion()}\n ${this._renderActionNeeded()}\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-more-actions/axebow-more-actions.js';\nimport '../axebow-tenant-resource-table/axebow-tenant-resource-table.js';\nimport type { ActionMenuItem } from '../cards/card.models.js';\nimport type { ResourceTableRow, TenantResourceTableLabels } from '../axebow-tenant-resource-table/axebow-tenant-resource-table.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ResourceStat {\n icon: string;\n label: string;\n value: string | number;\n}\n\nexport type TenantCardContentState = 'invitation' | 'empty' | 'table';\n\n/**\n * Purely presentational tenant summary card. Every string, number,\n * callback and the content-area state (invitation / empty / table) are\n * supplied by the caller - the component only lays things out and\n * renders the nested resource table.\n */\n@customElement('axebow-tenant-card')\nexport class AxebowTenantCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) planLabel = '';\n @property({ type: Boolean }) isDeleting = false;\n @property({ type: String }) deletingLabel = '';\n @property({ type: Boolean }) isLeaving = false;\n @property({ type: String }) leavingLabel = '';\n\n @property({ type: String }) tenantName = '';\n @property({ type: String }) roleText = '';\n\n @property({ type: Boolean }) isPending = false;\n @property({ type: String }) rejectLabel = '';\n @property({ type: String }) acceptLabel = '';\n @property({ attribute: false }) onReject?: () => void;\n @property({ attribute: false }) onAccept?: () => void;\n\n @property({ type: Boolean }) showCreateAccount = false;\n @property({ type: String }) createAccountLabel = '';\n @property({ attribute: false }) onCreateAccount?: () => void;\n @property({ type: Array }) moreActions: ActionMenuItem[] = [];\n\n @property({ type: Array }) resourceStats: ResourceStat[] = [];\n @property({ type: Boolean }) showInvitedNotice = false;\n @property({ type: String }) invitedNoticeText = '';\n @property({ type: Boolean }) showNoAccountsWarning = false;\n @property({ type: String }) noAccountsWarningText = '';\n\n @property({ type: String }) contentState: TenantCardContentState = 'table';\n @property({ type: String }) invitationText = '';\n @property({ type: String }) emptyTextPrefix = '';\n @property({ type: String }) emptyCreateAccountLabel = '';\n @property({ type: String }) emptyTextSuffix = '';\n @property({ attribute: false }) onEmptyCreateAccount?: () => void;\n\n @property({ type: Array }) tableRows: ResourceTableRow[] = [];\n @property({ attribute: false }) tableLabels!: TenantResourceTableLabels;\n @property({ type: Boolean }) showActions = false;\n @property({ type: Boolean }) showMoreActionsColumn = false;\n @property({ type: String }) chartHeight?: string;\n @property({ type: String }) width?: string;\n @property({ type: Boolean }) fixedColumnWidths = false;\n\n private _renderPlanBadge() {\n if (this.isDeleting || this.isLeaving) {\n return html`\n <div class=\"flex items-center gap-2\">\n <p class=\"text-(--axebow-gray) text-base m-0\">${this.isDeleting ? this.deletingLabel : this.leavingLabel}</p>\n <sl-spinner style=\"font-size: 1rem; --indicator-color: var(--axebow-tertiary);\"></sl-spinner>\n </div>\n `;\n }\n return html`\n <div class=\"w-21.5 h-8 flex items-center justify-center rounded-md bg-gray-100 px-2\">\n <span class=\"text-base font-semibold capitalize text-(--axebow-gray) truncate\">${this.planLabel}</span>\n </div>\n `;\n }\n\n private _renderTopRightActions() {\n if (this.isPending) {\n return html`\n <div class=\"flex items-center gap-2\">\n <axebow-button\n variant=\"danger\"\n outline\n fixedWidth=\"9.9375rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onReject?.()}\n >\n ${this.rejectLabel}\n </axebow-button>\n <axebow-button variant=\"primary\" fixedWidth=\"9.9375rem\" fixedHeight=\"2rem\" @click=${() => this.onAccept?.()}>\n ${this.acceptLabel}\n </axebow-button>\n </div>\n `;\n }\n\n return html`\n <div class=\"flex items-center gap-4\">\n ${this.showCreateAccount\n ? html`<axebow-button\n variant=\"text\"\n fixedWidth=\"7.8125rem\"\n fixedHeight=\"2rem\"\n @click=${() => this.onCreateAccount?.()}\n >\n ${this.createAccountLabel}\n </axebow-button>`\n : ''}\n ${this.moreActions.length\n ? html`<axebow-more-actions\n class=\"w-9.5\"\n placement=\"bottom\"\n openToRight\n .options=${this.moreActions}\n iconName=\"more_horiz\"\n ></axebow-more-actions>`\n : ''}\n </div>\n `;\n }\n\n private _renderContent() {\n if (this.contentState === 'invitation') {\n return html`\n <div class=\"w-full h-14.25 rounded-md bg-(--axebow-base) flex items-center justify-center text-center px-4 box-border\">\n <span class=\"text-base\">${this.invitationText}</span>\n </div>\n `;\n }\n\n if (this.contentState === 'empty') {\n return html`\n <div class=\"w-full h-14.25 rounded-md bg-(--axebow-base) flex items-center justify-center text-center px-4 box-border\">\n <span class=\"text-base\">\n ${this.emptyTextPrefix}\n <span\n class=\"text-(--axebow-tertiary) font-bold cursor-pointer hover:underline\"\n @click=${() => this.onEmptyCreateAccount?.()}\n >${this.emptyCreateAccountLabel}</span\n >\n ${this.emptyTextSuffix}\n </span>\n </div>\n `;\n }\n\n return html`\n <axebow-tenant-resource-table\n .rows=${this.tableRows}\n .labels=${this.tableLabels}\n ?showActions=${this.showActions}\n ?showMoreActionsColumn=${this.showMoreActionsColumn}\n ?fixedColumnWidths=${this.fixedColumnWidths}\n chartHeight=${ifDefined(this.chartHeight)}\n ></axebow-tenant-resource-table>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"box-border flex flex-col gap-4 bg-white rounded-md border border-solid border-(--axebow-table-border) p-4\"\n style=\"width: ${this.width || '100%'};\"\n >\n <div class=\"flex items-center justify-between\">\n ${this._renderPlanBadge()}\n <div class=\"w-57.5 h-8\"><slot name=\"plan-selector\"></slot></div>\n </div>\n\n <div class=\"flex items-center justify-between flex-wrap gap-2\">\n <div class=\"flex items-center gap-2\">\n <span class=\"text-(--axebow-primary) font-bold text-lg\">${this.tenantName}</span>\n <span class=\"text-(--axebow-primary) text-lg\">|</span>\n <span class=\"text-(--axebow-primary) text-lg italic flex items-center gap-1\">\n ${this.roleText}\n <slot name=\"role-tooltip\" class=\"not-italic\"></slot>\n </span>\n </div>\n ${this._renderTopRightActions()}\n </div>\n\n <div class=\"flex items-center justify-between flex-wrap gap-2\">\n <div class=\"flex items-center gap-5 text-(--axebow-text-gray)\">\n ${this.resourceStats.map(\n (stat) => html`\n <span class=\"flex items-center gap-1 text-base whitespace-nowrap\">\n <axebow-icon iconName=${stat.icon} iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n ${stat.label} ${stat.value}\n </span>\n `\n )}\n </div>\n ${this.showInvitedNotice\n ? html`<span class=\"text-base text-black\">${this.invitedNoticeText}</span>`\n : this.showNoAccountsWarning\n ? html`<span class=\"flex items-center gap-1 text-base text-black\">\n <axebow-icon iconName=\"warning\" iconColor=\"var(--axebow-warning)\" size=\"md\"></axebow-icon>\n ${this.noAccountsWarningText}\n </span>`\n : ''}\n </div>\n\n <div class=\"w-full\">\n <axebow-divider margin=\"0\"></axebow-divider>\n </div>\n\n ${this._renderContent()}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport '../../axebow-icon/axebow-icon.js';\n\nexport type CarouselSelectorVariant = 'account' | 'environment';\n\n@customElement('axebow-carousel-selector-item')\nexport class AxebowCarouselSelectorItem extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 14.1875rem;\n height: 4.5rem;\n }\n :host([variant='environment']) {\n width: 14.208125rem;\n height: 5.125rem;\n }\n .item-container:not(.selected):hover {\n border-color: var(--axebow-tertiary);\n }\n .item-checkbox::part(base) {\n padding: 0;\n }\n .item-checkbox::part(control) {\n width: 1.125rem;\n height: 1.125rem;\n border-radius: 50%;\n }\n .item-checkbox::part(control--checked) {\n background-color: var(--axebow-primary);\n border-color: var(--axebow-primary);\n }\n `,\n ];\n\n @property({ type: String, reflect: true }) variant: CarouselSelectorVariant = 'account';\n @property({ type: String }) itemId = '';\n @property({ type: Boolean }) selected = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) planLabel = '';\n @property({ type: String }) name = '';\n @property({ type: String }) tenantName = '';\n @property({ type: String }) accountName = '';\n @property({ type: String }) logoSrc: string | null = null;\n @property({ type: String }) logoAlt = '';\n\n private _handleCardClick() {\n if (this.disabled) return;\n if (this.selected) return;\n this.dispatchEvent(\n new CustomEvent('item-select', {\n detail: { id: this.itemId },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _renderCheck() {\n const insetClass = this.variant === 'environment' ? 'top-3 right-1.5' : 'top-3 right-3';\n return html`\n <div class=\"absolute ${insetClass} w-4.5 h-4.5 shrink-0 pointer-events-none\">\n <sl-checkbox\n class=\"item-checkbox\"\n .checked=${this.selected}\n ?disabled=${this.disabled}\n ></sl-checkbox>\n </div>\n `;\n }\n\n private _renderBadge() {\n if (!this.planLabel) return '';\n return html`\n <div class=\"absolute bottom-0 left-0 right-0 flex justify-center pointer-events-none\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-0.5 rounded-t-md bg-(--axebow-base) text-(--axebow-secondary) text-sm font-semibold truncate max-w-full\"\n >\n ${this.planLabel}\n </span>\n </div>\n `;\n }\n\n private _renderAccount() {\n return html`\n <div class=\"flex flex-col items-start w-full max-w-51.5 h-9.5 justify-center\">\n <p class=\"leading-tight text-md font-semibold text-(--axebow-primary) truncate w-full m-0\" title=${this.name}>\n ${this.name}\n </p>\n </div>\n `;\n }\n\n private _renderEnvironment() {\n const logo = this.logoSrc\n ? html`<img src=${this.logoSrc} alt=${this.logoAlt} class=\"w-12.5 h-12.5 shrink-0 object-contain\" />`\n : html`<axebow-icon iconName=\"cloud\" size=\"large\" class=\"w-12.5 h-12.5 shrink-0\"></axebow-icon>`;\n\n return html`\n <div class=\"flex flex-row items-start gap-2 w-full\">\n ${logo}\n <div class=\"flex flex-col items-start flex-1 min-w-0\">\n <div class=\"w-36 overflow-hidden\">\n <p class=\"text-sm font-semibold text-(--axebow-primary) truncate m-0\" title=${this.tenantName}>\n ${this.tenantName}\n </p>\n </div>\n <div class=\"w-full overflow-hidden\">\n <p\n class=\"leading-4.5 text-md font-semibold text-(--axebow-primary) truncate m-0\"\n title=${this.accountName}\n >\n ${this.accountName}\n </p>\n </div>\n </div>\n </div>\n `;\n }\n\n render() {\n const paddingClass = this.variant === 'environment' ? 'pt-3 px-1.5 pb-0' : 'pt-3 px-3 pb-0';\n\n return html`\n <div\n @click=${this._handleCardClick}\n class=\"item-container relative w-full h-full box-border rounded-md border border-solid overflow-hidden transition-colors ${paddingClass} ${this\n .selected\n ? 'selected cursor-default border-(--axebow-primary) bg-(--axebow-white)'\n : 'cursor-pointer border-(--axebow-light-gray) bg-(--axebow-base)'} ${this.disabled ? 'opacity-60 pointer-events-none' : ''}\"\n >\n ${this.variant === 'environment' ? this._renderEnvironment() : this._renderAccount()}\n ${this._renderCheck()}\n ${this._renderBadge()}\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/carousel/carousel.js';\nimport '@shoelace-style/shoelace/dist/components/carousel-item/carousel-item.js';\nimport './parts/axebow-carousel-selector-item.js';\nimport type { CarouselSelectorVariant } from './parts/axebow-carousel-selector-item.js';\n\nexport type { CarouselSelectorVariant };\n\nexport interface CarouselSelectorTenantItem {\n id: string;\n selected: boolean;\n disabled?: boolean;\n planLabel: string;\n name?: string;\n tenantName?: string;\n accountName?: string;\n logoSrc?: string | null;\n logoAlt?: string;\n}\n\nconst ITEM_GAP_PX = 16;\nconst NAV_GAP_PX = 8;\n\nfunction itemWidthFor(variant: CarouselSelectorVariant): number {\n return variant === 'environment' ? 227.33 : 227;\n}\n\nfunction slidesPerPageFor(scrollContainerWidthPx: number, variant: CarouselSelectorVariant): number {\n const itemWidth = itemWidthFor(variant);\n return (scrollContainerWidthPx + ITEM_GAP_PX) / (itemWidth + ITEM_GAP_PX);\n}\n\n@customElement('axebow-carousel-selector-tenant')\nexport class AxebowCarouselSelectorTenant extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n sl-carousel {\n display: block;\n width: 100%;\n --slide-gap: ${ITEM_GAP_PX / 16}rem;\n }\n sl-carousel::part(base) {\n gap: ${NAV_GAP_PX / 16}rem;\n }\n sl-carousel::part(navigation-button) {\n padding: 0;\n margin: 0;\n }\n sl-carousel::part(scroll-container) {\n height: 4.5rem;\n }\n :host([variant='environment']) sl-carousel::part(scroll-container) {\n height: 5.125rem;\n }\n sl-carousel-item {\n height: 100%;\n }\n `,\n ];\n\n @property({ type: String, reflect: true }) variant: CarouselSelectorVariant = 'account';\n @property({ type: Array }) items: CarouselSelectorTenantItem[] = [];\n\n @state() private _slidesPerPage = 3;\n\n @query('sl-carousel') private _carouselEl?: HTMLElement;\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width;\n if (width) this._slidesPerPage = slidesPerPageFor(width, this.variant);\n });\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n protected firstUpdated() {\n const scrollContainer = this._carouselEl?.shadowRoot?.getElementById('scroll-container');\n if (scrollContainer) this._resizeObserver?.observe(scrollContainer);\n }\n\n private _onItemSelect(e: CustomEvent) {\n this.dispatchEvent(\n new CustomEvent('item-select', {\n detail: e.detail,\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n return html`\n <sl-carousel navigation slides-per-page=\"${this._slidesPerPage}\">\n ${this.items.length === 0\n ? html`<sl-carousel-item><slot name=\"empty\"></slot></sl-carousel-item>`\n : this.items.map(\n (item) => html`\n <sl-carousel-item>\n <axebow-carousel-selector-item\n .variant=${this.variant}\n .itemId=${item.id}\n .selected=${item.selected}\n ?disabled=${item.disabled}\n .planLabel=${item.planLabel}\n .name=${item.name ?? ''}\n .tenantName=${item.tenantName ?? ''}\n .accountName=${item.accountName ?? ''}\n .logoSrc=${item.logoSrc ?? null}\n .logoAlt=${item.logoAlt ?? ''}\n @item-select=${this._onItemSelect}\n ></axebow-carousel-selector-item>\n </sl-carousel-item>\n `\n )}\n </sl-carousel>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-switch/axebow-switch.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-expandable-header')\nexport class AxebowExpandableHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: Boolean }) expanded = false;\n @property({ type: String }) stateLabel = '';\n @property({ type: String }) tooltipContent = '';\n @property({ attribute: false }) onToggle?: (expanded: boolean) => void;\n\n render() {\n return html`\n <axebow-divider margin=\"0\"></axebow-divider>\n <div\n class=\"flex items-center gap-2 flex-wrap pt-4\"\n style=\"padding-bottom: ${this.expanded ? '1.09375rem' : '1rem'};\"\n >\n <h3 class=\"text-base font-semibold text-(--axebow-tertiary) hover:text-(--axebow-gray) cursor-pointer m-0\">\n ${this.title}\n </h3>\n <div class=\"w-10 h-5 shrink-0 overflow-hidden\">\n <axebow-switch\n width=\"2.5rem\"\n height=\"1.25rem\"\n .checked=${this.expanded}\n .onChange=${(checked: boolean) => this.onToggle?.(checked)}\n >\n </axebow-switch>\n </div>\n <span class=\"text-sm text-(--axebow-gray) italic\">${this.stateLabel}</span>\n <axebow-tooltip content=\"${this.tooltipContent}\">\n <axebow-icon iconName=\"help\" iconColor=\"var(--axebow-primary)\" size=\"md\" filled></axebow-icon>\n </axebow-tooltip>\n </div>\n <div class=\"${this.expanded ? 'block pb-4' : 'hidden'}\">\n <slot></slot>\n </div>\n <axebow-divider margin=\"0\"></axebow-divider>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-button/axebow-button.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n/**\n * Purely presentational wizard/step action bar: a divider followed by a\n * configurable row of buttons (cancel, optional previous, optional\n * secondary action, primary action). Owns no fixed positioning or\n * page-layout integration - the caller decides how and where to place it,\n * and the bar itself just grows/shrinks up to its 1174px design width.\n */\n@customElement('axebow-actions-footer')\nexport class AxebowActionsFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: String }) cancelLabel = 'Cancel';\n @property({ attribute: false }) onCancel: () => void = () => {};\n\n @property({ type: String }) previousLabel = '';\n @property({ attribute: false }) onPrevious: () => void = () => {};\n\n @property({ type: Object }) actionLabel: string | TemplateResult<1> = 'Next step';\n @property({ attribute: false }) onAction: () => void = () => {};\n @property({ type: Boolean }) isActionDisabled = false;\n @property({ type: String }) actionVariant = 'primary';\n @property({ type: String }) actionClass = '';\n @property({ type: String }) actionFixedWidth = '8.5rem';\n @property({ type: String }) actionFixedHeight = '2.5rem';\n\n @property({ type: Object }) secondaryActionLabel: string | TemplateResult<1> = '';\n @property({ attribute: false }) onSecondaryAction: () => void = () => {};\n @property({ type: Boolean }) isSecondaryActionDisabled = false;\n @property({ type: String }) secondaryActionVariant = 'primary';\n @property({ type: Boolean }) secondaryActionOutline = false;\n @property({ type: String }) secondaryActionFixedWidth?: string;\n @property({ type: String }) secondaryActionFixedHeight?: string;\n\n @property({ type: String }) text = '';\n\n @property({ type: Boolean }) isOverlappingContent = false;\n\n render() {\n return html`\n <div\n class=\"w-full bg-(--axebow-base) box-border ${this.isOverlappingContent\n ? 'shadow-[0_-8px_8px_-8px_rgba(13,24,33,0.15)]'\n : ''}\"\n >\n <axebow-divider margin=\"1rem 0\"></axebow-divider>\n <div class=\"h-10 box-content flex items-center pb-6\">\n <div class=\"flex items-center gap-8 shrink-0 mr-8\">\n <axebow-button\n class=\"axebow-red-button-text\"\n variant=\"text\"\n fixedWidth=\"3.25rem\"\n @click=${this.onCancel}\n >\n ${this.cancelLabel}\n </axebow-button>\n\n ${this.previousLabel\n ? html`\n <axebow-button variant=\"text\" fixedWidth=\"3.25rem\" @click=${this.onPrevious}>\n ${this.previousLabel}\n </axebow-button>\n `\n : ''}\n </div>\n\n <p class=\"flex-1 text-right font-semibold text-(--axebow-text-gray) m-0 mr-4\">${unsafeHTML(this.text)}</p>\n\n <div class=\"flex items-center gap-3 shrink-0\">\n ${this.secondaryActionLabel\n ? html`\n <axebow-button\n variant=\"${this.secondaryActionVariant}\"\n ?outline=${this.secondaryActionOutline}\n .fixedWidth=${this.secondaryActionFixedWidth}\n .fixedHeight=${this.secondaryActionFixedHeight}\n .disabled=${this.isSecondaryActionDisabled}\n @click=${this.onSecondaryAction}\n >\n ${this.secondaryActionLabel}\n </axebow-button>\n `\n : ''}\n <axebow-button\n class=\"${this.actionClass}\"\n variant=\"${this.actionVariant}\"\n .fixedWidth=${this.actionFixedWidth}\n .fixedHeight=${this.actionFixedHeight}\n .disabled=${this.isActionDisabled}\n @click=${this.onAction}\n >\n ${this.actionLabel}\n </axebow-button>\n </div>\n </div>\n </div>\n `;\n }\n}","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-step-header')\nexport class AxebowStepHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) step = '';\n @property({ type: String }) stepTitle = '';\n @property({ type: String }) stepCount = '';\n @property({ type: String }) stepLabel = 'STEP';\n @property({ type: String }) ofLabel = 'OF';\n\n render() {\n return html`\n <div class=\"w-194.25 h-6 flex items-center gap-2 box-border\">\n <axebow-icon iconName=\"counter_${this.step}\" iconColor=\"var(--axebow-primary)\" ?filled=${true}></axebow-icon>\n <h2 class=\"text-base font-semibold text-(--axebow-rich-black) m-0 truncate\">${this.stepTitle}</h2>\n <p class=\"ml-auto shrink-0 text-sm font-semibold text-(--axebow-primary) m-0 whitespace-nowrap\">\n ${this.stepLabel} ${this.step} ${this.ofLabel} ${this.stepCount}\n </p>\n </div>\n `;\n }\n}","import { html, LitElement, unsafeCSS, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-underline-tab-selector')\nexport class AxebowUnderlineTabSelector extends LitElement {\n @property({ type: Boolean, attribute: false }) disabled = false;\n @property({ type: Number }) activeTab?: number;\n\n @state() private _activeTab = 0;\n @state() private _tabCount = 0;\n @state() private _tabDisabled: boolean[] = [];\n\n private _observer: MutationObserver | null = null;\n\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n button {\n font-family: inherit;\n }\n :host([disabled]) {\n opacity: 0.6;\n pointer-events: none;\n cursor: not-allowed;\n }\n `,\n ];\n\n connectedCallback() {\n super.connectedCallback();\n this._observer = new MutationObserver(() => this._updateTabCount());\n this._observer.observe(this, { childList: true, attributes: true, attributeFilter: ['disabled'], subtree: true });\n this._updateTabCount();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._observer?.disconnect();\n }\n\n protected firstUpdated() {\n this._updateTabCount();\n }\n\n protected updated(changedProperties: Map<string, unknown>) {\n if (changedProperties.has('activeTab') && this.activeTab !== undefined && this._activeTab !== this.activeTab) {\n this._activeTab = this.activeTab;\n }\n if (changedProperties.has('disabled')) {\n this.toggleAttribute('disabled', this.disabled);\n }\n }\n\n private _updateTabCount() {\n const labelEls = Array.from(this.children).filter((el) => el.getAttribute('slot')?.startsWith('tab-label-'));\n const count = labelEls.length;\n if (count !== this._tabCount) {\n if (this._activeTab >= count) this._activeTab = 0;\n this._tabCount = count;\n }\n this._tabDisabled = Array.from({ length: this._tabCount }, (_, i) => {\n const el = this.querySelector(`[slot=\"tab-label-${i}\"]`);\n return el?.hasAttribute('disabled') ?? false;\n });\n }\n\n private _selectTab(index: number) {\n if (this.disabled || this._tabDisabled[index]) return;\n this._activeTab = index;\n this.dispatchEvent(new CustomEvent('tab-change', { detail: { index }, bubbles: true, composed: true }));\n }\n\n render() {\n const tabs = Array.from({ length: this._tabCount }, (_, i) => i);\n return html`\n <div class=\"w-293.5 flex\">\n ${tabs.map((i) => {\n const active = this._activeTab === i;\n const isDisabled = this._tabDisabled[i];\n return html`\n <button\n class=\"shrink-0 h-8 px-8 flex items-center justify-center text-base bg-transparent\n transition-colors duration-200\n focus-visible:outline-2 focus-visible:outline-(--axebow-tertiary)\n ${isDisabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}\n ${active\n ? 'font-semibold text-(--axebow-primary) border-b-2 border-solid border-(--axebow-primary) border-t-0 border-l-0 border-r-0'\n : 'font-medium text-[#8A94AE] border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0'}\"\n ?disabled=${isDisabled}\n @click=${() => this._selectTab(i)}\n >\n <slot name=\"tab-label-${i}\"></slot>\n </button>\n `;\n })}\n <div class=\"flex-1 border-b border-solid border-(--axebow-light-gray) border-t-0 border-l-0 border-r-0\"></div>\n </div>\n ${tabs.map(\n (i) => html`\n <div class=\"${this._activeTab === i ? 'block' : 'hidden'}\">\n <slot name=\"tab-panel-${i}\"></slot>\n </div>\n `\n )}\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RoleCardResource {\n title: string;\n value: string;\n unit: string;\n}\n\n@customElement('axebow-role-card')\nexport class AxebowRoleCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-input::part(base) {\n width: 100%;\n height: 2.5rem;\n }\n sl-input::part(input) {\n text-align: center;\n }\n `,\n ];\n\n @property({ type: String }) name = '';\n @property({ type: String }) logoUrl = '';\n @property({ type: String }) descriptionPrefix = '';\n @property({ type: String }) description = '';\n @property({ type: String }) resourceLimitsTitle = '';\n @property({ attribute: false }) resources: RoleCardResource[] = [];\n\n private _renderResource(resource: RoleCardResource) {\n return html`\n <div class=\"w-24.75 h-20.75 shrink-0 flex flex-col items-center justify-center gap-1\">\n <h3 class=\"m-0 text-base font-semibold self-start\">${resource.title}</h3>\n <sl-input class=\"w-full\" type=\"number\" value=${resource.value} disabled></sl-input>\n <p class=\"m-0 text-xs\">${resource.unit}</p>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"w-95 h-83.25 box-border bg-white rounded-md p-4 flex flex-col\">\n <div class=\"w-87 h-4.25 flex items-center\">\n <h1 class=\"m-0 uppercase text-left text-base font-semibold text-(--axebow-gray) truncate\">${this.name}</h1>\n </div>\n <axebow-divider color=\"var(--axebow-gray)\"></axebow-divider>\n <div class=\"w-12.5 h-12.5 shrink-0\">\n <img src=${this.logoUrl} class=\"w-full h-full object-contain\" />\n </div>\n <div class=\"w-87 h-12.75 mt-4 overflow-hidden\">\n <p class=\"m-0 wrap-break-word whitespace-normal\">\n <strong>${this.descriptionPrefix}</strong> ${this.description}\n </p>\n </div>\n <div class=\"w-27 h-4.25 mt-4 flex items-center\">\n <h4 class=\"m-0 text-base font-semibold text-black\">${this.resourceLimitsTitle}</h4>\n </div>\n <div class=\"w-87 h-22.75 mt-4 flex items-center gap-2.25\">\n ${this.resources.map(\n (resource, i) => html`\n ${i === 2\n ? html`<div class=\"w-6 h-full flex items-center justify-center shrink-0\">\n <axebow-icon iconName=\"border_horizontal\" size=\"md\"></axebow-icon>\n </div>`\n : ''}\n ${this._renderResource(resource)}\n `\n )}\n </div>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-search/axebow-search.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface TimeRangeItem {\n label: string;\n value: number;\n selected: boolean;\n}\n\n@customElement('axebow-time-range-panel')\nexport class AxebowTimeRangePanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-input::part(input) {\n font-size: 0.95rem;\n color: var(--axebow-strong-gray);\n background-color: #f3f4f6;\n }\n sl-input::part(base) {\n background-color: #f3f4f6;\n width: 100%;\n }\n .apply-button::part(base) {\n font-size: 0.875rem !important;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) searchPlaceholder = '';\n @property({ type: String }) searchValue = '';\n @property({ attribute: false }) ranges: TimeRangeItem[] = [];\n @property({ type: String }) absoluteTitle = '';\n @property({ type: String }) fromLabel = '';\n @property({ type: String }) fromValue = '';\n @property({ type: String }) toLabel = '';\n @property({ type: String }) toValue = '';\n @property({ type: String }) applyLabel = '';\n\n private _emit(eventName: string, detail?: unknown) {\n this.dispatchEvent(new CustomEvent(eventName, { detail, bubbles: true, composed: true }));\n }\n\n private _handleSearchChange = (e: CustomEvent<{ value: string }>) => {\n this._emit('search-change', { value: e.detail.value });\n };\n\n private _handleRangeSelect(range: TimeRangeItem) {\n this._emit('range-select', { value: range.value });\n }\n\n private _handleFromChange = (e: Event) => {\n this._emit('from-change', { value: (e.target as HTMLInputElement).value });\n };\n\n private _handleApply = () => {\n this._emit('apply');\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n };\n\n private _renderQuickRanges() {\n return html`\n <sl-menu class=\"w-53 h-112 box-border p-2 rounded-none!\">\n <axebow-search\n placeholder=${this.searchPlaceholder}\n .value=${this.searchValue}\n width=\"12.25rem\"\n height=\"2.5rem\"\n @search-change=${this._handleSearchChange}\n ></axebow-search>\n ${this.ranges.map(\n (range) => html`\n <sl-menu-item @click=${() => this._handleRangeSelect(range)} ?selected=${range.selected}>\n ${range.label}\n </sl-menu-item>\n `\n )}\n </sl-menu>\n `;\n }\n\n private _renderAbsoluteTimeSection() {\n return html`\n <div class=\"w-74.75 h-112 box-border flex flex-col p-4 gap-2 bg-white border-l border-solid border-gray-100\">\n <h2 class=\"font-bold\">${this.absoluteTitle}</h2>\n <label for=\"from-datetime\">${this.fromLabel}</label>\n <sl-input\n id=\"from-datetime\"\n type=\"datetime-local\"\n .value=${this.fromValue}\n @sl-change=${this._handleFromChange}\n ></sl-input>\n <label for=\"to-datetime\">${this.toLabel}</label>\n <sl-input id=\"to-datetime\" type=\"text\" value=${this.toValue} disabled></sl-input>\n <axebow-button\n variant=\"primary\"\n fixedWidth=\"16.421875rem\"\n fixedHeight=\"2.5rem\"\n class=\"mt-4 apply-button\"\n @click=${this._handleApply}\n >\n ${this.applyLabel}\n </axebow-button>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"w-70.5 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <sl-dropdown class=\"w-70.5\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"17.625rem\" fixedHeight=\"2.5rem\">\n ${this.buttonText}\n </axebow-button>\n <div\n class=\"w-127.75 h-112 box-border my-2 flex text-sm border border-solid border-(--axebow-primary) rounded-md overflow-hidden\"\n >\n ${this._renderQuickRanges()} ${this._renderAbsoluteTimeSection()}\n </div>\n </sl-dropdown>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '@shoelace-style/shoelace/dist/components/checkbox/checkbox.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RoleContainerItem {\n name: string;\n selected: boolean;\n}\n\nexport interface RoleContainerInstanceItem {\n name: string;\n logoUrl: string;\n selected: boolean;\n containers: RoleContainerItem[];\n}\n\nexport interface RoleContainerRoleItem {\n name: string;\n instances: RoleContainerInstanceItem[];\n}\n\nexport interface RoleContainerSelection {\n type: 'all' | 'instance' | 'container';\n role?: string;\n instanceIdx?: number;\n container?: string;\n}\n\n@customElement('axebow-role-container-dropdown')\nexport class AxebowRoleContainerDropdown extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n sl-menu-item::part(base) {\n padding-top: 0.71875rem !important;\n padding-bottom: 0.71875rem !important;\n padding-left: 0.75rem !important;\n padding-right: 0.75rem !important;\n }\n sl-checkbox::part(base) {\n display: flex;\n align-items: center;\n }\n sl-checkbox::part(control) {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n sl-checkbox::part(label) {\n display: flex;\n align-items: center;\n }\n .role-container-panel::part(popup) {\n z-index: var(--sl-z-index-dropdown);\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) allContainersLabel = '';\n @property({ type: Boolean }) allContainersSelected = false;\n @property({ attribute: false }) roles: RoleContainerRoleItem[] = [];\n @property({ type: String }) clearAllLabel = '';\n @property({ type: String }) applyFilterLabel = '';\n\n private _emitToggle(selection: RoleContainerSelection) {\n this.dispatchEvent(new CustomEvent('item-toggle', { detail: { selection }, bubbles: true, composed: true }));\n }\n\n private _handleClearAll = () => {\n this.dispatchEvent(new CustomEvent('clear-all', { bubbles: true, composed: true }));\n };\n\n private _handleApplyFilter = () => {\n this.dispatchEvent(new CustomEvent('apply-filter', { bubbles: true, composed: true }));\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n };\n\n private _renderAllContainersOption() {\n return html`\n <sl-menu-item @click=${(e: Event) => this._handleItemClick(e, { type: 'all' })}>\n <sl-checkbox .checked=${this.allContainersSelected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}\n >${this.allContainersLabel}</sl-checkbox\n >\n </sl-menu-item>\n `;\n }\n\n private _handleItemClick(e: Event, selection: RoleContainerSelection) {\n e.preventDefault();\n e.stopPropagation();\n this._emitToggle(selection);\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n }\n\n private _renderInstance(role: RoleContainerRoleItem, instance: RoleContainerInstanceItem, instanceIdx: number) {\n return html`\n <sl-menu-item\n @click=${(e: Event) => this._handleItemClick(e, { type: 'instance', role: role.name, instanceIdx })}\n >\n <sl-checkbox .checked=${instance.selected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}>\n <div class=\"flex items-center gap-2\">\n <img src=\"${instance.logoUrl}\" alt=\"role-logo\" class=\"w-8 h-8\" />\n <p>${instance.name}</p>\n </div>\n </sl-checkbox>\n ${instance.containers.length\n ? html`\n <div class=\"flex flex-col ml-4\">\n ${instance.containers.map((container) => this._renderContainer(role.name, instanceIdx, container))}\n </div>\n `\n : ''}\n </sl-menu-item>\n `;\n }\n\n private _renderContainer(roleName: string, instanceIdx: number, container: RoleContainerItem) {\n return html`\n <div\n class=\"cursor-pointer hover:bg-gray-50 p-1 rounded\"\n @click=${(e: Event) =>\n this._handleItemClick(e, { type: 'container', role: roleName, instanceIdx, container: container.name })}\n >\n <sl-checkbox .checked=${container.selected} @sl-change=${(e: CustomEvent) => e.stopPropagation()}>\n <div class=\"flex items-center gap-2\">\n <axebow-icon class=\"font-light\" iconName=\"subdirectory_arrow_right\" size=\"base\"></axebow-icon>\n <p>${container.name}</p>\n </div>\n </sl-checkbox>\n </div>\n `;\n }\n\n private _renderFooter() {\n return html`\n <div class=\"w-70.5 h-10.25 box-border flex items-center border-t border-solid border-(--axebow-gray)\">\n <div\n class=\"w-34.25 h-10 box-border flex items-center text-base text-(--axebow-gray) cursor-pointer\"\n style=\"padding: 0.71875rem 1.5rem 0.71875rem 1.75rem;\"\n @click=${this._handleClearAll}\n >\n ${this.clearAllLabel}\n </div>\n <span class=\"w-px h-full bg-(--axebow-light-gray) shrink-0\"></span>\n <div\n class=\"w-34.25 h-10 box-border flex items-center text-base text-(--axebow-tertiary) cursor-pointer\"\n style=\"padding: 0.71875rem 1.5rem 0.71875rem 1.75rem;\"\n @click=${this._handleApplyFilter}\n >\n ${this.applyFilterLabel}\n </div>\n </div>\n `;\n }\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2\">\n <div class=\"w-70.5 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <sl-dropdown class=\"w-70.5\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"17.625rem\" fixedHeight=\"2.5rem\">\n ${this.buttonText}\n </axebow-button>\n <div\n class=\"role-container-panel w-70.5 h-89.25 box-border flex flex-col bg-white border border-solid border-(--axebow-tertiary) rounded-md overflow-hidden\"\n >\n <sl-menu class=\"w-70.5 h-79 box-border overflow-y-auto\">\n ${this._renderAllContainersOption()}\n ${this.roles.map((role) =>\n role.instances.map((instance, instanceIdx) => this._renderInstance(role, instance, instanceIdx))\n )}\n </sl-menu>\n ${this._renderFooter()}\n </div>\n </sl-dropdown>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport '../axebow-divider/axebow-divider.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface RefreshPeriodItem {\n label: string;\n value: number;\n selected: boolean;\n}\n\n@customElement('axebow-refresh-period-panel')\nexport class AxebowRefreshPeriodPanel extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .refresh-spin {\n animation: spin 1s linear infinite;\n }\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) buttonText = '';\n @property({ type: String }) offLabel = '';\n @property({ type: Boolean }) offSelected = false;\n @property({ attribute: false }) periods: RefreshPeriodItem[] = [];\n @property({ type: String }) refreshNowLabel = '';\n @property({ type: Boolean }) isManualRefreshing = false;\n\n private _handleSelect(value: number | null) {\n this.dispatchEvent(new CustomEvent('period-select', { detail: { value }, bubbles: true, composed: true }));\n (this.renderRoot.querySelector('sl-dropdown') as (HTMLElement & { hide: () => void }) | null)?.hide();\n }\n\n private _handleRefreshNow = () => {\n this.dispatchEvent(new CustomEvent('refresh-now-click', { bubbles: true, composed: true }));\n };\n\n render() {\n return html`\n <div class=\"flex flex-col gap-2\">\n <div class=\"w-45 h-4.25 flex items-center\">\n <h1 class=\"m-0 text-base font-semibold\">${this.title}</h1>\n </div>\n <div class=\"flex gap-4 items-center justify-center flex-wrap\">\n <sl-dropdown class=\"w-45\">\n <axebow-button class=\"w-full\" slot=\"trigger\" caret fixedWidth=\"11.25rem\" fixedHeight=\"2.5rem\">\n <div class=\"flex items-center gap-2\">${this.buttonText}</div>\n </axebow-button>\n <sl-menu class=\"w-45 my-2\">\n <sl-menu-item @click=${() => this._handleSelect(null)} ?selected=${this.offSelected}>\n <div class=\"flex items-center gap-2\">${this.offLabel}</div>\n </sl-menu-item>\n <axebow-divider margin=\"0.25rem 0\"></axebow-divider>\n ${this.periods.map(\n (period) => html`\n <sl-menu-item @click=${() => this._handleSelect(period.value)} ?selected=${period.selected}>\n <div class=\"flex items-center gap-2\">${period.label}</div>\n </sl-menu-item>\n `\n )}\n </sl-menu>\n </sl-dropdown>\n <button\n class=\"text-(--axebow-tertiary) flex items-center gap-2 cursor-pointer hover:opacity-80 transition-opacity ${this\n .isManualRefreshing\n ? 'opacity-70'\n : ''}\"\n @click=${this._handleRefreshNow}\n ?disabled=${this.isManualRefreshing}\n >\n <p class=\"font-bold\">${this.refreshNowLabel}</p>\n <axebow-icon\n iconName=\"cached\"\n size=\"3xl\"\n iconColor=\"var(--axebow-tertiary)\"\n class=\"${this.isManualRefreshing ? 'refresh-spin' : ''}\"\n ></axebow-icon>\n </button>\n </div>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../../styles/axebow-theme.js';\nimport '../../axebow-input/axebow-input.js';\n\n@customElement('axebow-resource-limit-input')\nexport class AxebowResourceLimitInput extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: String }) label = '';\n @property({ type: String }) unit = '';\n @property({ type: String }) value = '';\n @property({ type: Number }) max = Number.MAX_SAFE_INTEGER;\n @property({ type: Number }) min = 0;\n @property({ type: Boolean }) required = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) hasError = false;\n @property({ attribute: false }) callback?: (e: Event) => void;\n\n render() {\n return html`\n <div class=\"flex flex-col items-center w-28.25 shrink-0\">\n <axebow-input\n controlType=\"numeric\"\n .compact=${true}\n .label=${this.label}\n .required=${this.required}\n .value=${this.value}\n .max=${this.max}\n .min=${this.min}\n .disabled=${this.disabled}\n .hasError=${this.hasError}\n .callback=${this.callback}\n fixedWidth=\"6.1875rem\"\n fixedHeight=\"2.5rem\"\n ></axebow-input>\n <span class=\"text-sm text-(--axebow-gray, #6b7280) text-center mt-1\">${this.unit}</span>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-input/axebow-input.js';\nimport type { ResourceLimitField } from './axebow-resource-limits.models.js';\n\nexport type { ResourceLimitField };\n\n@customElement('axebow-resource-limits-panel')\nexport class AxebowResourceLimitsPanel extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Object }) cpu!: ResourceLimitField;\n @property({ type: Object }) memory!: ResourceLimitField;\n @property({ type: Array }) storageFields: ResourceLimitField[] = [];\n\n private _handleChange(field: ResourceLimitField, e: Event) {\n const target = e.target as HTMLInputElement;\n let value = Number(target.value) || 0;\n if (field.max !== undefined && field.max !== Number.MAX_SAFE_INTEGER && value > field.max) value = field.max;\n if (field.min !== undefined && value < field.min) value = field.min;\n this.dispatchEvent(\n new CustomEvent('resource-limit-change', {\n detail: { key: field.key, value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _renderField(field: ResourceLimitField) {\n return html`\n <div class=\"flex flex-col items-center w-28.25 shrink-0\">\n <axebow-input\n controlType=\"numeric\"\n .compact=${true}\n .label=${field.label}\n .required=${field.required}\n .value=${field.value?.toString() ?? ''}\n .max=${field.max}\n .min=${field.min ?? 0}\n ?disabled=${field.disabled}\n ?hasError=${field.hasError}\n .errorMessage=${field.errorMessage ?? ''}\n .callback=${(e: Event) => this._handleChange(field, e)}\n fixedWidth=\"6.1875rem\"\n fixedHeight=\"2.5rem\"\n ></axebow-input>\n ${field.hasError && field.errorMessage ? html`<span class=\"text-sm text-(--axebow-error) text-center mt-1 leading-tight\">${field.errorMessage}</span>` : html`<span class=\"text-sm text-(--axebow-gray, #6b7280) text-center mt-1\">${field.unit}</span>`}\n </div>\n `;\n }\n\n render() {\n if (!this.cpu || !this.memory) return html``;\n\n return html`\n <div class=\"flex items-center flex-wrap gap-19\">\n <div class=\"flex items-start gap-6\">${this._renderField(this.cpu)} ${this._renderField(this.memory)}</div>\n <div class=\"flex items-center justify-center gap-4 w-100.5 p-4 border border-(--axebow-table-header-border) rounded-md box-border\">\n ${this.storageFields.map((field) => this._renderField(field))}\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\nexport type SelectorSliderPosition = number | 'min' | 'middle' | 'max';\n\n@customElement('axebow-selector-slider')\nexport class AxebowSelectorSlider extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Number, reflect: true }) quantity: SelectorSliderPosition = 0;\n @property() minTag: string | number = 0;\n @property() mediumTag: string | number = 'Y';\n @property() maxTag: string | number = 'X';\n @property({ type: Number }) min?: number;\n @property({ type: Number }) max?: number;\n @property({ type: Number }) step = 1;\n @property({ type: Boolean }) disabled = false;\n\n @property()\n get value(): SelectorSliderPosition {\n return this.quantity;\n }\n set value(val: SelectorSliderPosition) {\n this.quantity = val;\n }\n\n @query('.slider-track-container') private _trackContainer!: HTMLElement;\n\n private _isDragging = false;\n\n private get _minVal(): number {\n if (typeof this.min === 'number') return this.min;\n const n = Number(this.minTag);\n return isNaN(n) ? 0 : n;\n }\n\n private get _maxVal(): number {\n if (typeof this.max === 'number') return this.max;\n const n = Number(this.maxTag);\n return isNaN(n) ? 100 : n;\n }\n\n private get _numericQuantity(): number {\n if (typeof this.quantity === 'string') {\n const str = (this.quantity as string).toLowerCase();\n if (str === 'min') return this._minVal;\n if (str === 'max') return this._maxVal;\n if (str === 'middle') return Math.round((this._minVal + this._maxVal) / 2);\n const parsed = Number(this.quantity);\n if (!isNaN(parsed)) return parsed;\n }\n return typeof this.quantity === 'number' ? this.quantity : this._minVal;\n }\n\n private get _percentage(): number {\n const min = this._minVal;\n const max = this._maxVal;\n if (max <= min) return 0;\n const val = Math.max(min, Math.min(max, this._numericQuantity));\n return ((val - min) / (max - min)) * 100;\n }\n\n private _setValue(newValue: number) {\n const min = this._minVal;\n const max = this._maxVal;\n const clamped = Math.max(min, Math.min(max, newValue));\n if (this._numericQuantity !== clamped) {\n this.quantity = clamped;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: clamped, quantity: clamped },\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _handlePointerDown(e: PointerEvent) {\n if (this.disabled) return;\n this._isDragging = true;\n this._updateFromPointer(e);\n\n const handlePointerMove = (moveEv: PointerEvent) => {\n if (this._isDragging) {\n this._updateFromPointer(moveEv);\n }\n };\n\n const handlePointerUp = () => {\n this._isDragging = false;\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n\n private _updateFromPointer(e: PointerEvent) {\n if (!this._trackContainer) return;\n const rect = this._trackContainer.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const width = rect.width;\n if (width <= 0) return;\n\n const ratio = Math.max(0, Math.min(1, x / width));\n const min = this._minVal;\n const max = this._maxVal;\n const rawVal = min + ratio * (max - min);\n\n const step = this.step || 1;\n const stepped = Math.round((rawVal - min) / step) * step + min;\n this._setValue(stepped);\n }\n\n private _handleKeyDown(e: KeyboardEvent) {\n if (this.disabled) return;\n const min = this._minVal;\n const max = this._maxVal;\n const step = this.step || 1;\n const current = this._numericQuantity;\n\n if (e.key === 'ArrowRight' || e.key === 'ArrowUp') {\n e.preventDefault();\n this._setValue(Math.min(max, current + step));\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') {\n e.preventDefault();\n this._setValue(Math.max(min, current - step));\n } else if (e.key === 'Home') {\n e.preventDefault();\n this._setValue(min);\n } else if (e.key === 'End') {\n e.preventDefault();\n this._setValue(max);\n }\n }\n\n render() {\n const percent = this._percentage;\n const currentVal = this._numericQuantity;\n const min = this._minVal;\n const max = this._maxVal;\n const mid = Math.round((min + max) / 2);\n\n return html`\n <div class=\"w-full flex flex-col gap-2 select-none ${this.disabled ? 'opacity-50 pointer-events-none' : ''}\">\n <!-- Slider Track Container -->\n <div\n class=\"relative w-full h-8 flex items-center cursor-pointer touch-none focus:outline-none focus-visible:ring-2 focus-visible:ring-[#006BFF] rounded-full\"\n tabindex=${this.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin=${min}\n aria-valuemax=${max}\n aria-valuenow=${currentVal}\n aria-valuetext=${String(currentVal)}\n @pointerdown=${this._handlePointerDown}\n @keydown=${this._handleKeyDown}\n >\n <!-- Outer track padding container for exact knob alignment -->\n <div class=\"slider-track-container relative w-full h-3 rounded-full bg-[#C7DCFA] overflow-visible\">\n <!-- Active Fill Track -->\n <div\n class=\"absolute left-0 top-0 bottom-0 rounded-full bg-[#006BFF] transition-all duration-150 ease-out\"\n style=\"width: ${percent}%;\"\n ></div>\n\n <!-- Slider Thumb Knob -->\n <div\n class=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 w-7 h-7 rounded-full bg-[#006BFF] border-2 border-white shadow-[0_2px_6px_rgba(0,0,0,0.2)] transition-all duration-150 ease-out cursor-grab active:cursor-grabbing hover:scale-105\"\n style=\"left: ${percent}%;\"\n ></div>\n </div>\n </div>\n\n <!-- Labels below -->\n <div class=\"flex justify-between items-center text-sm font-semibold text-[#78787A] px-1\">\n <span class=\"w-1/3 text-left cursor-pointer\" @click=${() => !this.disabled && this._setValue(min)}>\n ${this.minTag}\n </span>\n <span class=\"w-1/3 text-center cursor-pointer\" @click=${() => !this.disabled && this._setValue(mid)}>\n ${this.mediumTag}\n </span>\n <span class=\"w-1/3 text-right cursor-pointer\" @click=${() => !this.disabled && this._setValue(max)}>\n ${this.maxTag}\n </span>\n </div>\n </div>\n `;\n }\n}","import { html, css, LitElement, unsafeCSS, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../axebow-divider/axebow-divider.js';\nimport type {\n DeploySummaryInfo,\n DeploySummaryResourceLimits,\n DeploySummaryIdentificationStep,\n DeploySummaryResourcesStep,\n DeploySummaryScalingStep,\n DeploySummaryChannelsStep,\n DeploySummaryChannelGroup,\n DeploySummaryConfigurationStep,\n DeploySummaryConfigItem,\n} from './axebow-deploy-summary.models.js';\n\n/**\n * Purely presentational deploy-wizard summary panel. Every figure, label\n * and per-step visibility/validity flag comes in via properties, already\n * computed and translated by the caller - this component only lays the\n * sections out and forwards the `axebow-summary-step` toggle/edit events\n * (which already bubble+compose on their own) and the download click.\n *\n * Body copy is uniformly 14px (text-base in this design system's scale) -\n * only step titles and the \"Autoscaling\" section title keep their larger\n * size. Every field name renders in black, every value in axebow-gray.\n */\n@customElement('axebow-deploy-summary')\nexport class AxebowDeploySummary extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n height: 100%;\n }\n axebow-summary-card {\n display: block;\n height: 100%;\n }\n `,\n ];\n\n @property({ type: String }) summaryTitle = '';\n @property({ type: Boolean }) showDownloadButton = false;\n @property({ type: String }) downloadLabel = '';\n\n @property({ attribute: false }) deploymentInfo?: DeploySummaryInfo;\n @property({ attribute: false }) resourceLimits?: DeploySummaryResourceLimits;\n\n @property({ attribute: false }) identification?: DeploySummaryIdentificationStep;\n @property({ attribute: false }) resources?: DeploySummaryResourcesStep;\n @property({ attribute: false }) scaling?: DeploySummaryScalingStep;\n @property({ attribute: false }) channels?: DeploySummaryChannelsStep;\n @property({ attribute: false }) configuration?: DeploySummaryConfigurationStep;\n\n /** Bumped by the caller whenever the wizard advances a step, to scroll the summary into view. */\n @property({ type: Number }) currentStep = 0;\n\n protected updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n if (changedProperties.has('currentStep')) {\n const oldStep = changedProperties.get('currentStep') as number | undefined;\n if (oldStep !== undefined && this.currentStep > oldStep) {\n this._scrollToBottom();\n }\n }\n }\n\n private _scrollToBottom() {\n setTimeout(() => {\n const summaryCard = this.renderRoot.querySelector('axebow-summary-card') as any;\n if (summaryCard && summaryCard.scrollToBottom) {\n summaryCard.scrollToBottom();\n }\n\n const container = this.renderRoot.querySelector('.overflow-y-auto');\n if (container) {\n container.scrollTop = container.scrollHeight;\n }\n }, 100);\n }\n\n render() {\n return html`\n <axebow-summary-card title=\"${this.summaryTitle}\">\n ${this.showDownloadButton\n ? html`\n <axebow-button slot=\"header-actions\" variant=\"text\" size=\"medium\" @click=${this._handleDownloadBundle}>\n <axebow-icon\n iconName=\"download_for_offline\"\n slot=\"suffix\"\n size=\"xl\"\n ></axebow-icon>\n <span class=\"text-sm lg:text-base hidden lg:inline\">${this.downloadLabel}</span>\n </axebow-button>\n `\n : ''}\n ${this._renderDeploymentInfo()}\n <div class=\"h-px border-t border-dashed border-gray-400 my-4\"></div>\n ${this._renderResourceLimits()}\n <axebow-divider color=\"var(--axebow-table-header-border, #dbdde4)\" margin=\"0.75rem 0\"></axebow-divider>\n <div class=\"flex-1 overflow-y-auto flex flex-col\">\n ${this._renderIdentificationStep()} ${this._renderResourcesStep()} ${this._renderScalingStep()}\n ${this._renderChannelsStep()} ${this._renderConfigurationStep()}\n </div>\n </axebow-summary-card>\n `;\n }\n\n private _renderDeploymentInfo() {\n const info = this.deploymentInfo;\n if (!info) return '';\n return html`\n <div class=\"flex flex-col gap-2\">\n <axebow-summary-key-value\n label=\"${info.subscriptionPlan.label}\"\n value=\"${info.subscriptionPlan.value}\"\n ></axebow-summary-key-value>\n <axebow-summary-key-value label=\"${info.tenant.label}\" value=\"${info.tenant.value}\"></axebow-summary-key-value\n ><axebow-summary-key-value\n label=\"${info.account.label}\"\n value=\"${info.account.value}\"\n ></axebow-summary-key-value>\n <div class=\"flex gap-4 items-center mb-1\">\n <p class=\"text-base text-(--axebow-black)\">${info.cloudProviderLabel}</p>\n ${info.cloudProviderLogoSrc\n ? html`<img src=\"${info.cloudProviderLogoSrc}\" class=\"h-6\" alt=\"${info.cloudProviderLogoAlt ?? ''}\" />`\n : ''}\n </div>\n <axebow-summary-key-value\n label=\"${info.environment.label}\"\n value=\"${info.environment.value}\"\n ></axebow-summary-key-value>\n </div>\n `;\n }\n\n private _renderResourceLimits() {\n const limits = this.resourceLimits;\n if (!limits) return '';\n return html`\n <div class=\"flex flex-col gap-2 flex-wrap\">\n <p class=\"text-base text-(--axebow-black)\">${limits.limitsAvailableLabel}</p>\n <div>\n <axebow-resource-bar\n icon=\"${limits.cpu.icon}\"\n label=\"${limits.cpu.label}\"\n .current=${limits.cpu.current}\n .limit=${limits.cpu.limit}\n .percentage=${limits.cpu.percentage}\n iconSize=\"base\"\n iconBoxSize=\"0.875rem\"\n fixedWidth=\"20.875rem\"\n fixedHeight=\"1.75rem\"\n valuesWidth=\"14.1875rem\"\n valuesHeight=\"1rem\"\n barWidth=\"8.75rem\"\n barHeight=\"0.6875rem\"\n ></axebow-resource-bar>\n <axebow-resource-bar\n icon=\"${limits.memory.icon}\"\n label=\"${limits.memory.label}\"\n .current=${limits.memory.current}\n .limit=${limits.memory.limit}\n .percentage=${limits.memory.percentage}\n rotate=\"${limits.memory.rotate ?? '0'}\"\n unit=\"${limits.memory.unit ?? ''}\"\n iconSize=\"base\"\n iconBoxSize=\"0.875rem\"\n fixedWidth=\"20.875rem\"\n fixedHeight=\"1.75rem\"\n valuesWidth=\"14.1875rem\"\n valuesHeight=\"1rem\"\n barWidth=\"8.75rem\"\n barHeight=\"0.6875rem\"\n ></axebow-resource-bar>\n </div>\n </div>\n `;\n }\n\n /** label:value pair with the shared black-name/gray-value convention. */\n private _field(label: string, value: unknown, hasError = false) {\n return html`\n <p class=\"text-base\">\n <span class=\"text-(--axebow-black)\">${label}</span>\n <strong class=\"${hasError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${value}</strong>\n </p>\n `;\n }\n\n private _renderIdentificationStep() {\n const step = this.identification;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-1\">\n ${step.imageName ? this._field(step.imageNameLabel, step.imageName) : ''}\n ${step.serviceName ? this._field(step.serviceNameLabel, step.serviceName) : ''}\n ${step.project ? this._field(step.projectLabel, step.project) : ''}\n ${step.registry ? this._renderRegistrySummary(step.registry) : ''}\n ${step.entrypoint\n ? html`<div class=\"border-t border-dashed border-gray-300 pt-2 flex items-center gap-1 min-w-0 text-base\">\n <span class=\"shrink-0 text-(--axebow-black)\">${step.entrypointLabel}</span>\n <axebow-tooltip content=\"${step.entrypoint}\">\n <strong class=\"text-(--axebow-gray) block truncate max-w-36\">${step.entrypoint}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n ${step.cmd\n ? html`<div class=\"flex items-center gap-1 min-w-0 text-base\">\n <span class=\"shrink-0 text-(--axebow-black)\">${step.commandLabel}</span>\n <axebow-tooltip content=\"${step.cmd}\">\n <strong class=\"text-(--axebow-gray) block truncate max-w-36\">${step.cmd}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderRegistrySummary(registry: NonNullable<DeploySummaryIdentificationStep['registry']>) {\n return html`\n <div class=\"flex items-center gap-2 min-w-0 text-base\">\n <p class=\"shrink-0 text-(--axebow-black)\">${registry.containerRegistryLabel}</p>\n ${!registry.logoSrc\n ? html`<axebow-tooltip content=\"${registry.value}\">\n <strong class=\"text-(--axebow-gray) block truncate w-full\">${registry.value}</strong>\n </axebow-tooltip>`\n : html`<img src=\"${registry.logoSrc}\" class=\"w-6 h-4 object-contain\" />`}\n </div>\n ${registry.credentialSecret\n ? html` <div class=\"flex items-center gap-2 min-w-0 text-base\">\n <p class=\"shrink-0 text-(--axebow-black)\">${registry.registryCredentialsLabel}</p>\n <axebow-tooltip content=\"${registry.credentialSecret}\">\n <strong class=\"text-(--axebow-gray) block truncate w-full\">${registry.credentialSecret}</strong>\n </axebow-tooltip>\n </div>`\n : ''}\n `;\n }\n\n private _renderResourcesStep() {\n const step = this.resources;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"pr-2 space-y-2\">\n <div class=\"flex flex-row gap-x-4 flex-wrap\">\n ${this._field(step.cpus.label, `${step.cpus.value} ${step.cpus.unit}`, step.cpus.hasError)}\n ${this._field(step.memory.label, `${step.memory.value} ${step.memory.unit}`, step.memory.hasError)}\n </div>\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderScalingStep() {\n const step = this.scaling;\n if (!step?.visible) return '';\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-1\">\n ${step.isAutoscaling && step.autoscaling\n ? this._renderAutoscalingInfo(step.autoscaling)\n : this._field(step.fixedReplicasLabel, step.fixedReplicas)}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderAutoscalingInfo(config: NonNullable<DeploySummaryScalingStep['autoscaling']>) {\n const hasScaleDownInfo = config.cpuDown || config.memoryDown;\n return html`\n <div class=\"border-t border-dashed border-gray-300 pt-3 space-y-1\">\n <p class=\"font-semibold text-base lg:text-lg text-(--axebow-black) mb-2\">${config.title}</p>\n ${config.minReplicas ? this._field(config.minLabel, config.minReplicas.value, config.minReplicas.hasError) : ''}\n ${config.maxReplicas ? this._field(config.maxLabel, config.maxReplicas.value) : ''}\n ${hasScaleDownInfo ? html`<axebow-divider type=\"dashed\" color=\"var(--axebow-base)\" margin=\"0.75rem 0\"></axebow-divider>` : ''}\n ${config.cpuDown ? this._field(config.scaleDownCpuLabel, `${config.cpuDown}%`) : ''}\n ${config.cpuDown && config.memoryDown\n ? html`<p class=\"text-base text-(--axebow-black)\">${config.andLabel}</p>`\n : ''}\n ${config.memoryDown ? this._field(config.scaleDownMemoryLabel, `${config.memoryDown}%`) : ''}\n ${hasScaleDownInfo ? html`<axebow-divider type=\"dashed\" color=\"var(--axebow-base)\" margin=\"0.75rem 0\"></axebow-divider>` : ''}\n ${config.histeresys ? this._field(config.cooldownLabel, config.histeresys) : ''}\n </div>\n `;\n }\n\n private _renderChannelsStep() {\n const step = this.channels;\n if (!step?.visible) return '';\n\n const hasAny = step.serverChannels || step.clientChannels || step.duplexChannels;\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div class=\"space-y-2 text-base\">\n ${hasAny\n ? html`\n ${step.serverChannels ? this._renderChannelGroup(step.serverChannels, step.linkedToLabel) : ''}\n ${step.clientChannels\n ? html`\n ${step.serverChannels ? html`<div class=\"border-t border-dashed border-gray-300\"></div>` : ''}\n ${this._renderChannelGroup(step.clientChannels, step.linkedToLabel)}\n `\n : ''}\n ${step.duplexChannels\n ? html`\n ${step.serverChannels || step.clientChannels\n ? html`<div class=\"border-t border-dashed border-gray-300\"></div>`\n : ''}\n ${this._renderChannelGroup(step.duplexChannels, step.linkedToLabel)}\n `\n : ''}\n `\n : html`<p class=\"text-gray-500 italic\">${step.noChannelsLabel}</p>`}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _renderChannelGroup(group: DeploySummaryChannelGroup, linkedToLabel: string) {\n const hasAnyLink = group.channels.some((ch) => ch.linked.length > 0);\n const totalLinked = group.channels.reduce((acc, ch) => acc + ch.linked.length, 0);\n\n return html`\n <div class=\"grid gap-x-4 gap-y-1 items-center\" style=\"grid-template-columns: 1fr ${hasAnyLink ? '1fr' : ''}\">\n <span class=\"font-medium text-(--axebow-black)\">${group.label} (${group.channels.length}):</span>\n ${hasAnyLink\n ? html`<span class=\"font-medium text-(--axebow-black)\">${linkedToLabel} (${totalLinked}):</span>`\n : ''}\n ${group.channels.map(\n (ch) => html`\n <div class=\"flex items-center min-w-0\">\n <strong class=\"text-(--axebow-gray) flex items-center gap-1 min-w-0 truncate\">\n <span class=\"truncate\">${ch.name}${ch.port ? `:${ch.port}` : ''}</span>\n ${ch.isPublic\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"captive_portal\"\n iconColor=\"var(--axebow-gray)\"\n size=\"md\"\n title=\"Gateway\"\n ></axebow-icon>`\n : ''}\n </strong>\n </div>\n ${hasAnyLink\n ? html`<span class=\"text-(--axebow-gray) font-semibold truncate\">${ch.linked.join(', ') || '—'}</span>`\n : ''}\n `\n )}\n </div>\n `;\n }\n\n private _renderNameValueGrid(items: { name: string; value: string }[], nameLabel: string, valueLabel: string) {\n return html`\n <div class=\"grid gap-x-6 gap-y-1 text-base\" style=\"grid-template-columns: 1fr auto 1fr\">\n <span class=\"text-(--axebow-black)\">${nameLabel}:</span>\n <span></span>\n <span class=\"text-(--axebow-black)\">${valueLabel}:</span>\n ${items.map(\n (item) => html`\n <span class=\"truncate font-normal text-(--axebow-primary)\">${item.name}</span>\n <span class=\"font-normal text-(--axebow-primary)\">=</span>\n <span class=\"font-normal truncate text-(--axebow-primary)\">${item.value}</span>\n `\n )}\n </div>\n `;\n }\n\n private _renderConfigurationStep() {\n const step = this.configuration;\n if (!step?.visible) return '';\n\n const pathItems = step.items.filter((item): item is DeploySummaryConfigItem & { path: string } => !!item.path);\n const plainItems = step.items.filter((item) => !item.path);\n\n return html`\n <axebow-summary-step\n .stepNumber=${step.stepNumber}\n stepTitle=\"${step.stepTitle}\"\n .valid=${step.valid}\n .collapsed=${step.collapsed}\n .visible=${true}\n .isEditing=${step.isEditing}\n .enabled=${step.enabled}\n >\n <div>\n ${step.items.length\n ? html`\n ${plainItems.length\n ? this._renderNameValueGrid(plainItems, step.variableNameLabel, step.variableValueLabel)\n : ''}\n ${pathItems.length && plainItems.length ? html`<axebow-divider color=\"var(--axebow-table-header-border, #dbdde4)\" margin=\"0.75rem 0\"></axebow-divider>` : ''}\n ${pathItems.length\n ? this._renderNameValueGrid(\n pathItems.map((item) => ({ name: item.name, value: item.path })),\n step.pathNameLabel,\n step.pathValueLabel\n )\n : ''}\n `\n : html`<p class=\"text-base text-gray-500 italic\">${step.noConfigVarsLabel}</p>`}\n </div>\n </axebow-summary-step>\n `;\n }\n\n private _handleDownloadBundle() {\n this.dispatchEvent(new CustomEvent('download-bundle', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\n\n@customElement('axebow-summary-key-value')\nexport class AxebowSummaryKeyValue extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n margin-bottom: 0.25rem;\n }\n `,\n ];\n\n @property({ type: String }) label!: string;\n @property({ type: String }) value!: string;\n\n render() {\n return html`\n <p class=\"text-base\">\n <span class=\"text-(--axebow-black)\">${this.label}:</span>\n <span class=\"font-normal text-(--axebow-primary)\">${this.value}</span>\n </p>\n `;\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-resource-bar')\nexport class AxebowResourceBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) icon = '';\n @property({ type: String }) label = '';\n @property({ type: Number }) current = 0;\n @property({ type: Number }) limit = 0;\n @property({ type: Number }) percentage = 0;\n @property({ type: String }) rotate = '0';\n\n @property({ type: String }) iconSize = 'xl';\n @property({ type: String }) iconBoxSize?: string;\n @property({ type: String }) fixedWidth?: string;\n @property({ type: String }) fixedHeight?: string;\n @property({ type: String }) valuesWidth?: string;\n @property({ type: String }) valuesHeight?: string;\n @property({ type: String }) barWidth?: string;\n @property({ type: String }) barHeight?: string;\n @property({ type: String }) unit?: string;\n\n private _renderIcon() {\n const icon = html`\n <axebow-icon\n iconName=\"${this.icon}\"\n iconColor=\"var(--axebow-strong-gray)\"\n size=\"${this.iconSize}\"\n rotate=\"${Number(this.rotate)}\"\n ></axebow-icon>\n `;\n\n return this.iconBoxSize\n ? html`\n <div\n class=\"flex items-center justify-center shrink-0\"\n style=\"width:${this.iconBoxSize};height:${this.iconBoxSize};\"\n >\n ${icon}\n </div>\n `\n : icon;\n }\n\n private get _isFixedVariant(): boolean {\n return !!(this.valuesWidth || this.barWidth);\n }\n\n private _formatValue(value: number): string {\n const hundredths = Math.round(value * 100);\n const decimals = hundredths % 10 === 0 ? 1 : 2;\n return (hundredths / 100).toFixed(decimals);\n }\n\n private _renderCurrent() {\n const value = this._isFixedVariant ? this._formatValue(this.current) : this.current.toFixed(2);\n const colorClass = this._isFixedVariant ? 'text-(--axebow-primary)' : 'text-(--axebow-gray)';\n return html`<p class=\"text-base ${colorClass}\">${value}</p>`;\n }\n\n private _renderBar() {\n return html`\n <div\n class=\"relative rounded-md bg-gray-200 overflow-hidden ${this.barWidth ? 'shrink-0' : 'flex-1 max-w-38'}\"\n style=\"height:${this.barHeight ?? '0.5rem'};${this.barWidth ? `width:${this.barWidth};` : ''}\"\n >\n <div\n class=\"absolute h-full ${this.percentage > 100\n ? 'bg-(--axebow-error)'\n : this.percentage === 100\n ? 'bg-(--axebow-warning)'\n : 'bg-(--axebow-gray)'}\"\n style=\"width: ${this.percentage}%;\"\n ></div>\n </div>\n `;\n }\n\n private _renderLimit() {\n const value = this.limit == null ? '-' : this._isFixedVariant ? this._formatValue(this.limit) : this.limit;\n const colorClass = this._isFixedVariant ? 'text-(--axebow-black)' : 'text-(--axebow-gray)';\n const weightClass = this._isFixedVariant ? 'font-normal' : 'font-bold';\n return html`\n <p class=\"text-base ${weightClass} ${colorClass}\">${value}</p>\n ${this.unit ? html`<span class=\"text-xs ${weightClass} ${colorClass}\">${this.unit}</span>` : ''}\n `;\n }\n\n private _renderValues() {\n if (!this._isFixedVariant) {\n return html` ${this._renderCurrent()} ${this._renderBar()} ${this._renderLimit()} `;\n }\n\n return html`\n <div class=\"flex items-center gap-2.75\">${this._renderCurrent()} ${this._renderBar()}</div>\n <div class=\"flex items-baseline gap-0.5\">${this._renderLimit()}</div>\n `;\n }\n\n render() {\n return html`\n <div\n class=\"flex justify-between items-center gap-2 ${this.fixedWidth || this.fixedHeight ? '' : 'flex-wrap'}\"\n style=\"${this.fixedWidth ? `width:${this.fixedWidth};` : ''}${this.fixedHeight\n ? `height:${this.fixedHeight};`\n : ''}\"\n >\n <div class=\"flex items-center gap-1\">\n ${this._renderIcon()}\n <p class=\"text-base font-semibold text-(--axebow-black)\">${this.label}</p>\n </div>\n <div\n class=\"flex items-center ${this.valuesWidth || this.barWidth\n ? 'justify-between shrink-0'\n : 'gap-1 flex-1 max-w-43 min-w-20 justify-end'}\"\n style=\"${this.valuesWidth ? `width:${this.valuesWidth};` : ''}${this.valuesHeight\n ? `height:${this.valuesHeight};`\n : ''}\"\n >\n ${this._renderValues()}\n </div>\n </div>\n `;\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-summary-step-header')\nexport class AxebowSummaryStepHeader extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Number }) stepNumber!: number;\n @property({ type: String }) stepTitle = '';\n @property({ type: Boolean }) valid = false;\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) canEdit = true;\n @property({ type: Boolean }) isEditing = false;\n @property({ type: String }) editLabel = 'Edit';\n @property({ type: String }) editingLabel = 'Editing';\n @property({ type: Boolean }) enabled = true;\n @property({ type: Boolean }) hasWarning = false;\n\n render() {\n return html`\n <div class=\"flex gap-2 items-center justify-between\">\n <div class=\"flex items-center gap-0.5 min-w-0\">\n ${(this.valid || this.hasWarning) && this.enabled\n ? html`\n <axebow-icon\n iconName=\"${this.collapsed ? 'expand_all' : 'collapse_all'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n clickable\n class=\"shrink-0\"\n @click=${this._handleToggle}\n ></axebow-icon>\n `\n : ''}\n <h5\n class=\"my-2 min-w-0 flex-1 truncate text-base uppercase ${this.enabled\n ? 'font-semibold'\n : 'font-normal text-(--axebow-gray)'}\"\n >\n STEP ${this.stepNumber}: ${this.stepTitle}\n </h5>\n ${this.hasWarning\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"error\"\n iconColor=\"var(--axebow-error)\"\n size=\"md\"\n ></axebow-icon>`\n : this.valid && this.enabled && !this.isEditing\n ? html`<axebow-icon\n class=\"shrink-0\"\n iconName=\"check_circle\"\n iconColor=\"var(--axebow-success)\"\n size=\"md\"\n ></axebow-icon>`\n : ''}\n </div>\n <div class=\"flex items-center gap-2 shrink-0\">\n ${this.isEditing\n ? html`<span class=\"w-11.25 h-4.25 shrink-0 text-base text-(--axebow-gray)\">${this.editingLabel}</span>`\n : ''}\n ${this.enabled && this.valid && this.canEdit && !this.isEditing\n ? html`\n <div\n class=\"w-4.5 h-4.5 shrink-0 flex items-center justify-center cursor-pointer\"\n title=\"${this.editLabel}\"\n @click=${this._handleEdit}\n >\n <axebow-icon iconName=\"edit_square\" iconColor=\"var(--axebow-tertiary)\" size=\"md\"></axebow-icon>\n </div>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private _handleToggle() {\n this.dispatchEvent(new CustomEvent('toggle', { bubbles: true, composed: true }));\n }\n\n private _handleEdit() {\n this.dispatchEvent(new CustomEvent('edit', { bubbles: true, composed: true }));\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-divider/axebow-divider.js';\nimport './axebow-summary-step-header.js';\n\n@customElement('axebow-summary-step')\nexport class AxebowSummaryStep extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Number }) stepNumber!: number;\n @property({ type: String }) stepTitle = '';\n @property({ type: Boolean }) valid = false;\n @property({ type: Boolean }) collapsed = false;\n @property({ type: Boolean }) visible = false;\n @property({ type: Boolean }) isEditing = false;\n @property({ type: Boolean }) hasWarning = false;\n /** Whether the user has reached this step yet. Unreached steps still render\n * their title and divider, just greyed out and without the expand affordance. */\n @property({ type: Boolean }) enabled = true;\n\n render() {\n if (!this.visible) return html``;\n\n return html`\n <axebow-summary-step-header\n .stepNumber=${this.stepNumber}\n .stepTitle=${this.stepTitle}\n .valid=${this.valid}\n .collapsed=${this.collapsed}\n .isEditing=${this.isEditing}\n .hasWarning=${this.hasWarning}\n .enabled=${this.enabled}\n @toggle=${this._handleToggle}\n @edit=${this._handleEdit}\n ></axebow-summary-step-header>\n ${!this.collapsed && this.enabled\n ? html`\n <div class=\"step-summary-body mt-2\">\n <slot></slot>\n </div>\n `\n : ''}\n <axebow-divider></axebow-divider>\n `;\n }\n\n private _handleToggle() {\n if (!this.enabled) return;\n this.dispatchEvent(\n new CustomEvent('toggle-step', {\n detail: { step: this.stepNumber },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleEdit() {\n this.dispatchEvent(\n new CustomEvent('edit-step', {\n detail: { step: this.stepNumber },\n bubbles: true,\n composed: true,\n })\n );\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '@shoelace-style/shoelace/dist/components/card/card.js';\n\n@customElement('axebow-summary-card')\nexport class AxebowSummaryCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n height: 100%;\n }\n sl-card {\n --border-color: transparent !important;\n border: none !important;\n }\n sl-card::part(base) {\n width: 100%;\n height: 100%;\n }\n sl-card::part(body) {\n height: 100%;\n }\n `,\n ];\n\n @property({ type: String }) title = 'Summary';\n @property({ type: String }) cardWidth = '24.125rem';\n @property({ type: String }) cardHeight = '';\n\n @state() isSummaryOpen = true;\n\n render() {\n return html`\n <div\n class=\"w-full lg:w-(--card-width) lg:sticky static top-25 h-auto ${this.cardHeight\n ? 'lg:min-h-(--card-height)'\n : 'lg:min-h-[calc(100vh-7.25rem)]'} rounded-md z-10 transition-all duration-300\"\n style=\"--card-width: ${this.cardWidth}; --card-height: ${this.cardHeight};\"\n >\n <sl-card\n class=\"w-full h-full shadow-none border-t border-l-0 border-r-0 border-b-0 rounded-none lg:shadow lg:border lg:rounded-md\"\n >\n <div class=\"h-full flex flex-col\">\n ${this._renderHeader()}\n <axebow-divider></axebow-divider>\n <div class=\"${this.isSummaryOpen ? '' : 'hidden'} lg:block flex-1 mt-4\">\n <slot></slot>\n </div>\n </div>\n </sl-card>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"flex items-center justify-between lg:cursor-default cursor-pointer\">\n <div class=\"flex-1 flex items-center justify-between gap-2\" @click=\"${this._toggleMobileSummary}\">\n <div class=\"flex items-center gap-2\">\n <h4 class=\"text-xl font-semibold text-(--axebow-primary)\">${this.title}</h4>\n <axebow-icon\n class=\"lg:hidden\"\n iconName=\"${this.isSummaryOpen ? 'keyboard_arrow_up' : 'keyboard_arrow_down'}\"\n ></axebow-icon>\n </div>\n </div>\n <div class=\"flex items-center gap-2\">\n <slot name=\"header-actions\"></slot>\n </div>\n </div>\n `;\n }\n\n private _toggleMobileSummary() {\n if (window.innerWidth < 1024) {\n this.isSummaryOpen = !this.isSummaryOpen;\n }\n }\n\n public scrollToBottom() {\n const scrollContainers = this.shadowRoot?.querySelectorAll('.overflow-y-auto');\n scrollContainers?.forEach((container) => {\n container.scrollTo({ top: container.scrollHeight, behavior: 'smooth' });\n });\n }\n}\n","import { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport interface SummaryLimitsData {\n cpu: { max: number; min: number };\n memory: { max: number; min: number };\n volatileStorage: { max: number; min: number };\n nonReplicatedStorage: { max: number; min: number };\n persistentStorage: { max: number; min: number };\n}\n\nexport interface SummaryLimitsLabels {\n hardLimits: string;\n softLimits: string;\n vcpus: string;\n memory: string;\n volatile: string;\n nonReplicated: string;\n persistent: string;\n}\n\n@customElement('axebow-summary-limits')\nexport class AxebowSummaryLimits extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n width: 100%;\n }\n `,\n ];\n\n @property({ type: Object }) limits!: SummaryLimitsData;\n @property({ type: Array }) supportedStorage: string[] = [];\n @property({ type: Object }) labels!: SummaryLimitsLabels;\n @property({ type: Boolean }) showSoftErrors = false;\n\n private renderSection(title: string, limitKey: 'max' | 'min') {\n const isMin = limitKey === 'min';\n const isCpuError = isMin && this.showSoftErrors && this.limits.cpu && this.limits.cpu.min > this.limits.cpu.max;\n const isMemError = isMin && this.showSoftErrors && this.limits.memory && this.limits.memory.min > this.limits.memory.max;\n const isVolatileError =\n isMin &&\n this.showSoftErrors &&\n this.limits.volatileStorage &&\n this.limits.volatileStorage.min > this.limits.volatileStorage.max;\n const isNonRepError =\n isMin &&\n this.showSoftErrors &&\n this.limits.nonReplicatedStorage &&\n this.limits.nonReplicatedStorage.min > this.limits.nonReplicatedStorage.max;\n const isPersError =\n isMin &&\n this.showSoftErrors &&\n this.limits.persistentStorage &&\n this.limits.persistentStorage.min > this.limits.persistentStorage.max;\n\n return html`\n <div class=\"w-full flex flex-col gap-2\">\n <p class=\"font-semibold text-base m-0\">${title}</p>\n <div class=\"flex gap-1.5\">\n <div class=\"w-41 h-4.25 text-base flex items-center gap-1\">\n <span>${this.labels.vcpus}:</span>\n <span class=\"${isCpuError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${this.limits.cpu ? this.limits.cpu[limitKey] : 0}</span>\n ${isCpuError ? html`<axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>` : ''}\n </div>\n <div class=\"w-41 h-4.25 text-base flex items-center gap-1\">\n <span>${this.labels.memory}</span>\n <span class=\"${isMemError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${this.limits.memory ? this.limits.memory[limitKey] : 0} GB</span>\n ${isMemError ? html`<axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>` : ''}\n </div>\n </div>\n ${this.supportedStorage.includes('volatile') && this.limits.volatileStorage\n ? html`\n <p class=\"text-base m-0 flex items-center gap-1\">\n <span>${this.labels.volatile}:</span>\n <span class=\"${isVolatileError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${this.limits.volatileStorage[limitKey]} GB</span>\n ${isVolatileError ? html`<axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>` : ''}\n </p>\n `\n : ''}\n ${this.supportedStorage.includes('nonReplicated') && this.limits.nonReplicatedStorage\n ? html`\n <p class=\"text-base m-0 flex items-center gap-1\">\n <span>${this.labels.nonReplicated}:</span>\n <span class=\"${isNonRepError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${this.limits.nonReplicatedStorage[limitKey]} GB</span>\n ${isNonRepError ? html`<axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>` : ''}\n </p>\n `\n : ''}\n ${this.supportedStorage.includes('persistent') && this.limits.persistentStorage\n ? html`\n <p class=\"text-base m-0 flex items-center gap-1\">\n <span>${this.labels.persistent}:</span>\n <span class=\"${isPersError ? 'text-(--axebow-error)' : 'text-(--axebow-gray)'}\">${this.limits.persistentStorage[limitKey]} GB</span>\n ${isPersError ? html`<axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"md\"></axebow-icon>` : ''}\n </p>\n `\n : ''}\n </div>\n `;\n }\n\n render() {\n if (!this.limits || !this.labels) return html``;\n\n return html`\n ${this.renderSection(this.labels.hardLimits, 'max')}\n <axebow-divider></axebow-divider>\n ${this.renderSection(this.labels.softLimits, 'min')}\n `;\n }\n}\n","import { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport '../axebow-divider/axebow-divider.js';\n\nexport interface SummaryFlavorsLabels {\n runtimePlane: string;\n numberOfVms: string;\n controlPlane: string;\n highAvailable: string;\n volatile: string;\n nonReplPersistent: string;\n persistentReplicated: string;\n yes: string;\n no: string;\n}\n\n@customElement('axebow-summary-flavors')\nexport class AxebowSummaryFlavors extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ type: Object }) flavors: Record<string, string[]> | undefined;\n @property({ type: Object }) nodes: { max?: number; min?: number } | undefined;\n @property({ type: Boolean }) highAvailable: boolean | undefined;\n @property({ type: Boolean }) autoscale: boolean | undefined;\n @property({ type: Array }) supportedStorage: string[] = [];\n @property({ type: Boolean }) hasFlavors: boolean = true;\n @property({ type: Object }) labels!: SummaryFlavorsLabels;\n\n render() {\n if (!this.labels) return html``;\n\n return html`\n ${this.hasFlavors ||\n this.nodes ||\n this.highAvailable !== undefined ||\n this.autoscale !== undefined ||\n this.supportedStorage.some((s) => (this.flavors as Record<string, string[]>)?.[s]?.[0])\n ? html`\n <div class=\"flex w-full gap-[2%]\">\n <div class=\"flex-1 flex flex-col gap-2\">\n ${this.hasFlavors && this.flavors?.small?.[0] ? html`<p>${this.labels.runtimePlane}</p>` : ''}\n <p>${this.labels.numberOfVms}</p>\n ${this.hasFlavors && this.flavors?.medium?.[0] ? html`<p>${this.labels.controlPlane}</p>` : ''}\n ${this.highAvailable !== undefined ? html`<p>${this.labels.highAvailable}</p>` : ''}\n </div>\n <div class=\"flex-1 flex flex-col gap-2\">\n ${this.hasFlavors && this.flavors?.small?.[0]\n ? html`<p><span class=\"text-(--axebow-primary)\">${this.flavors?.small?.[0]}</span></p>`\n : ''}\n <p><span class=\"text-(--axebow-primary)\">${this.nodes?.max || '0'}</span></p>\n\n ${this.hasFlavors && this.flavors?.medium?.[0]\n ? html`<p><span class=\"text-(--axebow-primary)\">${this.flavors?.medium?.[0]}</span></p>`\n : ''}\n ${this.highAvailable !== undefined\n ? html`<p>\n <span class=\"text-(--axebow-primary)\"\n >${this.highAvailable ? this.labels.yes : this.labels.no}</span\n >\n </p>`\n : ''}\n </div>\n </div>\n ${this.supportedStorage.some((s) => (this.flavors as Record<string, string[]>)?.[s]?.[0])\n ? html`\n <axebow-divider type=\"dashed\"></axebow-divider>\n <div class=\"flex w-full gap-[2%] mt-2\">\n <div class=\"flex-1 flex flex-col gap-2\">\n ${this.supportedStorage.includes('volatile') && this.flavors?.volatile?.[0]\n ? html`<p>${this.labels.volatile}</p>`\n : ''}\n ${this.supportedStorage.includes('nonReplicated') && this.flavors?.nonReplicated?.[0]\n ? html`<p>${this.labels.nonReplPersistent}</p>`\n : ''}\n ${this.supportedStorage.includes('persistent') && this.flavors?.persistent?.[0]\n ? html`<p>${this.labels.persistentReplicated}</p>`\n : ''}\n </div>\n <div class=\"flex-1 flex flex-col gap-2\">\n ${this.supportedStorage.includes('volatile') && this.flavors?.volatile?.[0]\n ? html`<p>\n <span class=\"text-(--axebow-primary)\">${this.flavors?.volatile?.[0]}</span>\n </p>`\n : ''}\n ${this.supportedStorage.includes('nonReplicated') && this.flavors?.nonReplicated?.[0]\n ? html`<p>\n <span class=\"text-(--axebow-primary)\">${this.flavors?.nonReplicated?.[0]}</span>\n </p>`\n : ''}\n ${this.supportedStorage.includes('persistent') && this.flavors?.persistent?.[0]\n ? html`<p>\n <span class=\"text-(--axebow-primary)\">${this.flavors?.persistent?.[0]}</span>\n </p>`\n : ''}\n </div>\n </div>\n `\n : ''}\n `\n : ''}\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../../axebow-icon/axebow-icon.js';\n\n@customElement('deploy-modal-header')\nexport class DeployModalHeader extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 76.125rem;\n height: 7.6875rem;\n }\n `,\n ];\n\n private _onClose() {\n this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));\n }\n\n render() {\n return html`\n <div\n class=\"w-full h-full box-border pt-4 pr-4 pb-3.5 pl-5 border-b border-solid border-(--axebow-light-gray) flex items-start justify-between gap-4 overflow-hidden\"\n >\n <div class=\"flex-1 min-w-0\">\n <slot></slot>\n </div>\n <div class=\"w-6 h-6 shrink-0 flex items-center justify-center cursor-pointer\" @click=${this._onClose}>\n <axebow-icon iconName=\"cancel\" iconColor=\"var(--axebow-gray)\" size=\"md\"></axebow-icon>\n </div>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('deploy-modal-footer')\nexport class DeployModalFooter extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n width: 76.125rem;\n height: 4.5rem;\n }\n `,\n ];\n\n render() {\n return html`\n <div\n class=\"w-full h-full box-border pt-3 pr-5 pb-4 pl-5 border-t border-solid border-(--axebow-light-gray) flex items-center justify-between gap-4\"\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, css, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport './parts/deploy-modal-header.js';\nimport './parts/deploy-modal-footer.js';\n\n@customElement('deploy-modal-component')\nexport class DeployModalComponent extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n .content-scroll {\n scrollbar-gutter: stable;\n }\n ::-webkit-scrollbar {\n width: 0.625rem;\n height: 0.625rem;\n }\n ::-webkit-scrollbar-track {\n background: transparent;\n border: none;\n }\n ::-webkit-scrollbar-thumb {\n background-color: #dbdde4;\n border: none;\n border-radius: 8.854375rem;\n min-width: 12.8125rem;\n min-height: 12.8125rem;\n }\n `,\n ];\n\n @property({ type: String }) width = '76.1875rem';\n @property({ type: String }) height = '44.875rem';\n\n render() {\n return html`\n <div class=\"flex flex-col box-border overflow-hidden\" style=\"width:${this.width};height:${this.height};\">\n <slot name=\"header\"></slot>\n <div class=\"content-scroll flex-1 min-h-0 overflow-y-auto overflow-x-hidden pt-6 pr-4.5 pb-6 pl-4\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../deploy-modal-component/deploy-modal-component.js';\n\n@customElement('deploy-page-body')\nexport class DeployPageBody extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n render() {\n return html`\n <deploy-modal-component width=\"73.1875rem\" height=\"48.1875rem\">\n <slot></slot>\n </deploy-modal-component>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { LitElement, html, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport '../deploy-modal-component/deploy-modal-component.js';\n\n@customElement('custom-home-page-body')\nexport class CustomHomePageBody extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n render() {\n return html`\n <deploy-modal-component width=\"73.5rem\" height=\"66.270625rem\">\n <slot></slot>\n </deploy-modal-component>\n `;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { css, html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-status')\nexport class AxebowStatus extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n width: 100%;\n }\n `\n ];\n\n @property({ type: Boolean }) showTrash = false;\n @property({ type: String }) statusText = 'Free';\n @property({ type: String }) statusColor = 'var(--axebow-success)';\n @property({ type: Boolean }) deleting = false;\n\n @state() private _isTrashHovered = false;\n\n private _handleDelete(e: Event) {\n if (this.deleting) return;\n e.stopPropagation();\n this.dispatchEvent(new CustomEvent('delete', { bubbles: true, composed: true }));\n }\n\n private _handleTrashMouseEnter() {\n if (this.deleting) return;\n this._isTrashHovered = true;\n this.dispatchEvent(new CustomEvent('trash-hover', { detail: { hovered: true }, bubbles: true, composed: true }));\n }\n\n private _handleTrashMouseLeave() {\n if (this.deleting) return;\n this._isTrashHovered = false;\n this.dispatchEvent(new CustomEvent('trash-hover', { detail: { hovered: false }, bubbles: true, composed: true }));\n }\n\n render() {\n const isDeleting = this.deleting;\n const currentText = isDeleting ? 'Deleting' : this.statusText;\n const currentColor = isDeleting || this._isTrashHovered ? 'var(--axebow-error)' : this.statusColor;\n const showTrashIcon = this.showTrash && !isDeleting;\n\n return html`\n <div class=\"flex items-center justify-between h-fit gap-2\">\n <div class=\"flex items-center gap-1.5\">\n ${currentColor ? html`<div class=\"h-2 w-2 rounded-full shrink-0 transition-colors duration-200\" style=\"background-color: ${currentColor};\"></div>` : \"\"}\n <span class=\"font-medium text-(--axebow-strong-gray)\">${currentText}</span>\n </div>\n ${showTrashIcon ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-error) hover:text-(--axebow-gray) transition-colors\"\n @mouseenter=${this._handleTrashMouseEnter}\n @mouseleave=${this._handleTrashMouseLeave}\n @click=${this._handleDelete}\n >\n <axebow-icon iconName=\"delete\" iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n ` : \"\"}\n </div>\n `;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\n\nexport type FormPanelFieldStyle = 'Placeholder' | 'Filled';\n\n@customElement('axebow-form-panel-field')\nexport class AxebowFormPanelField extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: inline-block;\n width: 234px;\n position: relative;\n }\n .field-container {\n width: 100%;\n min-height: 51.33px;\n border-radius: 0.375rem;\n padding: 6px 8px;\n box-sizing: border-box;\n transition: border-color 0.2s ease, background-color 0.2s ease;\n }\n `,\n ];\n\n @property({ type: String }) styleVariant: FormPanelFieldStyle = 'Placeholder';\n @property({ type: Boolean }) disabled = false;\n @property({ type: String }) label = 'Field label';\n @property({ type: String }) value = '';\n @property({ type: Boolean }) mandatory = true;\n @property({ type: Boolean }) showDropdown = false;\n @property({ type: Boolean }) showCloseIcon = false;\n @property({ type: String }) placeholderCopy = 'Placeholder (examples)';\n @property({ type: Boolean }) showActionIcon = false;\n @property({ type: String }) actionIcon = 'content_copy';\n @property({ type: String }) copyValue = '';\n @property({ type: Boolean }) showSecondaryActionIcon = false;\n @property({ type: String }) secondaryActionIcon = 'open_in_new';\n\n /** Array of dropdown options (vector of strings) */\n @property({ type: Array }) options: string[] = [];\n\n @state() private _isDropdownOpen = false;\n @state() private _openUpwards = false;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener('click', this._handleOutsideClick);\n window.addEventListener('resize', this._handleWindowChange);\n window.addEventListener('scroll', this._handleWindowChange, true);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener('click', this._handleOutsideClick);\n window.removeEventListener('resize', this._handleWindowChange);\n window.removeEventListener('scroll', this._handleWindowChange, true);\n }\n\n private _handleWindowChange = () => {\n if (this._isDropdownOpen) {\n this._checkPlacement();\n }\n };\n\n private _checkPlacement() {\n const rect = this.getBoundingClientRect();\n const estimatedHeight = Math.min((this.options?.length || 0) * 36 + 10, 200);\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n this._openUpwards = spaceBelow < estimatedHeight && spaceAbove > spaceBelow;\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n if (this._isDropdownOpen && !e.composedPath().includes(this)) {\n this._isDropdownOpen = false;\n }\n };\n\n private get _isSelector(): boolean {\n return Boolean(this.showDropdown || (this.options && this.options.length > 0));\n }\n\n private _handleFocus(_e: Event) {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('focus', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleBlur(_e: Event) {\n if (this.disabled) return;\n this.dispatchEvent(\n new CustomEvent('blur', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleInput(e: Event) {\n if (this.disabled || this._isSelector) return;\n const target = e.target as HTMLInputElement;\n this.value = target.value;\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleKeyDown(e: KeyboardEvent) {\n if (this.disabled || !this._isSelector) return;\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault();\n this._handleDropdownClick(e);\n } else if (e.key === 'Escape' && this._isDropdownOpen) {\n e.preventDefault();\n this._isDropdownOpen = false;\n }\n }\n\n private _handleActionClick(e: Event) {\n e.stopPropagation();\n const textToCopy = this.copyValue !== undefined && this.copyValue !== '' ? this.copyValue : this.value;\n if (textToCopy) {\n navigator.clipboard.writeText(textToCopy);\n }\n this.dispatchEvent(\n new CustomEvent('action-click', {\n detail: { value: textToCopy },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleSecondaryActionClick(e: Event) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent('secondary-action-click', {\n detail: { value: this.value },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleCloseClick(e: Event) {\n e.stopPropagation();\n this.value = '';\n this.dispatchEvent(\n new CustomEvent('close-click', {\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleDropdownClick(e: Event) {\n e.stopPropagation();\n if (this.disabled) return;\n if (this.options && this.options.length > 0) {\n if (!this._isDropdownOpen) {\n this._checkPlacement();\n }\n this._isDropdownOpen = !this._isDropdownOpen;\n }\n this.dispatchEvent(\n new CustomEvent('dropdown-click', {\n detail: { isOpen: this._isDropdownOpen },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _selectOption(opt: string, e: Event) {\n e.stopPropagation();\n this.value = opt;\n this._isDropdownOpen = false;\n\n this.dispatchEvent(\n new CustomEvent('select', {\n detail: { value: opt },\n bubbles: true,\n composed: true,\n })\n );\n this.dispatchEvent(\n new CustomEvent('change', {\n detail: { value: opt },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n const isSelector = this._isSelector;\n const isFilled = (this.styleVariant && this.styleVariant.toLowerCase() === 'filled') || !!this.value;\n const bgClass = this.disabled\n ? 'bg-(--axebow-base) border border-solid border-(--axebow-border-gray)'\n : 'bg-white border border-solid border-(--axebow-border-gray) focus-within:border-(--axebow-tertiary)';\n const textColor = this.disabled\n ? 'text-(--axebow-gray)'\n : isFilled\n ? 'text-(--axebow-strong-gray)'\n : 'text-(--axebow-gray)';\n\n return html`\n <div class=\"relative w-full\">\n <!-- Field Container -->\n <div\n class=\"field-container border flex items-center justify-between gap-2 ${bgClass} ${isSelector && !this.disabled ? 'cursor-pointer select-none' : ''}\"\n @click=${isSelector ? this._handleDropdownClick : null}\n @keydown=${this._handleKeyDown}\n >\n <div class=\"flex flex-col justify-center flex-1 min-w-0\">\n <!-- Top Label -->\n <div class=\"flex items-center text-xs text-(--axebow-gray) leading-tight select-none\">\n ${this.mandatory ? html`<span class=\"text-(--axebow-error) font-bold mr-0.5\">*</span>` : ''}\n <span class=\"truncate\">${this.label}</span>\n </div>\n\n <!-- Value / Input -->\n <input\n type=\"text\"\n class=\"w-full bg-transparent border-0 p-0 text-sm font-normal ${textColor} focus:outline-none truncate ${isSelector && !this.disabled ? 'cursor-pointer select-none' : ''}\"\n .value=${this.value}\n placeholder=${this.placeholderCopy}\n ?disabled=${this.disabled}\n ?readonly=${isSelector}\n @input=${this._handleInput}\n @focus=${this._handleFocus}\n @blur=${this._handleBlur}\n />\n </div>\n\n <!-- Action Icons Suffix -->\n <div class=\"flex items-center gap-1 shrink-0\">\n ${this.showSecondaryActionIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleSecondaryActionClick}\n >\n <axebow-icon iconName=${this.secondaryActionIcon} iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${this.showActionIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleActionClick}\n >\n <axebow-icon iconName=${this.actionIcon} iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${this.showCloseIcon\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-gray) hover:text-black transition-colors\"\n @click=${this._handleCloseClick}\n >\n <axebow-icon iconName=\"cancel\" iconColor=\"currentColor\" size=\"lg\"></axebow-icon>\n </button>\n `\n : ''}\n ${isSelector\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n @click=${this._handleDropdownClick}\n >\n <axebow-icon\n iconName=\"keyboard_arrow_down\"\n iconColor=\"currentColor\"\n size=\"xl\"\n class=\"transition-transform duration-200 ${this._isDropdownOpen ? 'rotate-180' : ''}\"\n ></axebow-icon>\n </button>\n `\n : ''}\n </div>\n </div>\n\n <!-- Dropdown Menu Overlay -->\n ${isSelector && this._isDropdownOpen && this.options && this.options.length > 0\n ? html`\n <div\n class=\"absolute left-0 ${this._openUpwards ? 'bottom-full mb-1' : 'top-full mt-1'} w-full bg-white border border-solid border-(--axebow-border-gray) rounded-md shadow-lg z-50 max-h-48 overflow-y-auto py-1 box-border\"\n >\n ${this.options.map((opt) => {\n const isSelected = opt === this.value;\n return html`\n <div\n class=\"px-3 py-1.5 text-sm text-(--axebow-strong-gray) hover:bg-(--axebow-base) cursor-pointer transition-colors flex items-center justify-between ${isSelected ? 'font-semibold bg-(--axebow-base) text-(--axebow-tertiary)' : ''}\"\n @click=${(e: Event) => this._selectOption(opt, e)}\n >\n <span>${opt}</span>\n ${isSelected ? html`<axebow-icon iconName=\"check\" iconColor=\"var(--axebow-tertiary)\" size=\"sm\"></axebow-icon>` : ''}\n </div>\n `;\n })}\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'axebow-form-panel-field': AxebowFormPanelField;\n }\n}\n","import tailwindCss from \"../../styles/tailwind.css?inline\";\nimport { LitElement, unsafeCSS, html, css } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport \"../axebow-icon/axebow-icon.js\";\nimport \"../axebow-status/axebow-status.js\";\nimport \"../axebow-form-panel-field/axebow-form-panel-field.js\";\nimport type {\n ResourceBoxFormItem,\n ResourceBoxFormItemMenuOption,\n} from \"./axebow-box-form.models.js\";\n\nexport * from \"./axebow-box-form.models.js\";\n\n@customElement(\"axebow-resource-box-form\")\nexport class AxebowResourceBoxForm extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: flex;\n flex-direction: column;\n }\n `,\n ];\n\n @property({ type: String }) statusText = \"Free\";\n @property({ type: String }) statusColor = \"var(--axebow-success)\";\n @property({ type: Boolean }) showTrash = true;\n @property({ type: Boolean }) deleting = false;\n @property({ type: Array }) items: ResourceBoxFormItem[] = [];\n\n @state() private _openMenuId: string | null = null;\n @state() private _menuOpenUpwards = false;\n @state() private _isTrashHovered = false;\n\n connectedCallback() {\n super.connectedCallback();\n window.addEventListener(\"click\", this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this._handleOutsideClick);\n }\n\n private _handleOutsideClick = (e: MouseEvent) => {\n const path = e.composedPath();\n if (!path.includes(this)) {\n this._closeMenu();\n }\n };\n\n private _handleTrashHover = (e: CustomEvent<{ hovered: boolean }>) => {\n this._isTrashHovered = Boolean(e.detail?.hovered);\n };\n\n private _checkMenuPlacement(target?: EventTarget | null) {\n const targetEl = (target as HTMLElement) || this;\n const rect = targetEl.getBoundingClientRect();\n const estimatedHeight = 250;\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n this._menuOpenUpwards = spaceBelow < estimatedHeight && spaceAbove > spaceBelow;\n }\n\n private _copyToClipboard(text: string, e?: Event) {\n e?.stopPropagation();\n if (!text) return;\n navigator.clipboard.writeText(text);\n this.dispatchEvent(\n new CustomEvent(\"copy\", {\n detail: { text },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _openLink(url?: string, e?: Event) {\n e?.stopPropagation();\n if (!url) return;\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n this.dispatchEvent(\n new CustomEvent(\"link-click\", {\n detail: { url },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private _handleDelete() {\n this.dispatchEvent(\n new CustomEvent(\"delete\", { bubbles: true, composed: true }),\n );\n }\n\n private _downloadFile(content: string, fileName: string) {\n if (!content) return;\n const blob = new Blob([content], { type: \"text/plain\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = fileName || \"file.txt\";\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n private _closeMenu() {\n this._openMenuId = null;\n }\n\n private _toggleMenu(\n item: ResourceBoxFormItem,\n hasContent: boolean,\n e: Event,\n ) {\n e.stopPropagation();\n\n if (!item.menuId) return;\n\n if (!hasContent) {\n // If no content, find the first custom action and emit it, or emit a generic add event\n const customOption = item.menuOptions?.find(\n (opt) => opt.action === \"custom\" || !opt.action,\n );\n if (customOption) {\n this.dispatchEvent(\n new CustomEvent(\"item-menu-select\", {\n detail: { item, option: customOption },\n bubbles: true,\n composed: true,\n }),\n );\n }\n this._closeMenu();\n return;\n }\n\n if (this._openMenuId === item.menuId) {\n this._closeMenu();\n } else {\n this._checkMenuPlacement(e.currentTarget);\n this._openMenuId = item.menuId;\n }\n }\n\n private _handleMenuOption(\n item: ResourceBoxFormItem,\n option: ResourceBoxFormItemMenuOption,\n textToCopy: string,\n e: Event,\n ) {\n e.stopPropagation();\n this._closeMenu();\n\n const action = option.action || \"custom\";\n\n switch (action) {\n case \"copy\":\n this._copyToClipboard(textToCopy);\n break;\n case \"download\":\n this._downloadFile(textToCopy, option.fileName || \"file.txt\");\n break;\n case \"custom\":\n default:\n this.dispatchEvent(\n new CustomEvent(\"item-menu-select\", {\n detail: { item, option },\n bubbles: true,\n composed: true,\n }),\n );\n break;\n }\n }\n\n private _renderField(item: ResourceBoxFormItem) {\n const itemType = item.type || \"enabled\";\n const textToCopy =\n item.copyValue !== undefined ? item.copyValue : item.value;\n const hasMenu =\n !!item.menuOptions && item.menuOptions.length > 0 && !!item.menuId;\n const hasContent = !!textToCopy;\n const isMenuOpen = this._openMenuId === item.menuId && hasContent;\n\n if (itemType === \"text\") {\n return html`\n <div class=\"flex items-start justify-between gap-2 w-full relative pt-1\">\n <div class=\"flex flex-col gap-0.5 min-w-0 flex-1\">\n <span\n class=\"text-sm font-semibold text-(--axebow-strong-gray) leading-tight flex items-center gap-1 break-all\"\n >\n ${item.required\n ? html`<span class=\"text-(--axebow-error) font-bold\">* </span>`\n : \"\"}\n ${item.tag}\n </span>\n ${item.value\n ? html`<p\n class=\"m-0 text-sm text-(--axebow-gray) leading-snug break-all font-normal\"\n >\n ${item.value}\n </p>`\n : \"\"}\n </div>\n <div class=\"flex items-center gap-1 shrink-0 pt-0.5\">\n ${hasMenu\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Options\"\n @click=${(e: Event) => this._toggleMenu(item, hasContent, e)}\n >\n <axebow-icon\n iconName=\"add_circle\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n ${isMenuOpen\n ? html`\n <div\n class=\"absolute right-0 ${this._menuOpenUpwards ? 'bottom-full mb-1' : 'top-full mt-1'} z-50 min-w-50 bg-white rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.1)] border border-solid border-(--axebow-border-gray) py-1.5 flex flex-col axebow-scrollbar\"\n style=\"max-height: 250px; overflow-y: auto;\"\n >\n ${item.menuOptions!.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2.5 px-4 py-2 cursor-pointer hover:bg-(--axebow-anti-flash-white) transition-colors\"\n @click=${(e: Event) =>\n this._handleMenuOption(\n item,\n option,\n textToCopy,\n e,\n )}\n >\n <axebow-icon\n .iconName=${option.icon}\n .iconColor=${option.variant === \"danger\"\n ? \"var(--axebow-error)\"\n : \"var(--axebow-primary)\"}\n size=\"md\"\n ></axebow-icon>\n <span\n class=\"text-sm font-medium ${option.variant ===\n \"danger\"\n ? \"text-(--axebow-error)\"\n : \"text-(--axebow-primary)\"}\"\n >\n ${option.label}\n </span>\n </div>\n `,\n )}\n </div>\n `\n : \"\"}\n `\n : item.canCopy\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Copy\"\n @click=${(e: Event) => this._copyToClipboard(textToCopy, e)}\n >\n <axebow-icon\n iconName=\"content_copy\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n `\n : \"\"}\n ${item.canLink && !hasMenu\n ? html`\n <button\n type=\"button\"\n class=\"p-0 border-0 bg-transparent cursor-pointer flex items-center justify-center text-(--axebow-tertiary) hover:text-(--axebow-gray) transition-colors\"\n title=\"Open link\"\n @click=${(e: Event) =>\n this._openLink(item.linkHref || item.value, e)}\n >\n <axebow-icon\n iconName=\"open_in_new\"\n iconColor=\"currentColor\"\n size=\"lg\"\n ></axebow-icon>\n </button>\n `\n : \"\"}\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"relative w-full\">\n <axebow-form-panel-field\n class=\"w-full\"\n style=\"width: 100%;\"\n .label=${item.tag}\n .value=${item.value || \"\"}\n .copyValue=${item.copyValue !== undefined ? item.copyValue : \"\"}\n .mandatory=${Boolean(item.required)}\n ?disabled=${itemType === \"disabled\"}\n .showActionIcon=${Boolean(hasMenu || item.canCopy)}\n actionIcon=${hasMenu ? \"add_circle\" : \"content_copy\"}\n .showSecondaryActionIcon=${Boolean(item.canLink)}\n secondaryActionIcon=\"open_in_new\"\n .showDropdown=${Boolean(item.options && item.options.length > 0)}\n .options=${item.options || []}\n @focus=${(_e: CustomEvent) => {\n this.dispatchEvent(\n new CustomEvent(\"item-focus\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @blur=${(_e: CustomEvent) => {\n this.dispatchEvent(\n new CustomEvent(\"item-blur\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @change=${(e: CustomEvent) => {\n item.value = e.detail?.value ?? (e.target as any).value;\n this.dispatchEvent(\n new CustomEvent(\"item-change\", {\n detail: { item },\n bubbles: true,\n composed: true,\n }),\n );\n }}\n @action-click=${(e: Event) => {\n if (hasMenu) {\n this._toggleMenu(item, hasContent, e);\n } else {\n this._copyToClipboard(textToCopy, e);\n }\n }}\n @secondary-action-click=${(e: Event) =>\n this._openLink(item.linkHref || item.value, e)}\n ></axebow-form-panel-field>\n ${hasMenu && isMenuOpen\n ? html`\n <div\n class=\"absolute right-0 ${this._menuOpenUpwards ? 'bottom-full mb-1' : 'top-full mt-1'} z-50 min-w-50 bg-white rounded-md shadow-[0_4px_12px_rgba(0,0,0,0.1)] border border-solid border-(--axebow-border-gray) py-1.5 flex flex-col axebow-scrollbar\"\n style=\"max-height: 250px; overflow-y: auto;\"\n >\n ${item.menuOptions!.map(\n (option) => html`\n <div\n class=\"flex items-center gap-2.5 px-4 py-2 cursor-pointer hover:bg-(--axebow-anti-flash-white) transition-colors\"\n @click=${(e: Event) =>\n this._handleMenuOption(item, option, textToCopy, e)}\n >\n <axebow-icon\n .iconName=${option.icon}\n .iconColor=${option.variant === \"danger\"\n ? \"var(--axebow-error)\"\n : \"var(--axebow-primary)\"}\n size=\"md\"\n ></axebow-icon>\n <span\n class=\"text-sm font-medium ${option.variant === \"danger\"\n ? \"text-(--axebow-error)\"\n : \"text-(--axebow-primary)\"}\"\n >\n ${option.label}\n </span>\n </div>\n `,\n )}\n </div>\n `\n : \"\"}\n </div>\n `;\n }\n\n render() {\n const isDeleting = this.deleting;\n const isDanger = isDeleting || this._isTrashHovered;\n const computedStatusColor = isDanger\n ? \"var(--axebow-error)\"\n : this.statusColor;\n const computedStatusText = isDeleting\n ? \"Deleting\"\n : this.statusText;\n const borderClass = isDanger\n ? \"border border-solid border-[var(--axebow-error)]\"\n : \"border border-solid border-transparent\";\n const disabledClass = isDeleting\n ? \"pointer-events-none opacity-70 select-none\"\n : \"\";\n\n return html`\n <div\n class=\"flex flex-col gap-3 w-70 h-full p-4 bg-white rounded-md ${borderClass} ${disabledClass} axebow-shadow-hover box-border transition-colors duration-200\"\n >\n <!-- Top Status Header -->\n <axebow-status\n .statusText=${computedStatusText}\n .statusColor=${computedStatusColor}\n ?showTrash=${this.showTrash && !isDeleting}\n ?deleting=${this.deleting}\n @trash-hover=${this._handleTrashHover}\n @delete=${this._handleDelete}\n ></axebow-status>\n\n <!-- Form Fields List -->\n <div class=\"flex flex-col gap-2.5 w-full\">\n ${this.items && this.items.length > 0\n ? this.items.map((item) =>\n this._renderField(\n isDeleting && item.type !== \"text\" ? { ...item, type: \"disabled\" } : item,\n ),\n )\n : html`\n <div\n class=\"p-3 border border-dashed border-(--axebow-border-gray) rounded-md text-center text-(--axebow-gray) text-xs\"\n >\n No items configured.\n </div>\n `}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"axebow-resource-box-form\": AxebowResourceBoxForm;\n }\n}\n","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-manage-hyperlinks/axebow-manage-hyperlinks.js';\n\nexport interface BoxSectionHyperlink {\n id?: string;\n text: string;\n icon?: string;\n color?: string;\n disabled?: boolean;\n onClick?: () => void;\n}\n\n@customElement('axebow-box-section')\nexport class AxebowBoxSection extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) title = '';\n @property({ type: Array }) hyperlinks: BoxSectionHyperlink[] = [];\n\n // Fallback single hyperlink properties for convenience\n @property({ type: Boolean }) showHyperlink = false;\n @property({ type: String }) hyperlinkText = '';\n @property({ type: String }) hyperlinkIcon = '';\n @property({ type: String }) hyperlinkColor = '';\n @property({ type: Boolean }) hyperlinkDisabled = false;\n\n private _handleItemClick(item: BoxSectionHyperlink, index: number) {\n if (item.onClick) {\n item.onClick();\n }\n this.dispatchEvent(new CustomEvent('hyperlink-click', {\n bubbles: true,\n composed: true,\n detail: { item, index, text: item.text }\n }));\n }\n\n render() {\n const itemsToRender: BoxSectionHyperlink[] = this.hyperlinks.length > 0\n ? this.hyperlinks\n : (this.showHyperlink || Boolean(this.hyperlinkText))\n ? [{\n text: this.hyperlinkText,\n icon: this.hyperlinkIcon,\n color: this.hyperlinkColor,\n disabled: this.hyperlinkDisabled\n }]\n : [];\n\n return html`\n <div class=\"flex flex-col rounded-md p-5 gap-4 bg-white\">\n <div class=\"w-full flex justify-between items-center border-b border-solid border-[#DBDDE4] pb-3 gap-2\">\n <span class=\"font-semibold uppercase text-(--axebow-primary)\">${this.title}</span>\n <slot name=\"hyperlink\">\n ${itemsToRender.length > 0\n ? html`\n <div class=\"flex items-center gap-4\">\n ${itemsToRender.map((item, index) => html`\n <axebow-manage-hyperlinks\n text=\"${item.text}\"\n icon=\"${item.icon}\"\n color=\"${item.color ?? ''}\"\n ?disabled=${Boolean(item.disabled)}\n @hyperlink-click=${() => this._handleItemClick(item, index)}\n ></axebow-manage-hyperlinks>\n `)}\n </div>\n `\n : ''\n }\n </slot>\n </div>\n <slot></slot>\n </div>`;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport '../axebow-icon/axebow-icon.js';\n\n@customElement('axebow-copy-box')\nexport class AxebowCopyBox extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: String }) value = '';\n @property({ type: String }) copyValue = '';\n @property({ type: String }) iconName = 'content_copy';\n @property({ type: String }) size = 'lg';\n @property({ type: Boolean }) disabled = false;\n\n @state() private _copied = false;\n\n private async _handleCopy(e: MouseEvent) {\n if (this.disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n let textToCopy = this.copyValue || this.value;\n\n if (!textToCopy) {\n const slot = this.shadowRoot?.querySelector('slot');\n if (slot) {\n const nodes = slot.assignedNodes({ flatten: true });\n textToCopy = nodes.map(n => n.textContent ?? '').join('').trim();\n }\n if (!textToCopy) {\n textToCopy = this.textContent?.trim() ?? '';\n }\n }\n\n if (textToCopy) {\n try {\n await navigator.clipboard.writeText(textToCopy);\n this._copied = true;\n setTimeout(() => {\n this._copied = false;\n }, 2000);\n } catch (err) {\n console.error('Failed to copy text:', err);\n }\n }\n\n this.dispatchEvent(new CustomEvent('copy', {\n bubbles: true,\n composed: true,\n detail: { value: textToCopy }\n }));\n }\n\n render() {\n const iconToShow = this._copied ? 'check' : this.iconName;\n\n return html`\n <div\n @click=${this._handleCopy}\n class=\"h-10 w-10 bg-(--axebow-tertiary) hover:bg-(--axebow-gray) rounded-r-md flex items-center justify-center cursor-pointer transition-colors select-none ${this.disabled ? 'opacity-50 cursor-not-allowed pointer-events-none' : ''}\"\n title=${this._copied ? 'Copied!' : 'Copy'}\n >\n <axebow-icon iconName=\"${iconToShow}\" iconColor=\"white\" size=\"${this.size}\"></axebow-icon>\n <slot class=\"hidden\"></slot>\n </div>\n `;\n }\n}","import tailwindCss from '../../styles/tailwind.css?inline';\nimport { html, LitElement, unsafeCSS } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport '../axebow-tab-selector/axebow-tab-selector.js';\n\nexport interface TabsSubmenuTab {\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Submenu navigation tab bar using axebow-tab-selector with variant=\"sections-tab\".\n * Active: tertiary color text + 2px bottom border.\n * Hover: tertiary color text.\n * Inactive: secondary/gray text + 1px light gray bottom border.\n * Emits 'tab-change' with { index } on selection.\n */\n@customElement('axebow-tabs-submenu')\nexport class AxebowTabsSubmenu extends LitElement {\n static styles = unsafeCSS(tailwindCss);\n\n @property({ type: Array }) tabs: TabsSubmenuTab[] = [];\n @property({ type: Number }) activeTab = 0;\n @property({ type: Boolean }) disabled = false;\n /** When true (default) tabs fill the full bar. When false they are compact at the start. */\n @property({ type: Boolean }) stretch = true;\n\n private _handleTabChange(e: CustomEvent<{ index: number }>) {\n this.activeTab = e.detail.index;\n this.dispatchEvent(new CustomEvent('tab-change', {\n bubbles: true,\n composed: true,\n detail: e.detail\n }));\n }\n\n render() {\n return html`\n <axebow-tab-selector\n variant=\"sections-tab\"\n .activeTab=${this.activeTab}\n ?disabled=${this.disabled}\n .stretch=${this.stretch}\n @tab-change=${this._handleTabChange}\n >\n ${this.tabs.map((tab, i) => html`\n <span slot=\"tab-label-${i}\" ?disabled=${tab.disabled ?? false}>\n ${tab.label}\n </span>\n `)}\n </axebow-tab-selector>\n `;\n }\n}","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '@shoelace-style/shoelace/dist/components/progress-bar/progress-bar.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-progress-bar')\nexport class AxebowProgressBar extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n sl-progress-bar {\n flex: 1;\n max-width: 120px;\n }\n :host([compact]) sl-progress-bar {\n flex: none;\n width: 3.75rem;\n max-width: 3.75rem;\n }\n `,\n ];\n\n @property({ type: Number }) current = 0;\n @property({ type: Number }) max = 100;\n @property({ type: Boolean, reflect: true }) compact = false;\n\n private _percentage(): number {\n return Math.min((this.current / this.max) * 100, 100);\n }\n\n private _indicatorColor(): string {\n const pct = (this.current / this.max) * 100;\n if (pct < 70) return 'var(--axebow-tertiary)';\n if (pct < 90) return 'var(--axebow-warning)';\n return 'var(--axebow-error)';\n }\n\n render() {\n return html`\n <div class=\"flex items-center ${this.compact ? 'gap-1.25' : 'gap-2 min-w-50'}\">\n <span class=\"${this.compact ? 'text-base' : 'text-sm min-w-10 text-right'} text-(--axebow-gray)\"\n >${this.current.toFixed(2)}</span\n >\n <sl-progress-bar\n style=\"--height: ${this.compact ? '0.6875rem' : '10px'}; --indicator-color: ${this._indicatorColor()};\"\n value=\"${this._percentage()}\"\n ></sl-progress-bar>\n <span class=\"${this.compact ? 'text-base' : 'text-sm min-w-10'} text-(--axebow-gray)\"\n >${this.max.toFixed(2)}</span\n >\n </div>\n `;\n }\n}\n","import { LitElement, html, unsafeCSS, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-tooltip/axebow-tooltip.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-divider/axebow-divider.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-usage-tooltip')\nexport class AxebowUsageTooltip extends LitElement {\n @property({ type: Object }) usage!: Usage;\n @property({ type: String }) color = 'var(--axebow-primary)';\n @property({ type: String }) storageLabel = '';\n @property({ type: String }) volatileLabel = '';\n @property({ type: String }) nonRepPersLabel = '';\n @property({ type: String }) persistentRepLabel = '';\n\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n }\n axebow-tooltip::part(body) {\n background-color: var(--axebow-white);\n color: var(--axebow-primary);\n padding: 1rem;\n border: 3px solid var(--axebow-table-border);\n width: 300px;\n }\n `,\n ];\n\n render() {\n if (!this.usage) return null;\n\n const { current, limit } = this.usage;\n return html`\n <axebow-tooltip placement=\"right\">\n <div slot=\"content\" class=\"mt-3\">\n <div class=\"flex justify-between items-center\">\n <axebow-icon iconName=\"database\" size=\"xl\"></axebow-icon>\n <span>${this.storageLabel} </span>\n <span class=\"tooltip-value\"> ${current.storage} / ${limit.storage.max} GB</span>\n </div>\n <axebow-divider type=\"dashed\"></axebow-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.volatileLabel} </span>\n <span class=\"tooltip-value\"> ${current.volatileStorage} / ${limit.volatileStorage.max} GB</span>\n </div>\n <axebow-divider type=\"dashed\"></axebow-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.nonRepPersLabel} </span>\n <span class=\"tooltip-value\"> ${current.nonReplicatedStorage} / ${limit.nonReplicatedStorage.max} GB</span>\n </div>\n <axebow-divider type=\"dashed\"></axebow-divider>\n <div class=\"flex space-between ml-2 items-center gap-1\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"xl\"></axebow-icon>\n <span>${this.persistentRepLabel} </span>\n <span class=\"tooltip-value\"> ${current.persistentStorage} / ${limit.persistentStorage.max} GB</span>\n </div>\n </div>\n <axebow-icon iconName=\"info\" size=\"md\" class=\"cursor-pointer\" iconColor=\"${this.color}\"></axebow-icon>\n </axebow-tooltip>\n `;\n }\n}\n","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-progress-bar/axebow-progress-bar.js';\nimport '../axebow-usage-tooltip/axebow-usage-tooltip.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface TableProgress {\n current: number;\n max: number;\n}\n\nexport interface TableInstanceContainer {\n name: string;\n statusLabel: string;\n isReady: boolean;\n cpu: TableProgress;\n memory: TableProgress;\n}\n\nexport interface TableInstance {\n id: string;\n name: string;\n statusLabel: string;\n isRunning: boolean;\n cpu: TableProgress;\n memory: TableProgress;\n storageLabel: string;\n usage: Usage;\n containers: TableInstanceContainer[];\n}\n\nexport interface StorageTooltipLabels {\n storage: string;\n volatile: string;\n nonRepPers: string;\n persistentRep: string;\n}\n\n@customElement('axebow-instances-table')\nexport class AxebowInstancesTable extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n .restart-button::part(base) {\n color: var(--axebow-tertiary);\n font-size: 0.875rem !important;\n }\n .restart-button::part(base):hover {\n color: var(--axebow-error);\n background-color: white;\n }\n .reboot-all-button::part(base) {\n color: var(--axebow-error);\n background-color: transparent;\n border-color: var(--axebow-error);\n }\n .reboot-all-button::part(base):hover {\n color: white;\n background-color: var(--axebow-error);\n border-color: var(--axebow-error);\n }\n `,\n ];\n\n @property({ attribute: false }) instances: TableInstance[] = [];\n @property({ type: String }) descriptionLabel = '';\n @property({ type: String }) noInstancesLabel = '';\n @property({ type: String }) colInstanceLabel = '';\n @property({ type: String }) colCpuLabel = '';\n @property({ type: String }) colMemoryLabel = '';\n @property({ type: String }) colStorageLabel = '';\n @property({ type: String }) colActionsLabel = '';\n @property({ type: String }) rebootLabel = '';\n @property({ type: String }) rebootAllLabel = '';\n @property({ attribute: false }) storageTooltipLabels!: StorageTooltipLabels;\n\n @state() private _expandedInstances: Set<string> = new Set();\n\n private _toggleInstance(instanceId: string) {\n if (this._expandedInstances.has(instanceId)) {\n this._expandedInstances.delete(instanceId);\n } else {\n this._expandedInstances.add(instanceId);\n }\n this.requestUpdate();\n }\n\n private _isInstanceExpanded(instanceId: string): boolean {\n return this._expandedInstances.has(instanceId);\n }\n\n private _requestReboot(instanceName: string | null) {\n this.dispatchEvent(\n new CustomEvent('reboot-request', { detail: { instanceName }, bubbles: true, composed: true })\n );\n }\n\n private _renderHeaderSeparator() {\n return html`<span class=\"w-px h-4 bg-(--axebow-gray) shrink-0\"></span>`;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"w-186.5 h-7.25 box-border flex items-center p-1.5 gap-1 bg-white\">\n <span class=\"w-48.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colInstanceLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-38.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colCpuLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-38.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colMemoryLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-25.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colStorageLabel}</span>\n ${this._renderHeaderSeparator()}\n <span class=\"w-25.5 h-4.25 text-base font-semibold text-(--axebow-primary)\">${this.colActionsLabel}</span>\n </div>\n `;\n }\n\n private _renderStatusBadge(text: string, isPositive: boolean) {\n return html`\n <div\n class=\"w-16.5 h-4.75 box-border flex items-center justify-center rounded ${isPositive\n ? 'bg-(--axebow-success) text-white uppercase text-sm'\n : 'bg-red-100 text-red-800 text-base'}\"\n >\n ${text}\n </div>\n `;\n }\n\n private _renderProgressCell(progress: TableProgress) {\n return html`\n <div class=\"w-39.5 h-4.25 box-border\">\n <axebow-progress-bar compact current=\"${progress.current}\" max=\"${progress.max}\"></axebow-progress-bar>\n </div>\n `;\n }\n\n private _renderStorageCell(storageLabel: string, usage: Usage) {\n return html`\n <div class=\"w-25.25 h-4.25 box-border flex items-center gap-1.5\">\n <div class=\"w-12.75 h-4.25 box-border flex items-center text-base pl-4.25 shrink-0\">${storageLabel}</div>\n <div class=\"w-3.5 h-3.5 flex items-center justify-center pr-3.25 shrink-0\">\n <axebow-usage-tooltip\n .usage=${usage}\n storageLabel=${this.storageTooltipLabels.storage}\n volatileLabel=${this.storageTooltipLabels.volatile}\n nonRepPersLabel=${this.storageTooltipLabels.nonRepPers}\n persistentRepLabel=${this.storageTooltipLabels.persistentRep}\n ></axebow-usage-tooltip>\n </div>\n </div>\n `;\n }\n\n private _renderInstanceRow(instance: TableInstance) {\n return html`\n <div\n class=\"w-186.5 h-14 box-border flex items-center gap-1 p-1.5 border-t border-(--axebow-table-border) cursor-pointer\"\n @click=\"${() => this._toggleInstance(instance.id)}\"\n >\n <div class=\"w-48 h-10 box-border flex flex-col gap-1 text-(--axebow-tertiary)\">\n <div class=\"flex items-center gap-1 min-w-0\">\n <axebow-icon\n iconName=\"${this._isInstanceExpanded(instance.id) ? 'collapse_all' : 'expand_all'}\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n class=\"shrink-0\"\n ></axebow-icon>\n <span class=\"text-base truncate\">${instance.name}</span>\n </div>\n ${this._renderStatusBadge(instance.statusLabel, instance.isRunning)}\n </div>\n ${this._renderProgressCell(instance.cpu)} ${this._renderProgressCell(instance.memory)}\n ${this._renderStorageCell(instance.storageLabel, instance.usage)}\n <div class=\"w-25.5 h-4.25 box-border flex items-center\">\n <axebow-button\n class=\"restart-button\"\n variant=\"text\"\n fixedWidth=\"5.5625rem\"\n fixedHeight=\"1.0625rem\"\n @click=\"${(e: Event) => {\n e.stopPropagation();\n this._requestReboot(instance.name);\n }}\"\n >\n ${this.rebootLabel}\n </axebow-button>\n </div>\n </div>\n ${this._isInstanceExpanded(instance.id) && instance.containers.length > 0\n ? instance.containers.map(\n (container) => html`\n <div\n class=\"w-186.5 h-14 box-border flex items-center gap-1 p-1.5 border-t border-(--axebow-table-border)\"\n >\n <div class=\"w-48 h-10 box-border flex flex-col gap-1\">\n <div class=\"flex items-center gap-1 min-w-0\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" size=\"md\" class=\"shrink-0\"></axebow-icon>\n <span class=\"text-base truncate\">${container.name}</span>\n </div>\n ${this._renderStatusBadge(container.statusLabel, container.isReady)}\n </div>\n ${this._renderProgressCell(container.cpu)} ${this._renderProgressCell(container.memory)}\n <div class=\"w-25.25 h-4.25 box-border flex items-center text-base\">-</div>\n <div class=\"w-25.5 h-4.25 box-border flex items-center text-base\">-</div>\n </div>\n `\n )\n : ''}\n `;\n }\n\n render() {\n if (!this.instances.length) {\n return html`<p>${this.noInstancesLabel}</p>`;\n }\n\n return html`\n <p class=\"text-black mb-4\">${this.descriptionLabel}</p>\n <div class=\"w-full\">\n <div class=\"w-186.5 rounded-md overflow-hidden border border-black/10\">\n ${this._renderHeader()} ${this.instances.map((instance) => this._renderInstanceRow(instance))}\n </div>\n </div>\n <div class=\"flex justify-end mt-4\">\n <axebow-button variant=\"primary\" outlined class=\"reboot-all-button\" @click=\"${() => this._requestReboot(null)}\">\n ${this.rebootAllLabel}\n </axebow-button>\n </div>\n `;\n }\n}\n","import { html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-usage-tooltip/axebow-usage-tooltip.js';\nimport type { Usage } from '@kumori/aurora-interfaces';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\nimport type { StorageTooltipLabels } from '../axebow-instances-table/axebow-instances-table.js';\n\nexport interface TableEnvironment {\n name: string;\n cpu: number;\n memory: number;\n storageTotal: number;\n usage: Usage;\n}\n\nexport interface TableAccount {\n name: string;\n cpu: number;\n memory: number;\n storage: number;\n usage: Usage;\n environments: TableEnvironment[];\n}\n\n@customElement('axebow-tenants-table')\nexport class AxebowTenantsTable extends LitElement {\n static styles = [unsafeCSS(tailwindCss), axebowTheme];\n\n @property({ attribute: false }) accounts: TableAccount[] = [];\n @property({ type: String }) noAccountsLabel = '';\n @property({ type: String }) colAccountLabel = '';\n @property({ type: String }) colVcpuLabel = '';\n @property({ type: String }) colMemoryLabel = '';\n @property({ type: String }) colStorageLabel = '';\n @property({ attribute: false }) storageTooltipLabels!: StorageTooltipLabels;\n\n @state() private _expandedAccounts: Set<string> = new Set();\n\n private _toggleAccount(accountName: string) {\n if (this._expandedAccounts.has(accountName)) {\n this._expandedAccounts.delete(accountName);\n } else {\n this._expandedAccounts.add(accountName);\n }\n this.requestUpdate();\n }\n\n private _isAccountExpanded(accountName: string): boolean {\n return this._expandedAccounts.has(accountName);\n }\n\n private _renderTooltip(usage: Usage) {\n return html`\n <axebow-usage-tooltip\n .usage=${usage}\n storageLabel=${this.storageTooltipLabels.storage}\n volatileLabel=${this.storageTooltipLabels.volatile}\n nonRepPersLabel=${this.storageTooltipLabels.nonRepPers}\n persistentRepLabel=${this.storageTooltipLabels.persistentRep}\n ></axebow-usage-tooltip>\n `;\n }\n\n render() {\n if (!this.accounts.length) {\n return html`<p>${this.noAccountsLabel}</p>`;\n }\n\n return html`\n <table class=\"w-full border-collapse bg-white rounded-md\">\n <thead>\n <tr>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colAccountLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colVcpuLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colMemoryLabel}</th>\n <th class=\"border border-(--axebow-table-border) p-2 text-left rounded-md\">${this.colStorageLabel}</th>\n </tr>\n </thead>\n <tbody>\n ${this.accounts.map(\n (account) => html`\n <tr class=\"cursor-pointer\" @click=\"${() => this._toggleAccount(account.name)}\">\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md text-(--axebow-tertiary)\">\n ${this._isAccountExpanded(account.name)\n ? html`<axebow-icon\n iconName=\"collapse_all\"\n class=\"mr-1\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>`\n : html`<axebow-icon\n iconName=\"expand_all\"\n class=\"mr-1\"\n iconColor=\"var(--axebow-tertiary)\"\n size=\"md\"\n ></axebow-icon>`}\n ${account.name}\n </td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${account.cpu}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${account.memory}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n ${account.storage} ${this._renderTooltip(account.usage)}\n </td>\n </tr>\n ${this._isAccountExpanded(account.name)\n ? account.environments.map(\n (environment) => html`\n <tr>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n <axebow-icon iconName=\"subdirectory_arrow_right\" class=\"mr-1\" size=\"md\"></axebow-icon>\n <span>${environment.name}</span>\n </td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${environment.cpu}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">${environment.memory}</td>\n <td class=\"border border-(--axebow-table-border) p-2 rounded-md\">\n ${environment.storageTotal} ${this._renderTooltip(environment.usage)}\n </td>\n </tr>\n `\n )\n : ''}\n `\n )}\n </tbody>\n </table>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-expandable-card')\nexport class AxebowExpandableCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n render() {\n return html`\n <div class=\"box-border p-4 bg-white rounded-md shadow-sm border border-gray-200 overflow-hidden\">\n <slot></slot>\n </div>\n `;\n }\n}\n","import { html, css, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-input/axebow-input.js';\nimport '../axebow-button/axebow-button.js';\nimport '@shoelace-style/shoelace/dist/components/spinner/spinner.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\n@customElement('axebow-undeploy-card')\nexport class AxebowUndeployCard extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n :host {\n display: block;\n }\n `,\n ];\n\n @property({ type: String }) title = '';\n @property({ type: String }) deletePrefix = '';\n @property({ type: String }) serviceName = '';\n @property({ type: String }) deleteSuffix = '';\n @property({ type: String }) warningPrefix = '';\n @property({ type: String }) warningBold = '';\n @property({ type: String }) confirmText = '';\n @property({ type: String }) confirmLabelPrefix = '';\n @property({ type: String }) confirmLabelHighlight = '';\n @property({ type: String }) placeholder = '';\n @property({ type: String }) value = '';\n @property({ type: String }) buttonLabel = '';\n @property({ type: Boolean }) buttonDisabled = false;\n @property({ type: Boolean }) isSubmitting = false;\n @property({ type: String }) loadingLabel = '';\n\n private _handleInput(e: Event) {\n const target = e.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('confirm-input', { detail: { value: target.value }, bubbles: true, composed: true })\n );\n }\n\n private _handleConfirm() {\n this.dispatchEvent(new CustomEvent('confirm', { bubbles: true, composed: true }));\n }\n\n render() {\n return html`\n <div class=\"w-198.25 h-auto box-border bg-white rounded-md p-6 flex flex-col gap-8\">\n <div class=\"w-186.25 flex gap-4\">\n <div class=\"w-8 h-full flex flex-col items-start shrink-0\">\n <div class=\"w-8 h-8 shrink-0 flex items-center justify-center\">\n <axebow-icon iconName=\"error\" iconColor=\"var(--axebow-error)\" size=\"2rem\"></axebow-icon>\n </div>\n </div>\n <div class=\"flex-1 min-w-0 flex flex-col gap-6\">\n <div class=\"w-full\">\n <h2 class=\"m-0 text-[1.25rem] font-semibold text-black\">${this.title}</h2>\n </div>\n <div class=\"w-full flex flex-col gap-2\">\n <p class=\"m-0\">${this.deletePrefix} <strong>${this.serviceName}</strong> ${this.deleteSuffix}</p>\n <p class=\"m-0\">${this.warningPrefix} <strong>${this.warningBold}</strong></p>\n <p class=\"m-0\">${this.confirmText}</p>\n </div>\n </div>\n </div>\n <div class=\"w-186.25 flex items-end gap-4 pl-11.75 box-border\">\n <div class=\"w-102 flex flex-col gap-1\">\n <p class=\"m-0 text-sm\">\n ${this.confirmLabelPrefix} <span class=\"text-(--axebow-primary)\">${this.confirmLabelHighlight}</span>\n </p>\n <axebow-input\n controlType=\"input\"\n .value=${this.value}\n placeholder=${this.placeholder}\n .callback=${(e: Event) => this._handleInput(e)}\n ></axebow-input>\n </div>\n <axebow-button variant=\"danger\" .disabled=${this.buttonDisabled || this.isSubmitting} @click=${this._handleConfirm}>\n ${this.isSubmitting\n ? html`\n <div class=\"flex gap-1 items-center\">\n <sl-spinner style=\"--indicator-color: red;\"></sl-spinner>\n <p class=\"m-0\">${this.loadingLabel}</p>\n </div>\n `\n : this.buttonLabel}\n </axebow-button>\n </div>\n </div>\n `;\n }\n}\n","import { css, html, LitElement, unsafeCSS } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport '../axebow-icon/axebow-icon.js';\nimport '../axebow-switch/axebow-switch.js';\nimport '../axebow-button/axebow-button.js';\nimport '../axebow-divider/axebow-divider.js';\nimport '@shoelace-style/shoelace/dist/components/dropdown/dropdown.js';\nimport '@shoelace-style/shoelace/dist/components/input/input.js';\nimport '@shoelace-style/shoelace/dist/components/menu/menu.js';\nimport '@shoelace-style/shoelace/dist/components/menu-item/menu-item.js';\nimport { axebowTheme } from '../../styles/axebow-theme.js';\nimport tailwindCss from '../../styles/tailwind.css?inline';\n\nexport interface ObservabilityLogFilter {\n options: string[];\n selected: string | null;\n}\n\n@customElement('axebow-observability-container')\nexport class AxebowObservabilityContainer extends LitElement {\n static styles = [\n unsafeCSS(tailwindCss),\n axebowTheme,\n css`\n sl-input::part(input) {\n font-size: 0.95rem;\n color: var(--axebow-strong-gray);\n background-color: #f3f4f6;\n }\n sl-input::part(base) {\n background-color: #f3f4f6;\n width: 100%;\n }\n .log-filter-dropdown {\n display: block;\n width: 100%;\n }\n .log-filter-dropdown::part(trigger) {\n display: block !important;\n width: 100% !important;\n }\n .log-filter-dropdown::part(panel) {\n width: 17rem !important;\n }\n `,\n ];\n\n @property({ type: String }) containerName = '';\n @property({ type: Boolean }) isLogsOn = true;\n @property({ type: Boolean }) isTerminalOn = false;\n @property({ type: String }) logsLabel = '';\n @property({ type: String }) logsOnLabel = '';\n @property({ type: String }) logsOffLabel = '';\n @property({ type: String }) terminalLabel = '';\n @property({ type: String }) terminalOnLabel = '';\n @property({ type: String }) terminalOffLabel = '';\n\n @property({ attribute: false }) logFilters: ObservabilityLogFilter[] = [];\n @property({ type: String }) logFilterTitle = '';\n @property({ type: String }) cleanFilterLabel = '';\n @property({ type: String }) addFilterLabel = '';\n @property({ type: String }) selectOptionLabel = '';\n @property({ type: String }) filterPlaceholder = '';\n @property({ type: String }) cleanHistoryLabel = '';\n\n @property({ type: Boolean }) followLogs = false;\n @property({ type: String }) autoScrollLabel = '';\n @property({ type: String }) autoScrollOnLabel = '';\n @property({ type: String }) autoScrollOffLabel = '';\n\n @property({ type: String }) logsTitle = '';\n @property({ type: String }) terminalTitle = '';\n @property({ type: String }) logsUrl = '';\n @property({ type: String }) terminalUrl = '';\n @property({ type: String }) logsIframeId = '';\n @property({ type: String }) terminalIframeId = '';\n\n render() {\n return html`\n <div class=\"w-full flex flex-col gap-4\">\n ${this._renderHeader()} ${this.isTerminalOn ? this._renderColumns() : this._renderStacked()}\n </div>\n `;\n }\n\n private _renderStacked() {\n return html` ${this.isLogsOn ? this._renderLogFilters() : null} ${this.isLogsOn ? this._renderLogsIframe() : null} `;\n }\n\n private _renderColumns() {\n return html`\n <div class=\"flex gap-4\">\n <div class=\"w-140.75 flex flex-col gap-4\">\n ${this.isLogsOn ? this._renderLogFilters() : null} ${this.isLogsOn ? this._renderLogsIframe() : null}\n </div>\n <div class=\"w-148.75\">${this._renderTerminalIframe()}</div>\n </div>\n `;\n }\n\n private _renderHeader() {\n return html`\n <div class=\"flex justify-between w-full border-b border-solid border-gray-200 pb-2 gap-4 items-center\">\n <h2 class=\"font-semibold text-lg text-ellipsis text-(--axebow-primary)\">${this.containerName}</h2>\n <div class=\"flex items-center gap-4\">\n ${this._renderToggle(\n this.logsLabel,\n this.isLogsOn,\n this.logsOnLabel,\n this.logsOffLabel,\n (checked) => this._dispatch('logs-toggle', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n ${this._renderToggle(\n this.terminalLabel,\n this.isTerminalOn,\n this.terminalOnLabel,\n this.terminalOffLabel,\n (checked) => this._dispatch('terminal-toggle', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"open_in_new\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._dispatch('open-in-new')}\n ></axebow-icon>\n </div>\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div\n class=\"w-6 h-6 flex items-center justify-center cursor-pointer\"\n @click=${() => this._dispatch('remove-container')}\n >\n <axebow-icon iconName=\"cancel\" size=\"2xl\" iconColor=\"var(--axebow-gray)\"></axebow-icon>\n </div>\n </div>\n </div>\n `;\n }\n\n private _renderToggle(\n label: string,\n checked: boolean,\n onLabel: string,\n offLabel: string,\n onChange: (checked: boolean) => void\n ) {\n return html`\n <div class=\"flex items-center gap-2\">\n <p class=\"m-0 text-(--axebow-tertiary) font-bold\">${label}</p>\n <axebow-switch .checked=${checked} .onChange=${(checked: boolean) => onChange(checked)}></axebow-switch>\n <p class=\"m-0 italic text-gray-400\">${checked ? onLabel : offLabel}</p>\n </div>\n `;\n }\n\n private _renderLogFilters() {\n return html`\n <div class=\"flex flex-wrap gap-4 items-start\">\n ${this.logFilters.map((_, index) => this._renderLogFilterDropdown(index))}\n <axebow-button\n class=\"shrink-0 mt-6.75\"\n variant=\"primary\"\n outline\n fixedWidth=\"7.4375rem\"\n fixedHeight=\"2.5rem\"\n @click=${() => this._dispatch('add-filter')}\n >\n ${this.addFilterLabel}\n </axebow-button>\n </div>\n `;\n }\n\n private _renderLogFilterDropdown(index: number) {\n const filter = this.logFilters[index];\n\n return html`\n <div class=\"w-68 h-auto flex flex-col gap-2\">\n <div class=\"w-68 h-4.75 flex items-center justify-between\">\n <h1 class=\"m-0 font-bold\">${this.logFilterTitle}</h1>\n <button\n class=\"m-0 text-base text-(--axebow-tertiary) cursor-pointer\"\n @click=${() => this._dispatch('clean-filter', { index })}\n >\n ${this.cleanFilterLabel}\n </button>\n </div>\n <sl-dropdown class=\"log-filter-dropdown\" id=\"log-filter-dropdown-${index}\">\n <axebow-button slot=\"trigger\" caret fixedWidth=\"17rem\" fixedHeight=\"2.5rem\">\n ${filter.selected ?? this.selectOptionLabel}\n </axebow-button>\n <sl-menu class=\"w-full my-2\">\n <sl-input\n type=\"text\"\n placeholder=${this.filterPlaceholder}\n clearable\n .value=${''}\n @sl-change=${(e: CustomEvent) => this._handleFilterInputChange(e, index)}\n @keydown=${(e: KeyboardEvent) => this._handleFilterInputKeydown(e, index)}\n ></sl-input>\n ${filter.options.map(\n (option) => html`\n <sl-menu-item @click=${() => this._selectFilterOption(index, option)}>${option}</sl-menu-item>\n `\n )}\n ${filter.options.length > 0\n ? html`\n <button\n class=\"p-2 w-full border-t border-solid border-gray-200 text-center text-gray-500 hover:bg-gray-100 cursor-pointer\"\n @click=${() => this._cleanFilterHistory(index)}\n >\n ${this.cleanHistoryLabel}\n </button>\n `\n : null}\n </sl-menu>\n </sl-dropdown>\n </div>\n `;\n }\n\n private _renderLogsIframe() {\n return html`\n <div class=\"w-full h-full px-4 py-8 rounded-md flex flex-col bg-white\">\n <div class=\"flex justify-between items-center\">\n <h1 class=\"m-0 text-base uppercase font-semibold text-(--axebow-gray)\">${this.logsTitle}</h1>\n <div class=\"flex items-center gap-4\">\n ${this._renderToggle(\n this.autoScrollLabel,\n this.followLogs,\n this.autoScrollOnLabel,\n this.autoScrollOffLabel,\n (checked) => this._dispatch('follow-logs-change', { checked })\n )}\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"download_for_offline\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._dispatch('download-logs')}\n ></axebow-icon>\n </div>\n <div class=\"h-full w-px bg-(--axebow-gray)\"></div>\n <div class=\"w-6 h-6 flex items-center justify-center\">\n <axebow-icon\n class=\"cursor-pointer\"\n iconName=\"content_copy\"\n size=\"2xl\"\n iconColor=\"var(--axebow-tertiary)\"\n @click=${() => this._copyLogs()}\n ></axebow-icon>\n </div>\n </div>\n </div>\n <axebow-divider margin=\"0.5rem 0 0.90625rem 0\"></axebow-divider>\n <iframe\n id=\"${this.logsIframeId}\"\n allow=\"storage-access\"\n sandbox=\"${'allow-same-origin allow-scripts' as any}\"\n class=\"w-full h-screen\"\n src=\"${this.logsUrl}\"\n ></iframe>\n </div>\n `;\n }\n\n private async _copyLogs() {\n try {\n const iframe = this.renderRoot?.querySelector(`#${this.logsIframeId}`) as HTMLIFrameElement | null;\n const text = iframe?.contentDocument?.body?.innerText ?? '';\n if (!text) {\n this._dispatch('logs-copy-failed');\n return;\n }\n await navigator.clipboard.writeText(text);\n this._dispatch('logs-copied');\n } catch (_) {\n this._dispatch('logs-copy-failed');\n }\n }\n\n private _renderTerminalIframe() {\n return html`\n <div class=\"w-full h-full px-4 py-8 rounded-md flex flex-col bg-white\">\n <div class=\"flex justify-between items-center\">\n <h1 class=\"m-0 text-base uppercase font-semibold text-(--axebow-gray)\">${this.terminalTitle}</h1>\n </div>\n <axebow-divider margin=\"0.5rem 0 0.90625rem 0\"></axebow-divider>\n <iframe\n id=\"${this.terminalIframeId}\"\n allow=\"storage-access\"\n sandbox=\"${'allow-same-origin allow-scripts' as any}\"\n class=\"w-full h-screen\"\n src=\"${this.terminalUrl}\"\n ></iframe>\n </div>\n `;\n }\n\n private _handleFilterInputChange(e: CustomEvent, index: number) {\n const input = e.target as HTMLInputElement;\n const value = input.value.trim();\n input.value = '';\n if (value) this._dispatch('filter-input-change', { index, value });\n }\n\n private _handleFilterInputKeydown(e: KeyboardEvent, index: number) {\n if (e.key !== 'Enter') return;\n\n e.preventDefault();\n e.stopPropagation();\n\n const input = e.target as HTMLInputElement;\n const value = input.value.trim();\n input.value = '';\n if (value) this._dispatch('filter-input-change', { index, value });\n this._closeDropdown(index);\n }\n\n private _selectFilterOption(index: number, option: string) {\n this._dispatch('select-filter-option', { index, option });\n this._closeDropdown(index);\n }\n\n private _cleanFilterHistory(index: number) {\n this._dispatch('clean-filter-history', { index });\n this._closeDropdown(index);\n }\n\n private _closeDropdown(index: number) {\n const dropdown = this.renderRoot?.querySelector(`#log-filter-dropdown-${index}`);\n if (dropdown) (dropdown as any).hide();\n }\n\n private _dispatch(eventName: string, detail: Record<string, unknown> = {}) {\n this.dispatchEvent(new CustomEvent(eventName, { detail, bubbles: true, composed: true }));\n }\n}\n"],"mappings":"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"}