@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
1 lines • 54.8 kB
Source Map (JSON)
{"version":3,"file":"sixbell-telco-sdk-components-dropdown.mjs","sources":["../../../projects/sdk/components/dropdown/dropdown-trigger/dropdown-trigger.component.ts","../../../projects/sdk/components/dropdown/dropdown-trigger/dropdown-trigger.component.html","../../../projects/sdk/components/dropdown/dropdown-chevron/dropdown-chevron.component.ts","../../../projects/sdk/components/dropdown/dropdown-chevron/dropdown-chevron.component.html","../../../projects/sdk/components/dropdown/dropdown-content/dropdown-content.component.ts","../../../projects/sdk/components/dropdown/dropdown-content/dropdown-content.component.html","../../../projects/sdk/components/dropdown/dropdown-group/dropdown-group.component.ts","../../../projects/sdk/components/dropdown/dropdown-group/dropdown-group.component.html","../../../projects/sdk/components/dropdown/src/dropdown.component.ts","../../../projects/sdk/components/dropdown/src/dropdown.component.html","../../../projects/sdk/components/dropdown/dropdown-item-checkbox/dropdown-item-checkbox.component.ts","../../../projects/sdk/components/dropdown/dropdown-item-checkbox/dropdown-item-checkbox.component.html","../../../projects/sdk/components/dropdown/dropdown-item-radio/dropdown-item-radio.component.ts","../../../projects/sdk/components/dropdown/dropdown-item-radio/dropdown-item-radio.component.html","../../../projects/sdk/components/dropdown/dropdown-item/dropdown-item.component.ts","../../../projects/sdk/components/dropdown/dropdown-item/dropdown-item.component.html","../../../projects/sdk/components/dropdown/dropdown-label/dropdown-label.component.ts","../../../projects/sdk/components/dropdown/dropdown-label/dropdown-label.component.html","../../../projects/sdk/components/dropdown/dropdown-separator/dropdown-separator.component.ts","../../../projects/sdk/components/dropdown/dropdown-separator/dropdown-separator.component.html","../../../projects/sdk/components/dropdown/sixbell-telco-sdk-components-dropdown.ts"],"sourcesContent":["import { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedOverlayPositionChange, ConnectedPosition } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, input, output, signal, TemplateRef } from '@angular/core';\n\n/** Animation states for the dropdown */\ntype DropdownAnimationState = 'closed' | 'opening' | 'open' | 'closing';\n\n/** Dropdown X position options for CDK overlay positioning */\nexport type DropdownXPosition = 'start' | 'center' | 'end';\n\n/** Dropdown Y position options for CDK overlay positioning */\nexport type DropdownYPosition = 'top' | 'bottom' | 'center';\n\n/** Dropdown fallback position configuration */\nexport interface DropdownFallbackPositions {\n\t/** Enable automatic fallback positions */\n\tenabled: boolean;\n\t/** Custom fallback positions - if not provided, default fallbacks will be used */\n\tpositions?: ConnectedPosition[];\n}\n\n/**\n * DropdownTrigger - Trigger element for opening dropdown content\n *\n * @remarks\n * This component acts as the trigger that opens/closes the dropdown content.\n * It can contain any content (buttons, avatars, text, icons, etc.).\n * Uses CdkConnectedOverlay for positioning and management.\n *\n * @example\n * ```html\n * <st-dropdown>\n * <st-dropdown-trigger>\n * <button class=\"btn btn-primary\">\n * Open Menu\n * <st-icon [icon]=\"chevronDown\"></st-icon>\n * </button>\n * </st-dropdown-trigger>\n * <st-dropdown-content>\n * <st-dropdown-item>Item 1</st-dropdown-item>\n * </st-dropdown-content>\n * </st-dropdown>\n * ```\n */\n@Component({\n\tselector: 'st-dropdown-trigger',\n\tstandalone: true,\n\timports: [CdkConnectedOverlay, CdkOverlayOrigin, NgTemplateOutlet],\n\ttemplateUrl: './dropdown-trigger.component.html',\n})\nexport class DropdownTriggerComponent {\n\t/** Offset X in pixels */\n\toffsetX = input<number>(0);\n\n\t/** Offset Y in pixels */\n\toffsetY = input<number>(0);\n\n\t/** Origin X position */\n\toriginX = input<DropdownXPosition>('start');\n\n\t/** Origin Y position */\n\toriginY = input<DropdownYPosition>('bottom');\n\n\t/** Overlay X position */\n\toverlayX = input<DropdownXPosition>('start');\n\n\t/** Overlay Y position */\n\toverlayY = input<DropdownYPosition>('top');\n\n\t/** Fallback positions configuration */\n\tfallbacks = input<DropdownFallbackPositions>({ enabled: true });\n\n\t/** Event emitted when dropdown is opened */\n\topened = output<void>();\n\n\t/** Event emitted when dropdown is closed */\n\tclosed = output<void>();\n\n\t/** Current open state */\n\tisOpen = signal(false);\n\n\t/** Internal state to control overlay visibility (keeps overlay open during close animation) */\n\toverlayOpen = signal(false);\n\n\t/** Current animation state */\n\tanimationState = signal<DropdownAnimationState>('closed');\n\n\t/** Current active position configuration */\n\tcurrentPosition = signal<ConnectedPosition | null>(null);\n\n\t/**\n\t * Computed animation direction based on current position\n\t * Returns the appropriate direction: 'top', 'bottom', 'left', or 'right'\n\t */\n\tanimationDirection = computed(() => {\n\t\tconst position = this.currentPosition();\n\t\tif (!position) return 'bottom'; // default\n\n\t\t// Determine direction based on overlay Y and X positions\n\t\t// overlayY indicates vertical position (top/bottom/center)\n\t\t// overlayX indicates horizontal position (start/end/center)\n\t\tconst overlayY = position.overlayY as string;\n\t\tconst overlayX = position.overlayX as string;\n\n\t\t// Priority: check Y first, then X\n\t\tif (overlayY === 'top') {\n\t\t\treturn 'top'; // Dropdown appears above\n\t\t}\n\n\t\tif (overlayY === 'bottom') {\n\t\t\treturn 'bottom'; // Dropdown appears below\n\t\t}\n\n\t\tif (overlayX === 'end') {\n\t\t\treturn 'left'; // Dropdown appears to the left (end aligns to left side of trigger)\n\t\t}\n\n\t\tif (overlayX === 'start') {\n\t\t\treturn 'right'; // Dropdown appears to the right (start aligns to right side of trigger)\n\t\t}\n\n\t\treturn 'bottom'; // default\n\t});\n\n\t/**\n\t * Static class mappings for different animation directions\n\t * Maps animation directions to complete Tailwind class names\n\t * All class names are static and detectable by Tailwind at build time\n\t */\n\tprivate readonly animationClassMap = {\n\t\tbottom: 'data-[state=opening]:animate-fade-in-up data-[state=open]:animate-fade-in-up data-[state=closing]:animate-fade-out-down',\n\t\ttop: 'data-[state=opening]:animate-fade-in-down data-[state=open]:animate-fade-in-down data-[state=closing]:animate-fade-out-up',\n\t\tleft: 'data-[state=opening]:animate-fade-in-left data-[state=open]:animate-fade-in-left data-[state=closing]:animate-fade-out-right',\n\t\tright: 'data-[state=opening]:animate-fade-in-right data-[state=open]:animate-fade-in-right data-[state=closing]:animate-fade-out-left',\n\t};\n\n\t/**\n\t * Computed class string for animations\n\t * Applies the correct animation based on position using static class names\n\t */\n\tanimationClasses = computed(() => {\n\t\tconst direction = this.animationDirection();\n\t\tconst baseClasses = this.animationClassMap[direction as keyof typeof this.animationClassMap];\n\t\tconst durationClasses =\n\t\t\t'data-[state=closing]:animate-duration-150 data-[state=opening]:animate-duration-150 data-[state=open]:animate-duration-150 overflow-hidden';\n\t\treturn `${baseClasses} ${durationClasses}`;\n\t});\n\n\t/** Content template reference */\n\tcontentTemplate: TemplateRef<unknown> | null = null;\n\n\t/**\n\t * Computed positions array based on signal inputs\n\t */\n\tpositions = computed(() => {\n\t\t// Get current values and ensure they are strings\n\t\tconst originX = String(this.originX()) as DropdownXPosition;\n\t\tconst originY = String(this.originY()) as DropdownYPosition;\n\t\tconst overlayX = String(this.overlayX()) as DropdownXPosition;\n\t\tconst overlayY = String(this.overlayY()) as DropdownYPosition;\n\t\tconst offsetX = Number(this.offsetX());\n\t\tconst offsetY = Number(this.offsetY());\n\n\t\t// Primary position using direct signal values\n\t\tconst primary: ConnectedPosition = {\n\t\t\toriginX,\n\t\t\toriginY,\n\t\t\toverlayX,\n\t\t\toverlayY,\n\t\t\toffsetX,\n\t\t\toffsetY,\n\t\t};\n\n\t\t// If fallbacks are disabled, return only primary position\n\t\tconst fallbackConfig = this.fallbacks();\n\t\tif (!fallbackConfig.enabled) {\n\t\t\treturn [primary];\n\t\t}\n\n\t\t// Use custom fallback positions if provided\n\t\tif (fallbackConfig.positions && fallbackConfig.positions.length > 0) {\n\t\t\treturn [primary, ...fallbackConfig.positions];\n\t\t}\n\n\t\t// Generate default fallback positions\n\t\tconst fallbacks = this.generateDefaultFallbacks(primary);\n\t\treturn [primary, ...fallbacks];\n\t});\n\n\t/**\n\t * Generate default fallback positions based on the primary position\n\t * Provides comprehensive fallback coverage for all space constraints\n\t */\n\tprivate generateDefaultFallbacks(primary: ConnectedPosition): ConnectedPosition[] {\n\t\tconst fallbacks: ConnectedPosition[] = [];\n\n\t\tconst primaryOriginX = primary.originX as DropdownXPosition;\n\t\tconst primaryOriginY = primary.originY as DropdownYPosition;\n\t\tconst primaryOverlayX = primary.overlayX as DropdownXPosition;\n\t\tconst primaryOverlayY = primary.overlayY as DropdownYPosition;\n\n\t\t// Add basic axis flips\n\t\tthis.addAxisFlips(fallbacks, primary, primaryOriginX, primaryOriginY, primaryOverlayX, primaryOverlayY);\n\n\t\t// Add standard dropdown positions\n\t\tthis.addStandardPositions(fallbacks, primary);\n\n\t\t// Add center alignment fallbacks\n\t\tthis.addCenterFallbacks(fallbacks, primary, primaryOriginX, primaryOriginY, primaryOverlayX, primaryOverlayY);\n\n\t\treturn fallbacks;\n\t}\n\n\t/**\n\t * Helper to flip Y position\n\t */\n\tprivate getOppositeY(position: DropdownYPosition): DropdownYPosition {\n\t\tif (position === 'top') return 'bottom';\n\t\tif (position === 'bottom') return 'top';\n\t\treturn 'center';\n\t}\n\n\t/**\n\t * Helper to flip X position\n\t */\n\tprivate getOppositeX(position: DropdownXPosition): DropdownXPosition {\n\t\tif (position === 'start') return 'end';\n\t\tif (position === 'end') return 'start';\n\t\treturn 'center';\n\t}\n\n\t/**\n\t * Helper to create position variant\n\t */\n\tprivate createPosition(\n\t\tprimary: ConnectedPosition,\n\t\toriginX: DropdownXPosition,\n\t\toriginY: DropdownYPosition,\n\t\toverlayX: DropdownXPosition,\n\t\toverlayY: DropdownYPosition,\n\t): ConnectedPosition {\n\t\treturn {\n\t\t\t...primary,\n\t\t\toriginX,\n\t\t\toriginY,\n\t\t\toverlayX,\n\t\t\toverlayY,\n\t\t};\n\t}\n\n\t/**\n\t * Add axis flip fallbacks\n\t */\n\tprivate addAxisFlips(\n\t\tfallbacks: ConnectedPosition[],\n\t\tprimary: ConnectedPosition,\n\t\tprimaryOriginX: DropdownXPosition,\n\t\tprimaryOriginY: DropdownYPosition,\n\t\tprimaryOverlayX: DropdownXPosition,\n\t\tprimaryOverlayY: DropdownYPosition,\n\t): void {\n\t\t// Flip Y axis\n\t\tconst oppositeY = this.getOppositeY(primaryOriginY);\n\t\tconst oppositeOverlayY = this.getOppositeY(primaryOverlayY);\n\t\tfallbacks.push(this.createPosition(primary, primaryOriginX, oppositeY, primaryOverlayX, oppositeOverlayY));\n\n\t\t// Flip X axis\n\t\tconst oppositeX = this.getOppositeX(primaryOriginX);\n\t\tconst oppositeOverlayX = this.getOppositeX(primaryOverlayX);\n\t\tfallbacks.push(this.createPosition(primary, oppositeX, primaryOriginY, oppositeOverlayX, primaryOverlayY));\n\n\t\t// Flip both axes\n\t\tfallbacks.push(this.createPosition(primary, oppositeX, oppositeY, oppositeOverlayX, oppositeOverlayY));\n\t}\n\n\t/**\n\t * Add standard dropdown positions\n\t */\n\tprivate addStandardPositions(fallbacks: ConnectedPosition[], primary: ConnectedPosition): void {\n\t\tconst standardPositions = [\n\t\t\tthis.createPosition(primary, 'start', 'bottom', 'start', 'top'), // Classic dropdown\n\t\t\tthis.createPosition(primary, 'start', 'top', 'start', 'bottom'), // Dropup\n\t\t\tthis.createPosition(primary, 'end', 'top', 'start', 'top'), // Left side\n\t\t\tthis.createPosition(primary, 'start', 'top', 'end', 'top'), // Right side\n\t\t\tthis.createPosition(primary, 'center', 'bottom', 'center', 'top'), // Center dropdown\n\t\t\tthis.createPosition(primary, 'center', 'top', 'center', 'bottom'), // Center dropup\n\t\t];\n\n\t\tfor (const pos of standardPositions) {\n\t\t\tif (!this.isPositionDuplicate(pos, [primary, ...fallbacks])) {\n\t\t\t\tfallbacks.push(pos);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add center alignment fallbacks\n\t */\n\tprivate addCenterFallbacks(\n\t\tfallbacks: ConnectedPosition[],\n\t\tprimary: ConnectedPosition,\n\t\tprimaryOriginX: DropdownXPosition,\n\t\tprimaryOriginY: DropdownYPosition,\n\t\tprimaryOverlayX: DropdownXPosition,\n\t\tprimaryOverlayY: DropdownYPosition,\n\t): void {\n\t\t// Center horizontally\n\t\tif (primaryOriginX !== 'center' || primaryOverlayX !== 'center') {\n\t\t\tfallbacks.push(this.createPosition(primary, 'center', primaryOriginY, 'center', primaryOverlayY));\n\t\t}\n\n\t\t// Center vertically\n\t\tif (primaryOriginY !== 'center' || primaryOverlayY !== 'center') {\n\t\t\tfallbacks.push(this.createPosition(primary, primaryOriginX, 'center', primaryOverlayX, 'center'));\n\t\t}\n\n\t\t// Fully centered as last resort\n\t\tconst fullyCentered = this.createPosition(primary, 'center', 'center', 'center', 'center');\n\t\tif (!this.isPositionDuplicate(fullyCentered, [primary, ...fallbacks])) {\n\t\t\tfallbacks.push(fullyCentered);\n\t\t}\n\t}\n\n\t/**\n\t * Check if position is duplicate\n\t */\n\tprivate isPositionDuplicate(position: ConnectedPosition, existing: ConnectedPosition[]): boolean {\n\t\treturn existing.some(\n\t\t\t(pos) =>\n\t\t\t\tpos.originX === position.originX &&\n\t\t\t\tpos.originY === position.originY &&\n\t\t\t\tpos.overlayX === position.overlayX &&\n\t\t\t\tpos.overlayY === position.overlayY,\n\t\t);\n\t} /**\n\t * Set the content template to be displayed in the overlay\n\t */\n\tsetContentTemplate(template: TemplateRef<unknown>): void {\n\t\tthis.contentTemplate = template;\n\t}\n\n\t/**\n\t * Toggle the dropdown open/close state\n\t */\n\ttoggle(): void {\n\t\tif (this.isOpen()) {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.open();\n\t}\n\n\t/**\n\t * Open the dropdown\n\t * Sets up overlay with animation and emits opened event\n\t */\n\topen(): void {\n\t\tif (this.isOpen() || !this.contentTemplate) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen.set(true);\n\t\tthis.overlayOpen.set(true);\n\t\tthis.animationState.set('opening');\n\t\tthis.opened.emit();\n\t}\n\n\t/**\n\t * Close the dropdown\n\t * Triggers closing animation and emits closed event\n\t */\n\tclose(): void {\n\t\tif (!this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.animationState.set('closing');\n\t\tthis.closed.emit();\n\t}\n\n\t/**\n\t * Handle animation end events\n\t * Completes state transitions when animations finish\n\t */\n\tonAnimationEnd(event: AnimationEvent): void {\n\t\tconst currentState = this.animationState();\n\n\t\t// Opening animation complete\n\t\tif (currentState === 'opening' && (event.animationName.includes('fade-in') || event.animationName.includes('morph-in'))) {\n\t\t\tthis.animationState.set('open');\n\t\t\treturn;\n\t\t}\n\n\t\t// Closing animation complete\n\t\tif (currentState === 'closing' && event.animationName.includes('fade-out')) {\n\t\t\tthis.animationState.set('closed');\n\t\t\tthis.isOpen.set(false);\n\t\t\tthis.overlayOpen.set(false);\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Handle position changes from CDK overlay\n\t */\n\tonPositionChange(position: ConnectedOverlayPositionChange): void {\n\t\tif (position?.connectionPair) {\n\t\t\tthis.currentPosition.set(position.connectionPair);\n\t\t}\n\t}\n}\n","<div\n\tcdkOverlayOrigin\n\t#trigger=\"cdkOverlayOrigin\"\n\tclass=\"inline-flex cursor-pointer items-center\"\n\t(click)=\"toggle()\"\n\t(keydown.enter)=\"toggle()\"\n\t(keydown.space)=\"toggle(); $event.preventDefault()\"\n\t(keydown.escape)=\"close()\"\n\t[attr.aria-expanded]=\"isOpen()\"\n\t[attr.aria-haspopup]=\"true\"\n\ttabindex=\"0\"\n\trole=\"button\"\n>\n\t<ng-content></ng-content>\n</div>\n\n<ng-template\n\tcdkConnectedOverlay\n\t[cdkConnectedOverlayPositions]=\"positions()\"\n\t[cdkConnectedOverlayOrigin]=\"trigger\"\n\t[cdkConnectedOverlayOpen]=\"overlayOpen()\"\n\t[cdkConnectedOverlayHasBackdrop]=\"true\"\n\t[cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n\t[cdkConnectedOverlayDisableClose]=\"true\"\n\t(backdropClick)=\"close()\"\n\t(positionChange)=\"onPositionChange($event)\"\n>\n\t<div [class]=\"animationClasses()\" (animationend)=\"onAnimationEnd($event)\" [attr.data-state]=\"animationState()\">\n\t\t<ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n\t</div>\n</ng-template>\n","import { Component, computed, inject, input } from '@angular/core';\nimport { IconColorProps, IconComponent, IconSizeProps } from '@sixbell-telco/sdk/components/icon';\nimport { matKeyboardArrowDown } from '@sixbell-telco/sdk/components/icon/material/baseline';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { DropdownTriggerComponent } from '../dropdown-trigger/dropdown-trigger.component';\n\n/**\n * DropdownChevron - Chevron indicator for dropdown triggers\n * Automatically rotates based on dropdown state and positions itself correctly\n */\n@Component({\n\tselector: 'st-dropdown-chevron',\n\tstandalone: true,\n\timports: [IconComponent],\n\ttemplateUrl: './dropdown-chevron.component.html',\n})\nexport class DropdownChevronComponent {\n\t/**\n\t * Inject parent trigger component to access its isOpen signal\n\t * Use SkipSelf to get the immediate parent trigger\n\t */\n\tprivate readonly trigger = inject(DropdownTriggerComponent, { optional: true, skipSelf: true });\n\n\t/**\n\t * Custom icon to use instead of default arrow down\n\t */\n\ticon = input<string>(matKeyboardArrowDown);\n\n\t/**\n\t * Additional CSS classes\n\t */\n\tclass = input<string>('');\n\n\t/**\n\t * Size of the chevron using Icon component size types\n\t */\n\tsize = input<IconSizeProps>('md');\n\n\t/**\n\t * Color of the chevron using Icon component color types\n\t */\n\tcolor = input<IconColorProps>('inherit');\n\n\t/**\n\t * Position relative to content\n\t */\n\tposition = input<'left' | 'right'>('right');\n\n\t/**\n\t * Whether the chevron is open (rotated)\n\t * Derives from the parent trigger's isOpen signal\n\t */\n\tprivate readonly isOpen = computed(() => this.trigger?.isOpen() ?? false);\n\n\t/**\n\t * Computed classes for the chevron\n\t */\n\treadonly chevronClasses = computed(() => {\n\t\tconst marginClasses = {\n\t\t\tleft: 'mr-2',\n\t\t\tright: 'ml-2',\n\t\t};\n\n\t\treturn cn(marginClasses[this.position()], 'transition-transform duration-200 ease-in-out', this.isOpen() && 'rotate-180', this.class());\n\t});\n}\n","<st-icon [icon]=\"icon()\" [size]=\"size()\" [color]=\"color()\" [class]=\"chevronClasses()\"></st-icon>\n","import { Component, input, output, TemplateRef, viewChild } from '@angular/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\n\n/**\n * DropdownContent - Container for dropdown menu items\n *\n * @remarks\n * This component contains the dropdown menu items and provides them as a template\n * for the trigger component to display in the overlay.\n *\n * @example\n * ```html\n * <st-dropdown-content>\n * <st-dropdown-item>Menu Item 1</st-dropdown-item>\n * <st-dropdown-item>Menu Item 2</st-dropdown-item>\n * <div class=\"divider\"></div>\n * <st-dropdown-item>Menu Item 3</st-dropdown-item>\n * </st-dropdown-content>\n * ```\n */\n@Component({\n\tselector: 'st-dropdown-content',\n\tstandalone: true,\n\ttemplateUrl: './dropdown-content.component.html',\n\texportAs: 'dropdownContent',\n})\nexport class DropdownContentComponent {\n\ttemplate = viewChild.required<TemplateRef<unknown>>('contentTemplate');\n\n\t/** Custom CSS classes */\n\tclass = input<string>('');\n\n\t/** Size variant */\n\tsize = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n\n\t/** Whether to apply shadow */\n\tshadow = input<boolean>(true);\n\n\t/** Event emitted when close is requested */\n\tcloseRequested = output<void>();\n\n\t/**\n\t * Computed CSS classes for the content\n\t */\n\tcontentClass = () =>\n\t\tcn(\n\t\t\t'menu',\n\t\t\t'bg-base-200',\n\t\t\t'rounded-box',\n\t\t\t'border',\n\t\t\t'border-neutral',\n\t\t\t'min-w-full',\n\t\t\t'max-h-72',\n\t\t\t'overflow-y-auto',\n\t\t\t'overscroll-contain',\n\t\t\t'flex-nowrap',\n\t\t\t{\n\t\t\t\t'menu-xs': this.size() === 'xs',\n\t\t\t\t'menu-sm': this.size() === 'sm',\n\t\t\t\t'menu-md': this.size() === 'md',\n\t\t\t\t'menu-lg': this.size() === 'lg',\n\t\t\t\t'menu-xl': this.size() === 'xl',\n\t\t\t\t'shadow-main': this.shadow(),\n\t\t\t},\n\t\t\tthis.class(),\n\t\t);\n\n\t/**\n\t * Request to close the dropdown\n\t * This will be handled by the parent dropdown component\n\t */\n\trequestClose(): void {\n\t\tthis.closeRequested.emit();\n\t}\n}\n","<ng-template #contentTemplate>\n\t<ul [class]=\"contentClass()\">\n\t\t<ng-content></ng-content>\n\t</ul>\n</ng-template>\n","import { Component } from '@angular/core';\n\n/**\n * DropdownGroup - Groups related dropdown items together\n * Provides semantic grouping for dropdown items without rendering a wrapper element\n */\n@Component({\n\tselector: 'st-dropdown-group',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './dropdown-group.component.html',\n\thost: {\n\t\tstyle: 'display: contents',\n\t},\n})\nexport class DropdownGroupComponent {}\n","<ng-content></ng-content>\n","import { Component, computed, contentChild, effect, model, output, signal } from '@angular/core';\nimport { DropdownContentComponent } from '../dropdown-content/dropdown-content.component';\nimport { DropdownTriggerComponent } from '../dropdown-trigger/dropdown-trigger.component';\n\n/**\n * Dropdown - Main container component for dropdown menus\n *\n * @remarks\n * This is the root container that provides a wrapper for trigger and content components.\n * The trigger and content components coordinate themselves through this parent component.\n *\n * @example\n * ```html\n * <st-dropdown>\n * <st-dropdown-trigger [showChevron]=\"true\">\n * <button class=\"btn btn-primary\">Open Menu</button>\n * </st-dropdown-trigger>\n * <st-dropdown-content>\n * <st-dropdown-item>Item 1</st-dropdown-item>\n * <st-dropdown-item>Item 2</st-dropdown-item>\n * </st-dropdown-content>\n * </st-dropdown>\n * ```\n *\n * @example\n * ```html\n * <!-- Listen to open/close events -->\n * <st-dropdown (opened)=\"onOpened()\" (closed)=\"onClosed()\">\n * ...\n * </st-dropdown>\n *\n * <!-- Programmatic control with model signal -->\n * <st-dropdown [(open)]=\"isDropdownOpen\">\n * ...\n * <button (click)=\"isDropdownOpen.set(true)\">Open</button>\n * <button (click)=\"isDropdownOpen.set(false)\">Close</button>\n * <div>Is open: {{ isDropdownOpen() }}</div>\n * </st-dropdown>\n * ```\n */\n@Component({\n\tselector: 'st-dropdown',\n\tstandalone: true,\n\ttemplateUrl: './dropdown.component.html',\n\texportAs: 'stDropdown',\n})\nexport class DropdownComponent {\n\t// Use contentChild() signal instead of @ContentChild decorator\n\ttrigger = contentChild.required(DropdownTriggerComponent);\n\tcontent = contentChild.required(DropdownContentComponent);\n\n\t/** Model signal for open/close state - allows two-way binding [(open)]=\"isDropdownOpen\" */\n\topen = model<boolean>(false);\n\n\t/** Event emitted when dropdown is opened - exposed from trigger */\n\topened = output<void>();\n\n\t/** Event emitted when dropdown is closed - exposed from trigger */\n\tclosed = output<void>();\n\n\tconstructor() {\n\t\t/**\n\t\t * Local state for managing subscription lifecycle\n\t\t * Scoped to constructor closure to persist across effect runs without triggering reactivity\n\t\t * Holds trigger/content identity references and subscription cleanup handlers\n\t\t */\n\t\ttype Unsub = (() => void) | { unsubscribe?: () => void };\n\t\tconst _prevState: {\n\t\t\ttrigger?: DropdownTriggerComponent | null;\n\t\t\tcontent?: DropdownContentComponent | null;\n\t\t\topenUnsub?: Unsub | undefined;\n\t\t\tclosedUnsub?: Unsub | undefined;\n\t\t} = { trigger: null, content: null };\n\n\t\t/**\n\t\t * One-time template wiring effect\n\t\t * Fires once when trigger and content become available\n\t\t * Sets up template injection and subscribes to trigger outputs exactly once\n\t\t */\n\t\teffect(() => {\n\t\t\tconst trigger = this.trigger();\n\t\t\tconst content = this.content();\n\n\t\t\tif (trigger && content && !_prevState.trigger) {\n\t\t\t\ttrigger.setContentTemplate(content.template());\n\t\t\t\t_prevState.trigger = trigger;\n\t\t\t\t_prevState.content = content;\n\n\t\t\t\tif (trigger.opened) {\n\t\t\t\t\t_prevState.openUnsub = trigger.opened.subscribe(() => {\n\t\t\t\t\t\tthis.opened.emit();\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (trigger.closed) {\n\t\t\t\t\t_prevState.closedUnsub = trigger.closed.subscribe(() => {\n\t\t\t\t\t\tthis.closed.emit();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/**\n\t\t * Model-to-trigger sync effect\n\t\t * Tracks last synced model value to detect external changes\n\t\t * Only syncs when model changes from what was previously synced\n\t\t * Prevents control loops when showcase updates model in response to trigger events\n\t\t */\n\t\tconst _lastSyncedModel = signal<boolean>(this.open());\n\n\t\teffect(() => {\n\t\t\tconst currentModel = this.open();\n\t\t\tconst lastSynced = _lastSyncedModel();\n\n\t\t\tif (currentModel === lastSynced) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst trigger = this.trigger();\n\t\t\tif (!trigger) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst triggerIsOpen = trigger.isOpen();\n\n\t\t\tif (currentModel && !triggerIsOpen) {\n\t\t\t\ttrigger.open();\n\t\t\t} else if (!currentModel && triggerIsOpen) {\n\t\t\t\ttrigger.close();\n\t\t\t}\n\n\t\t\t_lastSyncedModel.set(currentModel);\n\t\t});\n\t}\n\n\t/**\n\t * Get the current open state\n\t */\n\tisOpen = computed(() => this.open());\n}\n","<ng-content></ng-content>\n","import { Component, computed, inject, input, output } from '@angular/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { DropdownComponent } from '../src/dropdown.component';\n\n/**\n * DropdownItemCheckbox - Checkbox dropdown item\n * Provides checkbox functionality for dropdown selections\n */\n@Component({\n\tselector: 'st-dropdown-item-checkbox',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './dropdown-item-checkbox.component.html',\n})\nexport class DropdownItemCheckboxComponent {\n\tprivate readonly dropdown = inject(DropdownComponent, { optional: true });\n\n\t/**\n\t * Whether the checkbox is checked\n\t */\n\tchecked = input<boolean>(false);\n\n\t/**\n\t * Whether the menu item is disabled\n\t */\n\tdisabled = input<boolean>(false);\n\n\t/**\n\t * Custom indicator character or text\n\t */\n\tindicator = input<string>('✓');\n\n\t/**\n\t * Whether to show the indicator\n\t */\n\tshowIndicator = input<boolean>(true);\n\n\t/**\n\t * Custom CSS classes\n\t */\n\tclass = input<string>('');\n\n\t/**\n\t * Whether to close the dropdown when the item is selected\n\t * @defaultValue true\n\t */\n\tcloseOnSelect = input<boolean>(false);\n\n\t/**\n\t * Emitted when the checkbox state changes\n\t */\n\tcheckedChanged = output<boolean>();\n\n\t/**\n\t * Emitted when the menu item is triggered/clicked\n\t */\n\ttriggered = output<void>();\n\n\t/**\n\t * Computed data state for ARIA\n\t */\n\tdataState = computed(() => {\n\t\treturn this.checked() ? 'checked' : 'unchecked';\n\t});\n\n\t/**\n\t * Handle item click - toggle checkbox state\n\t */\n\tonItemClick(): void {\n\t\tif (!this.disabled()) {\n\t\t\tconst newChecked = !this.checked();\n\t\t\tthis.checkedChanged.emit(newChecked);\n\t\t\tthis.triggered.emit();\n\t\t\tif (this.closeOnSelect()) {\n\t\t\t\tthis.dropdown?.trigger()?.close();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Computed CSS classes for the menu item\n\t */\n\titemClass = () =>\n\t\tcn(\n\t\t\t'group',\n\t\t\t'transition-colors',\n\t\t\t'duration-200',\n\t\t\t{\n\t\t\t\t'menu-disabled pointer-events-none opacity-50': this.disabled(),\n\t\t\t\t'menu-active': this.checked(),\n\t\t\t},\n\t\t\tthis.class(),\n\t\t);\n}\n","<li\n\t[class]=\"itemClass()\"\n\t[attr.data-state]=\"dataState()\"\n\t(click)=\"onItemClick()\"\n\t(keydown.enter)=\"onItemClick()\"\n\t(keydown.space)=\"onItemClick()\"\n\t[attr.tabindex]=\"disabled() ? -1 : 0\"\n\trole=\"menuitemcheckbox\"\n\t[attr.aria-checked]=\"checked()\"\n\t[attr.aria-disabled]=\"disabled()\"\n>\n\t<a class=\"flex items-center justify-between\">\n\t\t<span class=\"flex-1\">\n\t\t\t<ng-content></ng-content>\n\t\t</span>\n\t\t@if (showIndicator()) {\n\t\t\t<span\n\t\t\t\tclass=\"ml-auto text-xs transition-opacity duration-300 ease-in-out group-aria-[checked=false]:opacity-0 group-aria-[checked=true]:opacity-100\"\n\t\t\t>\n\t\t\t\t{{ indicator() }}\n\t\t\t</span>\n\t\t}\n\t</a>\n</li>\n","import { Component, computed, inject, input, output } from '@angular/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { DropdownComponent } from '../src/dropdown.component';\n\n/**\n * DropdownItemRadio - Radio dropdown item\n * Provides radio button functionality for dropdown selections\n */\n@Component({\n\tselector: 'st-dropdown-item-radio',\n\tstandalone: true,\n\timports: [],\n\ttemplateUrl: './dropdown-item-radio.component.html',\n})\nexport class DropdownItemRadioComponent {\n\tprivate readonly dropdown = inject(DropdownComponent, { optional: true });\n\n\t/**\n\t * Whether the radio is checked\n\t */\n\tchecked = input<boolean>(false);\n\n\t/**\n\t * The value of this radio item\n\t */\n\tvalue = input.required<string>();\n\n\t/**\n\t * Whether the menu item is disabled\n\t */\n\tdisabled = input<boolean>(false);\n\n\t/**\n\t * Custom indicator character or text\n\t */\n\tindicator = input<string>('●');\n\n\t/**\n\t * Whether to show the indicator\n\t */\n\tshowIndicator = input<boolean>(true);\n\n\t/**\n\t * Custom CSS classes\n\t */\n\tclass = input<string>('');\n\n\t/**\n\t * Whether to close the dropdown when the item is selected\n\t * @defaultValue true\n\t */\n\tcloseOnSelect = input<boolean>(true);\n\n\t/**\n\t * Emitted when the radio state changes\n\t */\n\tcheckedChanged = output<string>();\n\n\t/**\n\t * Emitted when the menu item is triggered/clicked\n\t */\n\ttriggered = output<void>();\n\n\t/**\n\t * Computed data state for ARIA\n\t */\n\tdataState = computed(() => {\n\t\treturn this.checked() ? 'checked' : 'unchecked';\n\t});\n\n\t/**\n\t * Handle item click - select this radio option\n\t */\n\tonItemClick(): void {\n\t\tif (!this.disabled() && !this.checked()) {\n\t\t\tthis.checkedChanged.emit(this.value());\n\t\t\tthis.triggered.emit();\n\t\t\tif (this.closeOnSelect()) {\n\t\t\t\tthis.dropdown?.trigger()?.close();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Computed CSS classes for the menu item\n\t */\n\titemClass = () =>\n\t\tcn(\n\t\t\t'group',\n\t\t\t'transition-colors',\n\t\t\t'duration-200',\n\t\t\t{\n\t\t\t\t'menu-disabled pointer-events-none opacity-50': this.disabled(),\n\t\t\t\t'menu-active': this.checked(),\n\t\t\t},\n\t\t\tthis.class(),\n\t\t);\n}\n","<li\n\t[class]=\"itemClass()\"\n\t[attr.data-state]=\"dataState()\"\n\t(click)=\"onItemClick()\"\n\t(keydown.enter)=\"onItemClick()\"\n\t(keydown.space)=\"onItemClick()\"\n\t[attr.tabindex]=\"disabled() ? -1 : 0\"\n\trole=\"menuitemradio\"\n\t[attr.aria-checked]=\"checked()\"\n\t[attr.aria-disabled]=\"disabled()\"\n>\n\t<a class=\"flex items-center justify-between\">\n\t\t<span class=\"flex-1\">\n\t\t\t<ng-content></ng-content>\n\t\t</span>\n\t\t@if (showIndicator()) {\n\t\t\t<span\n\t\t\t\tclass=\"ml-auto text-xs transition-opacity duration-300 ease-in-out group-aria-[checked=false]:opacity-0 group-aria-[checked=true]:opacity-100\"\n\t\t\t>\n\t\t\t\t{{ indicator() }}\n\t\t\t</span>\n\t\t}\n\t</a>\n</li>\n","import { Component, inject, input, output } from '@angular/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { DropdownComponent } from '../src/dropdown.component';\n\n/**\n * A selectable item component for use within dropdown menus\n *\n * @remarks\n * Designed to be used inside `<st-dropdown-content>` components. Handles selection events\n * and automatically closes the parent dropdown when clicked.\n *\n * @example\n * ```html\n * <st-dropdown-item (selected)=\"handleItemSelect()\">\n * <st-icon icon=\"check\"></st-icon>\n * <span typography>Select Item</span>\n * </st-dropdown-item>\n * ```\n *\n * @example\n * ```html\n * <st-dropdown-item class=\"custom-item-style\" (selected)=\"logSelection()\" [disabled]=\"true\">\n * Disabled item\n * </st-dropdown-item>\n * ```\n */\n@Component({\n\tselector: 'st-dropdown-item',\n\tstandalone: true,\n\ttemplateUrl: './dropdown-item.component.html',\n})\nexport class DropdownItemComponent {\n\tprivate readonly dropdown = inject(DropdownComponent, { optional: true });\n\n\t/**\n\t * Whether the menu item is active\n\t */\n\tactive = input<boolean>(false);\n\n\t/**\n\t * Custom CSS classes\n\t */\n\tclass = input<string>('');\n\n\t/**\n\t * Whether the item is disabled\n\t * @defaultValue false\n\t */\n\tdisabled = input<boolean>(false);\n\n\t/**\n\t * Whether to close the dropdown when the item is selected\n\t * @defaultValue true\n\t */\n\tcloseOnSelect = input<boolean>(true);\n\n\t/**\n\t * Event emitted when the item is selected\n\t */\n\tselected = output<void>();\n\n\t/**\n\t * @internal\n\t * Handles item selection and dropdown state\n\t */\n\thandleSelect() {\n\t\tif (this.disabled()) return;\n\n\t\tthis.selected.emit();\n\t\tif (this.closeOnSelect()) {\n\t\t\tthis.dropdown?.trigger()?.close();\n\t\t}\n\t}\n\n\t/**\n\t * Computed CSS classes for the menu item\n\t */\n\titemClass = () =>\n\t\tcn(\n\t\t\t'transition-colors',\n\t\t\t'duration-200',\n\t\t\t{\n\t\t\t\t'menu-disabled pointer-events-none opacity-50': this.disabled(),\n\t\t\t\t'menu-active': this.active(),\n\t\t\t},\n\t\t\tthis.class(),\n\t\t);\n}\n","<li\n\t[class]=\"itemClass()\"\n\t(click)=\"handleSelect()\"\n\t(keydown.enter)=\"handleSelect()\"\n\t(keydown.space)=\"handleSelect(); $event.preventDefault()\"\n\t[attr.tabindex]=\"disabled() ? -1 : 0\"\n\trole=\"menuitem\"\n\t[attr.aria-disabled]=\"disabled()\"\n>\n\t<a>\n\t\t<ng-content></ng-content>\n\t</a>\n</li>\n","import { Component, input } from '@angular/core';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\n\n/**\n * DropdownLabel - Label for dropdown sections\n * Provides section headers for dropdown content\n */\n@Component({\n\tselector: 'st-dropdown-label',\n\tstandalone: true,\n\ttemplateUrl: './dropdown-label.component.html',\n})\nexport class DropdownLabelComponent {\n\t/**\n\t * Custom CSS classes\n\t */\n\tclass = input<string>('');\n\n\t/**\n\t * Computed CSS classes for the label\n\t */\n\tlabelClass = () => cn('menu-title', this.class());\n}\n","<div [class]=\"labelClass()\">\n\t<ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * DropdownSeparator - Visual separator for dropdown menu sections\n *\n * @remarks\n * A simple horizontal divider to separate groups of dropdown items.\n *\n * @example\n * ```html\n * <st-dropdown-content>\n * <st-dropdown-item>Item 1</st-dropdown-item>\n * <st-dropdown-item>Item 2</st-dropdown-item>\n * <st-dropdown-separator></st-dropdown-separator>\n * <st-dropdown-item>Item 3</st-dropdown-item>\n * </st-dropdown-content>\n * ```\n */\n@Component({\n\tselector: 'st-dropdown-separator',\n\tstandalone: true,\n\ttemplateUrl: './dropdown-separator.component.html',\n})\nexport class DropdownSeparatorComponent {}\n","<li class=\"pointer-events-none top-0 left-0 mx-0 my-1 w-full p-0\"></li>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}