@acorex/components 22.3.4 → 22.3.6

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 (135) hide show
  1. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  2. package/fesm2022/acorex-components-action-sheet.mjs +2 -1
  3. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  4. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  5. package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -1
  6. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  7. package/fesm2022/acorex-components-autocomplete.mjs +2 -1
  8. package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
  9. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  10. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  11. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  12. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  13. package/fesm2022/acorex-components-bubble.mjs.map +1 -1
  14. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  15. package/fesm2022/acorex-components-button.mjs +96 -9
  16. package/fesm2022/acorex-components-button.mjs.map +1 -1
  17. package/fesm2022/acorex-components-calendar.mjs +2 -2
  18. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  19. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  20. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  21. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  22. package/fesm2022/acorex-components-code-editor.mjs.map +1 -1
  23. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  24. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  25. package/fesm2022/acorex-components-combo-box.mjs +3 -2
  26. package/fesm2022/acorex-components-combo-box.mjs.map +1 -1
  27. package/fesm2022/acorex-components-command.mjs +4 -0
  28. package/fesm2022/acorex-components-command.mjs.map +1 -1
  29. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  30. package/fesm2022/acorex-components-conversation-acorex-components-conversation-BZjCPB-7.mjs.map +1 -1
  31. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-F5fLD_SK.mjs.map +1 -1
  32. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -1
  33. package/fesm2022/acorex-components-conversation-image-picker-editor-dialog.component-Bk3ixvt2.mjs.map +1 -1
  34. package/fesm2022/acorex-components-conversation-picker-rename-file-dialog.component-CNwDWg_O.mjs.map +1 -1
  35. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  36. package/fesm2022/acorex-components-data-list.mjs.map +1 -1
  37. package/fesm2022/acorex-components-data-pager.mjs +45 -115
  38. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  39. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  40. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  41. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  42. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  43. package/fesm2022/acorex-components-decorators.mjs +2 -90
  44. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  45. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  46. package/fesm2022/acorex-components-drawer.mjs +1 -1
  47. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  48. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  49. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  50. package/fesm2022/acorex-components-editor.mjs.map +1 -1
  51. package/fesm2022/acorex-components-emoji.mjs.map +1 -1
  52. package/fesm2022/acorex-components-emojipicker.mjs.map +1 -1
  53. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  54. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -1
  55. package/fesm2022/acorex-components-form.mjs.map +1 -1
  56. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  57. package/fesm2022/acorex-components-highlight.mjs.map +1 -1
  58. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  59. package/fesm2022/acorex-components-image.mjs.map +1 -1
  60. package/fesm2022/acorex-components-inline-reaction.mjs.map +1 -1
  61. package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
  62. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  63. package/fesm2022/acorex-components-kbd.mjs.map +1 -1
  64. package/fesm2022/acorex-components-label.mjs.map +1 -1
  65. package/fesm2022/acorex-components-list.mjs.map +1 -1
  66. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  67. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  68. package/fesm2022/acorex-components-lookup.mjs +3 -2
  69. package/fesm2022/acorex-components-lookup.mjs.map +1 -1
  70. package/fesm2022/acorex-components-map.mjs.map +1 -1
  71. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  72. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  73. package/fesm2022/acorex-components-message-status.mjs.map +1 -1
  74. package/fesm2022/acorex-components-message-time.mjs.map +1 -1
  75. package/fesm2022/acorex-components-message.mjs.map +1 -1
  76. package/fesm2022/acorex-components-navbar.mjs.map +1 -1
  77. package/fesm2022/acorex-components-notification.mjs +1 -2
  78. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  79. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  80. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  81. package/fesm2022/acorex-components-page.mjs.map +1 -1
  82. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  83. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  84. package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
  85. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  86. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  87. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  88. package/fesm2022/acorex-components-popup.mjs +6 -6
  89. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  90. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  91. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  92. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  93. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  94. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  95. package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
  96. package/fesm2022/acorex-components-reaction.mjs.map +1 -1
  97. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  98. package/fesm2022/acorex-components-result.mjs.map +1 -1
  99. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  100. package/fesm2022/acorex-components-rrule.mjs.map +1 -1
  101. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  102. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  103. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  104. package/fesm2022/acorex-components-select-box.mjs +2 -1
  105. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  106. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  107. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  108. package/fesm2022/acorex-components-sidebar.mjs.map +1 -1
  109. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  110. package/fesm2022/acorex-components-slider.mjs.map +1 -1
  111. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  112. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  113. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  114. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  115. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  116. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  117. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  118. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  119. package/fesm2022/acorex-components-time-duration.mjs.map +1 -1
  120. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  121. package/fesm2022/acorex-components-toast.mjs +2 -2
  122. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  123. package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
  124. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  125. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  126. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  127. package/fesm2022/acorex-components-video-player.mjs.map +1 -1
  128. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  129. package/fesm2022/acorex-components.mjs.map +1 -1
  130. package/package.json +3 -3
  131. package/types/acorex-components-button.d.ts +33 -3
  132. package/types/acorex-components-command.d.ts +2 -0
  133. package/types/acorex-components-data-pager.d.ts +1 -7
  134. package/types/acorex-components-decorators.d.ts +2 -32
  135. package/types/acorex-components-popup.d.ts +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-emojipicker.mjs","sources":["../../../../packages/components/emojipicker/src/lib/emoji-picker.utils.ts","../../../../packages/components/emojipicker/src/lib/emoji-picker.component.ts","../../../../packages/components/emojipicker/src/lib/emoji-picker.component.html","../../../../packages/components/emojipicker/src/lib/emojipicker.module.ts","../../../../packages/components/emojipicker/src/acorex-components-emojipicker.ts"],"sourcesContent":["import { AXEmoji, AXEmojiCategory, isPickerPeopleBodyEmoji } from '@acorex/core/constants';\n\n/** Maximum number of emojis kept in the recent list. */\nexport const RECENT_EMOJI_LIMIT = 20;\n\n/** Grid cell size in px (`--ax-comp-emoji-picker-cell-size`). */\nexport const EMOJI_PICKER_CELL_SIZE_PX = 36;\n\n/** Grid cell size in px on narrow viewports. */\nexport const EMOJI_PICKER_CELL_SIZE_PX_COMPACT = 32;\n\n/** Gap between grid cells in px (`--ax-comp-emoji-picker-cell-gap`). */\nexport const EMOJI_PICKER_CELL_GAP_PX = 2;\n\n/** Horizontal padding around the emoji grid in px. */\nexport const EMOJI_PICKER_GRID_PADDING_PX = 24;\n\n/** Minimum column count. */\nexport const EMOJI_PICKER_MIN_COLUMNS = 1;\n\nfunction contentBoxWidth(element: HTMLElement): number {\n const style = getComputedStyle(element);\n const paddingX =\n (Number.parseFloat(style.paddingLeft) || 0) + (Number.parseFloat(style.paddingRight) || 0);\n return Math.max(0, element.clientWidth - paddingX);\n}\n\nfunction isClippedOverflow(overflowX: string): boolean {\n return overflowX === 'hidden' || overflowX === 'auto' || overflowX === 'scroll' || overflowX === 'clip';\n}\n\n/** Remaining inline space for `element` inside `container`. */\nfunction visibleInlineSpace(elementRect: DOMRect, container: HTMLElement, isRtl: boolean): number {\n const containerRect = container.getBoundingClientRect();\n const start = isRtl\n ? containerRect.right - Math.min(elementRect.right, containerRect.right)\n : Math.min(elementRect.left, containerRect.right) - containerRect.left;\n\n return Math.max(0, contentBoxWidth(container) - Math.max(0, start));\n}\n\n/** Nearest ancestor that participates in layout (skips `display: contents`). */\nexport function getEmojiPickerLayoutContainer(element: HTMLElement): HTMLElement {\n let current: HTMLElement | null = element.parentElement;\n\n while (current) {\n const display = getComputedStyle(current).display;\n if (display !== 'contents' && current.clientWidth > 0) {\n return current;\n }\n current = current.parentElement;\n }\n\n return element;\n}\n\n/**\n * Available width for the picker grid.\n * Uses the tightest ancestor content box and the visible viewport slot so an\n * overflowing parent cannot keep an 8-column grid that is clipped off-screen.\n */\nexport function resolveEmojiPickerContainerWidth(element: HTMLElement): number {\n const viewportWidth =\n typeof globalThis.window !== 'undefined' ? globalThis.window.innerWidth : 0;\n const isRtl = getComputedStyle(element).direction === 'rtl';\n const rect = element.getBoundingClientRect();\n let available = viewportWidth > 0 ? viewportWidth : 0;\n\n if (viewportWidth > 0) {\n const visibleInViewport = isRtl ? Math.max(0, rect.right) : viewportWidth - Math.max(0, rect.left);\n available = available > 0 ? Math.min(available, visibleInViewport) : visibleInViewport;\n }\n\n let current: HTMLElement | null = element.parentElement;\n\n while (current) {\n const style = getComputedStyle(current);\n if (style.display !== 'contents' && current.clientWidth > 0) {\n available = available > 0 ? Math.min(available, contentBoxWidth(current)) : contentBoxWidth(current);\n\n if (isClippedOverflow(style.overflowX) || isClippedOverflow(style.overflow)) {\n available = Math.min(available, visibleInlineSpace(rect, current, isRtl));\n }\n }\n current = current.parentElement;\n }\n\n return Math.max(0, Math.floor(available));\n}\n\n/** Resolves column count from container width while keeping a fixed cell size and gap. */\nexport function resolveEmojiPickerColumns(containerWidth: number, requested: number): number {\n const maxColumns = Math.max(EMOJI_PICKER_MIN_COLUMNS, requested);\n\n if (containerWidth <= 0) {\n return maxColumns;\n }\n\n const cellSizePx =\n containerWidth < 400 ? EMOJI_PICKER_CELL_SIZE_PX_COMPACT : EMOJI_PICKER_CELL_SIZE_PX;\n const availableWidth = Math.max(0, containerWidth - EMOJI_PICKER_GRID_PADDING_PX);\n const fittedColumns = Math.floor(\n (availableWidth + EMOJI_PICKER_CELL_GAP_PX) / (cellSizePx + EMOJI_PICKER_CELL_GAP_PX),\n );\n\n return Math.max(EMOJI_PICKER_MIN_COLUMNS, Math.min(maxColumns, fittedColumns));\n}\n\n/** Maximum number of emojis returned by search. */\nexport const SEARCH_RESULT_LIMIT = 200;\n\n/** User-defined exclusions for picker emoji lists. */\nexport interface AXEmojiPickerFilter {\n /** Unicode emoji group categories to hide from tabs and results. */\n readonly excludeCategories?: readonly AXEmojiCategory[];\n /** `AXEmoji.code` values to hide (hyphen-separated code points, e.g. `1f595`). */\n readonly excludeCodes?: readonly string[];\n /** `AXEmoji.unicode` glyph values to hide (e.g. `👋`). */\n readonly excludeUnicode?: readonly string[];\n}\n\ninterface AXResolvedEmojiPickerFilter {\n excludeCategories: ReadonlySet<AXEmojiCategory>;\n excludeCodes: ReadonlySet<string>;\n excludeUnicode: ReadonlySet<string>;\n}\n\nconst categoryIndexCache = new WeakMap<readonly AXEmoji[], ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]>>();\n\nfunction normalizeCode(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction resolvePickerFilter(filter?: AXEmojiPickerFilter): AXResolvedEmojiPickerFilter {\n return {\n excludeCategories: new Set(filter?.excludeCategories ?? []),\n excludeCodes: new Set((filter?.excludeCodes ?? []).map(normalizeCode)),\n excludeUnicode: new Set(filter?.excludeUnicode ?? []),\n };\n}\n\nfunction isPickerEmojiAllowed(emoji: AXEmoji, filter: AXResolvedEmojiPickerFilter): boolean {\n if (emoji.category === 'component') {\n return false;\n }\n\n if (emoji.category === 'people-body' && !isPickerPeopleBodyEmoji(emoji.code)) {\n return false;\n }\n\n if (filter.excludeCategories.has(emoji.category)) {\n return false;\n }\n\n if (filter.excludeCodes.has(normalizeCode(emoji.code))) {\n return false;\n }\n\n if (filter.excludeUnicode.has(emoji.unicode)) {\n return false;\n }\n\n return true;\n}\n\n/** Applies picker exclusions and default people-body curation. */\nexport function filterPickerItems(items: readonly AXEmoji[], filter?: AXEmojiPickerFilter): readonly AXEmoji[] {\n const resolvedFilter = resolvePickerFilter(filter);\n return items.filter((emoji) => isPickerEmojiAllowed(emoji, resolvedFilter));\n}\n\n/**\n * Builds a category index for picker rendering.\n * Expects items to be pre-filtered with {@link filterPickerItems}.\n */\nexport function buildEmojiPickerIndex(items: readonly AXEmoji[]): ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]> {\n const cached = categoryIndexCache.get(items);\n if (cached) {\n return cached;\n }\n\n const map = new Map<AXEmojiCategory, AXEmoji[]>();\n\n for (const emoji of items) {\n const bucket = map.get(emoji.category) ?? [];\n bucket.push(emoji);\n map.set(emoji.category, bucket);\n }\n\n const readonlyMap: ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]> = map;\n categoryIndexCache.set(items, readonlyMap);\n return readonlyMap;\n}\n\n/** Searches pre-filtered emoji metadata by name and keywords. */\nexport function searchPickerEmojis(\n items: readonly AXEmoji[],\n query: string,\n limit = SEARCH_RESULT_LIMIT,\n): readonly AXEmoji[] {\n const normalizedQuery = query.toLowerCase().trim();\n if (!normalizedQuery) {\n return [];\n }\n\n const results: AXEmoji[] = [];\n\n for (const emoji of items) {\n const haystack = `${emoji.name} ${emoji.keywords.join(' ')}`.toLowerCase();\n if (!haystack.includes(normalizedQuery)) {\n continue;\n }\n\n results.push(emoji);\n if (results.length >= limit) {\n break;\n }\n }\n\n return results;\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXGestureDirective, AXGestureEvent } from '@acorex/cdk/gesture';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabItemComponent, AXTabsComponent, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport {\n AX_EMOJI_CATEGORIES,\n AX_EMOJI_PICKER_CATEGORY_RECENT,\n AX_EMOJIS_FOR_PICKER,\n AXEmoji,\n AXEmojiCategory,\n AXEmojiCategoryMeta,\n AXEmojiPickerCategoryId,\n} from '@acorex/core/constants';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport {\n afterNextRender,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXEmojiComponent } from '@acorex/components/emoji';\nimport {\n buildEmojiPickerIndex,\n filterPickerItems,\n getEmojiPickerLayoutContainer,\n RECENT_EMOJI_LIMIT,\n resolveEmojiPickerColumns,\n resolveEmojiPickerContainerWidth,\n searchPickerEmojis,\n} from './emoji-picker.utils';\n\nconst DEFAULT_COLUMNS = 8;\n\n/**\n * Telegram-style emoji picker with category tabs, search, and recent emojis.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-emoji-picker',\n templateUrl: './emoji-picker.component.html',\n styleUrls: ['./emoji-picker.component.css'],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-emoji-picker',\n '[class.ax-emoji-picker-native]': 'appearance() === \"native\"',\n '[style.--ax-comp-emoji-picker-columns]': 'effectiveColumns()',\n '[style.--ax-comp-emoji-picker-available-width]': 'availableWidthCss()',\n },\n imports: [\n FormsModule,\n ScrollingModule,\n AXSearchBoxModule,\n AXEmojiComponent,\n AXTabsComponent,\n AXTabItemComponent,\n AXGestureDirective,\n ],\n})\nexport class AXEmojiPickerComponent {\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Emoji entries available in the picker. */\n readonly items = input<readonly AXEmoji[]>(AX_EMOJIS_FOR_PICKER);\n\n /** Rendered emoji size in the grid. */\n readonly size = input(24);\n\n /**\n * Emoji rendering style passed to {@link AXEmojiComponent}.\n * `google` uses Noto Color Emoji (Android/Google look) on Windows too.\n *\n * @defaultValue 'google'\n */\n readonly appearance = input<'google' | 'native'>('google');\n\n /** Whether the search box is shown. */\n readonly showSearch = input(true);\n\n /** Whether the recent category tab is shown. */\n readonly showRecent = input(true);\n\n /** Number of emoji columns in the virtualized grid. */\n readonly columns = input(DEFAULT_COLUMNS);\n\n /** Search box placeholder text. */\n readonly searchPlaceholder = input('Search...');\n\n /** Unicode emoji group categories to hide from tabs and results. */\n readonly excludeCategories = input<readonly AXEmojiCategory[]>([]);\n\n /** `AXEmoji.code` values to hide (e.g. `1f595`). */\n readonly excludeCodes = input<readonly string[]>([]);\n\n /** `AXEmoji.unicode` glyph values to hide (e.g. `🖕`). */\n readonly excludeUnicode = input<readonly string[]>([]);\n\n /** Emits when the user selects an emoji. */\n readonly selected = output<AXEmoji>();\n\n /**\n * Recently used emojis supplied by the parent (e.g. API, LocalStorage).\n * Rendered in the Recent tab when {@link showRecent} is enabled.\n */\n readonly recentItems = input<readonly AXEmoji[]>([]);\n\n /** Emits the updated recent list after the user selects an allowed emoji. */\n readonly recentChanged = output<readonly AXEmoji[]>();\n\n /** Current search query. */\n protected readonly searchQuery = signal('');\n\n /** Active category tab. */\n protected readonly activeCategoryId = signal<AXEmojiPickerCategoryId>('smileys-emotion');\n\n private readonly containerWidth = signal(0);\n\n protected readonly effectiveColumns = computed(() =>\n resolveEmojiPickerColumns(this.containerWidth(), this.columns()),\n );\n\n protected readonly availableWidthCss = computed(() => {\n const width = this.containerWidth();\n return width > 0 ? `${width}px` : '100%';\n });\n\n constructor() {\n afterNextRender(() => {\n const element = this.hostRef.nativeElement;\n let observedContainer: HTMLElement | null = null;\n let observedHost: HTMLElement | null = null;\n\n const updateLayout = () => {\n const container = getEmojiPickerLayoutContainer(element);\n\n if (observedContainer !== container) {\n if (observedContainer) {\n observer.unobserve(observedContainer);\n }\n observer.observe(container);\n observedContainer = container;\n }\n\n if (observedHost !== element) {\n observer.observe(element);\n observedHost = element;\n }\n\n this.containerWidth.set(resolveEmojiPickerContainerWidth(element));\n };\n\n const observer = new ResizeObserver(updateLayout);\n const viewport = globalThis.window.visualViewport;\n\n globalThis.window.addEventListener('resize', updateLayout);\n viewport?.addEventListener('resize', updateLayout);\n observer.observe(document.documentElement);\n updateLayout();\n\n this.destroyRef.onDestroy(() => {\n observer.disconnect();\n globalThis.window.removeEventListener('resize', updateLayout);\n viewport?.removeEventListener('resize', updateLayout);\n });\n });\n }\n\n /** Items after picker exclusions are applied. */\n protected readonly filteredItems = computed(() =>\n filterPickerItems(this.items(), {\n excludeCategories: this.excludeCategories(),\n excludeCodes: this.excludeCodes(),\n excludeUnicode: this.excludeUnicode(),\n }),\n );\n\n private readonly categoryIndex = computed(() => buildEmojiPickerIndex(this.filteredItems()));\n\n /** Recent items after active exclusions are applied for display. */\n protected readonly visibleRecentItems = computed(() => {\n const allowedCodes = new Set(this.filteredItems().map((emoji) => emoji.code));\n return this.recentItems().filter((emoji) => allowedCodes.has(emoji.code));\n });\n\n protected onCategorySwipe(event: AXGestureEvent): void {}\n\n /** Visible category tabs. */\n protected readonly categories = computed((): readonly AXEmojiCategoryMeta[] => {\n const excludedCategories = new Set(this.excludeCategories());\n const categories = this.showRecent()\n ? AX_EMOJI_CATEGORIES\n : AX_EMOJI_CATEGORIES.filter((category) => category.id !== AX_EMOJI_PICKER_CATEGORY_RECENT);\n\n return categories.filter((category) => {\n if (category.id === AX_EMOJI_PICKER_CATEGORY_RECENT) {\n return true;\n }\n\n return !excludedCategories.has(category.id as AXEmojiCategory);\n });\n });\n\n /** Emojis shown in the current view (category or search results). */\n protected readonly visibleEmojis = computed((): readonly AXEmoji[] => {\n const query = this.searchQuery().trim();\n if (query) {\n return searchPickerEmojis(this.filteredItems(), query);\n }\n\n const categoryId = this.activeCategoryId();\n if (categoryId === AX_EMOJI_PICKER_CATEGORY_RECENT) {\n return this.visibleRecentItems();\n }\n\n return this.categoryIndex().get(categoryId as AXEmojiCategory) ?? [];\n });\n\n /** Rows used by the virtual scroll viewport. */\n protected readonly emojiRows = computed((): readonly (readonly AXEmoji[])[] => {\n const emojis = this.visibleEmojis();\n const columnCount = Math.max(1, this.effectiveColumns());\n const rows: AXEmoji[][] = [];\n\n for (let index = 0; index < emojis.length; index += columnCount) {\n rows.push(emojis.slice(index, index + columnCount));\n }\n\n return rows;\n });\n\n /** Virtual scroll row height in pixels. */\n protected readonly rowHeight = computed(() => this.size() + 6);\n\n /** Whether the user is searching. */\n protected readonly isSearching = computed(() => this.searchQuery().trim().length > 0);\n\n /** Whether the current view has no emojis. */\n protected readonly isEmpty = computed(() => this.visibleEmojis().length === 0);\n\n /** Keeps the active tab valid when exclusions change. */\n private readonly syncActiveCategory = effect(() => {\n const categories = this.categories();\n const activeCategoryId = this.activeCategoryId();\n\n if (categories.some((category) => category.id === activeCategoryId)) {\n return;\n }\n\n this.activeCategoryId.set(categories[0]?.id ?? 'smileys-emotion');\n });\n\n /** Selects a category tab and clears search. */\n protected selectCategory(categoryId: AXEmojiPickerCategoryId): void {\n this.activeCategoryId.set(categoryId);\n this.searchQuery.set('');\n }\n\n /** Whether the given category tab is active. */\n protected isCategoryActive(categoryId: AXEmojiPickerCategoryId): boolean {\n return !this.isSearching() && this.activeCategoryId() === categoryId;\n }\n\n /** Whether the category tab is the virtual recent group. */\n protected isRecentCategory(categoryId: AXEmojiPickerCategoryId): boolean {\n return categoryId === AX_EMOJI_PICKER_CATEGORY_RECENT;\n }\n\n /** Syncs the active emoji category when a tab is selected. */\n protected onCategoryTabChanged(event: AXTabStripChangedEvent): void {\n const categoryId = event.tab?.key as AXEmojiPickerCategoryId | undefined;\n if (categoryId) {\n this.selectCategory(categoryId);\n }\n }\n\n /** Updates the search query from the search box. */\n protected onSearchChanged(event: AXValueChangedEvent<string>): void {\n this.searchQuery.set(event.value ?? '');\n }\n\n /** Emits the selected emoji and notifies the parent of the updated recent list. */\n protected selectEmoji(emoji: AXEmoji): void {\n this.rememberRecent(emoji);\n this.selected.emit(emoji);\n }\n\n /** @ignore */\n protected trackRow(index: number, row: readonly AXEmoji[]): string {\n return row[0]?.code ?? String(index);\n }\n\n private rememberRecent(emoji: AXEmoji): void {\n const isAllowed =\n filterPickerItems([emoji], {\n excludeCategories: this.excludeCategories(),\n excludeCodes: this.excludeCodes(),\n excludeUnicode: this.excludeUnicode(),\n }).length > 0;\n\n if (!isAllowed) {\n return;\n }\n\n const next = [emoji, ...this.recentItems().filter((item) => item.code !== emoji.code)].slice(0, RECENT_EMOJI_LIMIT);\n\n this.recentChanged.emit(next);\n }\n}\n","<div class=\"ax-emoji-picker-layout\">\n <ax-tabs\n class=\"ax-emoji-picker-categories\"\n [look]=\"'pills'\"\n location=\"bottom\"\n [attr.aria-label]=\"'Emoji categories'\"\n (onActiveTabChanged)=\"onCategoryTabChanged($event)\"\n axGesture\n direction=\"horizontal\"\n (swipe)=\"onCategorySwipe($event)\"\n >\n @for (category of categories(); track category.id) {\n <ax-tab-item\n [text]=\"category.iconUnicode\"\n [key]=\"category.id\"\n [active]=\"isCategoryActive(category.id)\"\n [class.ax-emoji-picker-tab-recent]=\"isRecentCategory(category.id)\"\n [attr.aria-label]=\"category.label\"\n [title]=\"category.label\"\n ></ax-tab-item>\n }\n </ax-tabs>\n\n <div class=\"ax-emoji-picker-search-container\">\n @if (showSearch()) {\n <div class=\"ax-emoji-picker-search\">\n <ax-search-box\n [look]=\"'fill'\"\n [value]=\"searchQuery()\"\n [placeholder]=\"searchPlaceholder()\"\n [delayTime]=\"250\"\n (onValueChanged)=\"onSearchChanged($event)\"\n ></ax-search-box>\n </div>\n }\n\n @if (isEmpty()) {\n <div class=\"ax-emoji-picker-empty\">\n @if (isSearching()) {\n <span>No emojis found</span>\n } @else if (activeCategoryId() === 'recent') {\n <span>No recent emojis yet</span>\n } @else {\n <span>No emojis in this category</span>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport\n class=\"ax-emoji-picker-grid\"\n [itemSize]=\"rowHeight()\"\n [minBufferPx]=\"rowHeight() * 4\"\n [maxBufferPx]=\"rowHeight() * 8\"\n >\n <div class=\"ax-emoji-picker-row\" *cdkVirtualFor=\"let row of emojiRows(); trackBy: trackRow\">\n @for (emoji of row; track emoji.code) {\n <button\n type=\"button\"\n class=\"ax-emoji-picker-item\"\n (click)=\"selectEmoji(emoji)\"\n [attr.aria-label]=\"emoji.name\"\n [title]=\"emoji.name\"\n >\n <ax-emoji [emoji]=\"emoji\" [size]=\"size()\" [appearance]=\"appearance()\"></ax-emoji>\n </button>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { AXEmojiPickerComponent } from './emoji-picker.component';\n\n@NgModule({\n imports: [AXEmojiPickerComponent],\n exports: [AXEmojiPickerComponent],\n})\nexport class AXEmojiPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-emojipicker.mjs","sources":["../../../../packages/components/emojipicker/src/lib/emoji-picker.utils.ts","../../../../packages/components/emojipicker/src/lib/emoji-picker.component.ts","../../../../packages/components/emojipicker/src/lib/emoji-picker.component.html","../../../../packages/components/emojipicker/src/lib/emojipicker.module.ts","../../../../packages/components/emojipicker/src/acorex-components-emojipicker.ts"],"sourcesContent":["import { AXEmoji, AXEmojiCategory, isPickerPeopleBodyEmoji } from '@acorex/core/constants';\n\n/** Maximum number of emojis kept in the recent list. */\nexport const RECENT_EMOJI_LIMIT = 20;\n\n/** Grid cell size in px (`--ax-comp-emoji-picker-cell-size`). */\nexport const EMOJI_PICKER_CELL_SIZE_PX = 36;\n\n/** Grid cell size in px on narrow viewports. */\nexport const EMOJI_PICKER_CELL_SIZE_PX_COMPACT = 32;\n\n/** Gap between grid cells in px (`--ax-comp-emoji-picker-cell-gap`). */\nexport const EMOJI_PICKER_CELL_GAP_PX = 2;\n\n/** Horizontal padding around the emoji grid in px. */\nexport const EMOJI_PICKER_GRID_PADDING_PX = 24;\n\n/** Minimum column count. */\nexport const EMOJI_PICKER_MIN_COLUMNS = 1;\n\nfunction contentBoxWidth(element: HTMLElement): number {\n const style = getComputedStyle(element);\n const paddingX =\n (Number.parseFloat(style.paddingLeft) || 0) + (Number.parseFloat(style.paddingRight) || 0);\n return Math.max(0, element.clientWidth - paddingX);\n}\n\nfunction isClippedOverflow(overflowX: string): boolean {\n return overflowX === 'hidden' || overflowX === 'auto' || overflowX === 'scroll' || overflowX === 'clip';\n}\n\n/** Remaining inline space for `element` inside `container`. */\nfunction visibleInlineSpace(elementRect: DOMRect, container: HTMLElement, isRtl: boolean): number {\n const containerRect = container.getBoundingClientRect();\n const start = isRtl\n ? containerRect.right - Math.min(elementRect.right, containerRect.right)\n : Math.min(elementRect.left, containerRect.right) - containerRect.left;\n\n return Math.max(0, contentBoxWidth(container) - Math.max(0, start));\n}\n\n/** Nearest ancestor that participates in layout (skips `display: contents`). */\nexport function getEmojiPickerLayoutContainer(element: HTMLElement): HTMLElement {\n let current: HTMLElement | null = element.parentElement;\n\n while (current) {\n const display = getComputedStyle(current).display;\n if (display !== 'contents' && current.clientWidth > 0) {\n return current;\n }\n current = current.parentElement;\n }\n\n return element;\n}\n\n/**\n * Available width for the picker grid.\n * Uses the tightest ancestor content box and the visible viewport slot so an\n * overflowing parent cannot keep an 8-column grid that is clipped off-screen.\n */\nexport function resolveEmojiPickerContainerWidth(element: HTMLElement): number {\n const viewportWidth =\n typeof globalThis.window !== 'undefined' ? globalThis.window.innerWidth : 0;\n const isRtl = getComputedStyle(element).direction === 'rtl';\n const rect = element.getBoundingClientRect();\n let available = viewportWidth > 0 ? viewportWidth : 0;\n\n if (viewportWidth > 0) {\n const visibleInViewport = isRtl ? Math.max(0, rect.right) : viewportWidth - Math.max(0, rect.left);\n available = available > 0 ? Math.min(available, visibleInViewport) : visibleInViewport;\n }\n\n let current: HTMLElement | null = element.parentElement;\n\n while (current) {\n const style = getComputedStyle(current);\n if (style.display !== 'contents' && current.clientWidth > 0) {\n available = available > 0 ? Math.min(available, contentBoxWidth(current)) : contentBoxWidth(current);\n\n if (isClippedOverflow(style.overflowX) || isClippedOverflow(style.overflow)) {\n available = Math.min(available, visibleInlineSpace(rect, current, isRtl));\n }\n }\n current = current.parentElement;\n }\n\n return Math.max(0, Math.floor(available));\n}\n\n/** Resolves column count from container width while keeping a fixed cell size and gap. */\nexport function resolveEmojiPickerColumns(containerWidth: number, requested: number): number {\n const maxColumns = Math.max(EMOJI_PICKER_MIN_COLUMNS, requested);\n\n if (containerWidth <= 0) {\n return maxColumns;\n }\n\n const cellSizePx =\n containerWidth < 400 ? EMOJI_PICKER_CELL_SIZE_PX_COMPACT : EMOJI_PICKER_CELL_SIZE_PX;\n const availableWidth = Math.max(0, containerWidth - EMOJI_PICKER_GRID_PADDING_PX);\n const fittedColumns = Math.floor(\n (availableWidth + EMOJI_PICKER_CELL_GAP_PX) / (cellSizePx + EMOJI_PICKER_CELL_GAP_PX),\n );\n\n return Math.max(EMOJI_PICKER_MIN_COLUMNS, Math.min(maxColumns, fittedColumns));\n}\n\n/** Maximum number of emojis returned by search. */\nexport const SEARCH_RESULT_LIMIT = 200;\n\n/** User-defined exclusions for picker emoji lists. */\nexport interface AXEmojiPickerFilter {\n /** Unicode emoji group categories to hide from tabs and results. */\n readonly excludeCategories?: readonly AXEmojiCategory[];\n /** `AXEmoji.code` values to hide (hyphen-separated code points, e.g. `1f595`). */\n readonly excludeCodes?: readonly string[];\n /** `AXEmoji.unicode` glyph values to hide (e.g. `👋`). */\n readonly excludeUnicode?: readonly string[];\n}\n\ninterface AXResolvedEmojiPickerFilter {\n excludeCategories: ReadonlySet<AXEmojiCategory>;\n excludeCodes: ReadonlySet<string>;\n excludeUnicode: ReadonlySet<string>;\n}\n\nconst categoryIndexCache = new WeakMap<readonly AXEmoji[], ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]>>();\n\nfunction normalizeCode(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction resolvePickerFilter(filter?: AXEmojiPickerFilter): AXResolvedEmojiPickerFilter {\n return {\n excludeCategories: new Set(filter?.excludeCategories ?? []),\n excludeCodes: new Set((filter?.excludeCodes ?? []).map(normalizeCode)),\n excludeUnicode: new Set(filter?.excludeUnicode ?? []),\n };\n}\n\nfunction isPickerEmojiAllowed(emoji: AXEmoji, filter: AXResolvedEmojiPickerFilter): boolean {\n if (emoji.category === 'component') {\n return false;\n }\n\n if (emoji.category === 'people-body' && !isPickerPeopleBodyEmoji(emoji.code)) {\n return false;\n }\n\n if (filter.excludeCategories.has(emoji.category)) {\n return false;\n }\n\n if (filter.excludeCodes.has(normalizeCode(emoji.code))) {\n return false;\n }\n\n if (filter.excludeUnicode.has(emoji.unicode)) {\n return false;\n }\n\n return true;\n}\n\n/** Applies picker exclusions and default people-body curation. */\nexport function filterPickerItems(items: readonly AXEmoji[], filter?: AXEmojiPickerFilter): readonly AXEmoji[] {\n const resolvedFilter = resolvePickerFilter(filter);\n return items.filter((emoji) => isPickerEmojiAllowed(emoji, resolvedFilter));\n}\n\n/**\n * Builds a category index for picker rendering.\n * Expects items to be pre-filtered with {@link filterPickerItems}.\n */\nexport function buildEmojiPickerIndex(items: readonly AXEmoji[]): ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]> {\n const cached = categoryIndexCache.get(items);\n if (cached) {\n return cached;\n }\n\n const map = new Map<AXEmojiCategory, AXEmoji[]>();\n\n for (const emoji of items) {\n const bucket = map.get(emoji.category) ?? [];\n bucket.push(emoji);\n map.set(emoji.category, bucket);\n }\n\n const readonlyMap: ReadonlyMap<AXEmojiCategory, readonly AXEmoji[]> = map;\n categoryIndexCache.set(items, readonlyMap);\n return readonlyMap;\n}\n\n/** Searches pre-filtered emoji metadata by name and keywords. */\nexport function searchPickerEmojis(\n items: readonly AXEmoji[],\n query: string,\n limit = SEARCH_RESULT_LIMIT,\n): readonly AXEmoji[] {\n const normalizedQuery = query.toLowerCase().trim();\n if (!normalizedQuery) {\n return [];\n }\n\n const results: AXEmoji[] = [];\n\n for (const emoji of items) {\n const haystack = `${emoji.name} ${emoji.keywords.join(' ')}`.toLowerCase();\n if (!haystack.includes(normalizedQuery)) {\n continue;\n }\n\n results.push(emoji);\n if (results.length >= limit) {\n break;\n }\n }\n\n return results;\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXGestureDirective, AXGestureEvent } from '@acorex/cdk/gesture';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabItemComponent, AXTabsComponent, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport {\n AX_EMOJI_CATEGORIES,\n AX_EMOJI_PICKER_CATEGORY_RECENT,\n AX_EMOJIS_FOR_PICKER,\n AXEmoji,\n AXEmojiCategory,\n AXEmojiCategoryMeta,\n AXEmojiPickerCategoryId,\n} from '@acorex/core/constants';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport {\n afterNextRender,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXEmojiComponent } from '@acorex/components/emoji';\nimport {\n buildEmojiPickerIndex,\n filterPickerItems,\n getEmojiPickerLayoutContainer,\n RECENT_EMOJI_LIMIT,\n resolveEmojiPickerColumns,\n resolveEmojiPickerContainerWidth,\n searchPickerEmojis,\n} from './emoji-picker.utils';\n\nconst DEFAULT_COLUMNS = 8;\n\n/**\n * Telegram-style emoji picker with category tabs, search, and recent emojis.\n *\n * @category Components\n */\n@Component({\n selector: 'ax-emoji-picker',\n templateUrl: './emoji-picker.component.html',\n styleUrls: ['./emoji-picker.component.css'],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-emoji-picker',\n '[class.ax-emoji-picker-native]': 'appearance() === \"native\"',\n '[style.--ax-comp-emoji-picker-columns]': 'effectiveColumns()',\n '[style.--ax-comp-emoji-picker-available-width]': 'availableWidthCss()',\n },\n imports: [\n FormsModule,\n ScrollingModule,\n AXSearchBoxModule,\n AXEmojiComponent,\n AXTabsComponent,\n AXTabItemComponent,\n AXGestureDirective,\n ],\n})\nexport class AXEmojiPickerComponent {\n private readonly hostRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Emoji entries available in the picker. */\n readonly items = input<readonly AXEmoji[]>(AX_EMOJIS_FOR_PICKER);\n\n /** Rendered emoji size in the grid. */\n readonly size = input(24);\n\n /**\n * Emoji rendering style passed to {@link AXEmojiComponent}.\n * `google` uses Noto Color Emoji (Android/Google look) on Windows too.\n *\n * @defaultValue 'google'\n */\n readonly appearance = input<'google' | 'native'>('google');\n\n /** Whether the search box is shown. */\n readonly showSearch = input(true);\n\n /** Whether the recent category tab is shown. */\n readonly showRecent = input(true);\n\n /** Number of emoji columns in the virtualized grid. */\n readonly columns = input(DEFAULT_COLUMNS);\n\n /** Search box placeholder text. */\n readonly searchPlaceholder = input('Search...');\n\n /** Unicode emoji group categories to hide from tabs and results. */\n readonly excludeCategories = input<readonly AXEmojiCategory[]>([]);\n\n /** `AXEmoji.code` values to hide (e.g. `1f595`). */\n readonly excludeCodes = input<readonly string[]>([]);\n\n /** `AXEmoji.unicode` glyph values to hide (e.g. `🖕`). */\n readonly excludeUnicode = input<readonly string[]>([]);\n\n /** Emits when the user selects an emoji. */\n readonly selected = output<AXEmoji>();\n\n /**\n * Recently used emojis supplied by the parent (e.g. API, LocalStorage).\n * Rendered in the Recent tab when {@link showRecent} is enabled.\n */\n readonly recentItems = input<readonly AXEmoji[]>([]);\n\n /** Emits the updated recent list after the user selects an allowed emoji. */\n readonly recentChanged = output<readonly AXEmoji[]>();\n\n /** Current search query. */\n protected readonly searchQuery = signal('');\n\n /** Active category tab. */\n protected readonly activeCategoryId = signal<AXEmojiPickerCategoryId>('smileys-emotion');\n\n private readonly containerWidth = signal(0);\n\n protected readonly effectiveColumns = computed(() =>\n resolveEmojiPickerColumns(this.containerWidth(), this.columns()),\n );\n\n protected readonly availableWidthCss = computed(() => {\n const width = this.containerWidth();\n return width > 0 ? `${width}px` : '100%';\n });\n\n constructor() {\n afterNextRender(() => {\n const element = this.hostRef.nativeElement;\n let observedContainer: HTMLElement | null = null;\n let observedHost: HTMLElement | null = null;\n\n const updateLayout = () => {\n const container = getEmojiPickerLayoutContainer(element);\n\n if (observedContainer !== container) {\n if (observedContainer) {\n observer.unobserve(observedContainer);\n }\n observer.observe(container);\n observedContainer = container;\n }\n\n if (observedHost !== element) {\n observer.observe(element);\n observedHost = element;\n }\n\n this.containerWidth.set(resolveEmojiPickerContainerWidth(element));\n };\n\n const observer = new ResizeObserver(updateLayout);\n const viewport = globalThis.window.visualViewport;\n\n globalThis.window.addEventListener('resize', updateLayout);\n viewport?.addEventListener('resize', updateLayout);\n observer.observe(document.documentElement);\n updateLayout();\n\n this.destroyRef.onDestroy(() => {\n observer.disconnect();\n globalThis.window.removeEventListener('resize', updateLayout);\n viewport?.removeEventListener('resize', updateLayout);\n });\n });\n }\n\n /** Items after picker exclusions are applied. */\n protected readonly filteredItems = computed(() =>\n filterPickerItems(this.items(), {\n excludeCategories: this.excludeCategories(),\n excludeCodes: this.excludeCodes(),\n excludeUnicode: this.excludeUnicode(),\n }),\n );\n\n private readonly categoryIndex = computed(() => buildEmojiPickerIndex(this.filteredItems()));\n\n /** Recent items after active exclusions are applied for display. */\n protected readonly visibleRecentItems = computed(() => {\n const allowedCodes = new Set(this.filteredItems().map((emoji) => emoji.code));\n return this.recentItems().filter((emoji) => allowedCodes.has(emoji.code));\n });\n\n protected onCategorySwipe(event: AXGestureEvent): void {}\n\n /** Visible category tabs. */\n protected readonly categories = computed((): readonly AXEmojiCategoryMeta[] => {\n const excludedCategories = new Set(this.excludeCategories());\n const categories = this.showRecent()\n ? AX_EMOJI_CATEGORIES\n : AX_EMOJI_CATEGORIES.filter((category) => category.id !== AX_EMOJI_PICKER_CATEGORY_RECENT);\n\n return categories.filter((category) => {\n if (category.id === AX_EMOJI_PICKER_CATEGORY_RECENT) {\n return true;\n }\n\n return !excludedCategories.has(category.id as AXEmojiCategory);\n });\n });\n\n /** Emojis shown in the current view (category or search results). */\n protected readonly visibleEmojis = computed((): readonly AXEmoji[] => {\n const query = this.searchQuery().trim();\n if (query) {\n return searchPickerEmojis(this.filteredItems(), query);\n }\n\n const categoryId = this.activeCategoryId();\n if (categoryId === AX_EMOJI_PICKER_CATEGORY_RECENT) {\n return this.visibleRecentItems();\n }\n\n return this.categoryIndex().get(categoryId as AXEmojiCategory) ?? [];\n });\n\n /** Rows used by the virtual scroll viewport. */\n protected readonly emojiRows = computed((): readonly (readonly AXEmoji[])[] => {\n const emojis = this.visibleEmojis();\n const columnCount = Math.max(1, this.effectiveColumns());\n const rows: AXEmoji[][] = [];\n\n for (let index = 0; index < emojis.length; index += columnCount) {\n rows.push(emojis.slice(index, index + columnCount));\n }\n\n return rows;\n });\n\n /** Virtual scroll row height in pixels. */\n protected readonly rowHeight = computed(() => this.size() + 6);\n\n /** Whether the user is searching. */\n protected readonly isSearching = computed(() => this.searchQuery().trim().length > 0);\n\n /** Whether the current view has no emojis. */\n protected readonly isEmpty = computed(() => this.visibleEmojis().length === 0);\n\n /** Keeps the active tab valid when exclusions change. */\n private readonly syncActiveCategory = effect(() => {\n const categories = this.categories();\n const activeCategoryId = this.activeCategoryId();\n\n if (categories.some((category) => category.id === activeCategoryId)) {\n return;\n }\n\n this.activeCategoryId.set(categories[0]?.id ?? 'smileys-emotion');\n });\n\n /** Selects a category tab and clears search. */\n protected selectCategory(categoryId: AXEmojiPickerCategoryId): void {\n this.activeCategoryId.set(categoryId);\n this.searchQuery.set('');\n }\n\n /** Whether the given category tab is active. */\n protected isCategoryActive(categoryId: AXEmojiPickerCategoryId): boolean {\n return !this.isSearching() && this.activeCategoryId() === categoryId;\n }\n\n /** Whether the category tab is the virtual recent group. */\n protected isRecentCategory(categoryId: AXEmojiPickerCategoryId): boolean {\n return categoryId === AX_EMOJI_PICKER_CATEGORY_RECENT;\n }\n\n /** Syncs the active emoji category when a tab is selected. */\n protected onCategoryTabChanged(event: AXTabStripChangedEvent): void {\n const categoryId = event.tab?.key as AXEmojiPickerCategoryId | undefined;\n if (categoryId) {\n this.selectCategory(categoryId);\n }\n }\n\n /** Updates the search query from the search box. */\n protected onSearchChanged(event: AXValueChangedEvent<string>): void {\n this.searchQuery.set(event.value ?? '');\n }\n\n /** Emits the selected emoji and notifies the parent of the updated recent list. */\n protected selectEmoji(emoji: AXEmoji): void {\n this.rememberRecent(emoji);\n this.selected.emit(emoji);\n }\n\n /** @ignore */\n protected trackRow(index: number, row: readonly AXEmoji[]): string {\n return row[0]?.code ?? String(index);\n }\n\n private rememberRecent(emoji: AXEmoji): void {\n const isAllowed =\n filterPickerItems([emoji], {\n excludeCategories: this.excludeCategories(),\n excludeCodes: this.excludeCodes(),\n excludeUnicode: this.excludeUnicode(),\n }).length > 0;\n\n if (!isAllowed) {\n return;\n }\n\n const next = [emoji, ...this.recentItems().filter((item) => item.code !== emoji.code)].slice(0, RECENT_EMOJI_LIMIT);\n\n this.recentChanged.emit(next);\n }\n}\n","<div class=\"ax-emoji-picker-layout\">\n <ax-tabs\n class=\"ax-emoji-picker-categories\"\n [look]=\"'pills'\"\n location=\"bottom\"\n [attr.aria-label]=\"'Emoji categories'\"\n (onActiveTabChanged)=\"onCategoryTabChanged($event)\"\n axGesture\n direction=\"horizontal\"\n (swipe)=\"onCategorySwipe($event)\"\n >\n @for (category of categories(); track category.id) {\n <ax-tab-item\n [text]=\"category.iconUnicode\"\n [key]=\"category.id\"\n [active]=\"isCategoryActive(category.id)\"\n [class.ax-emoji-picker-tab-recent]=\"isRecentCategory(category.id)\"\n [attr.aria-label]=\"category.label\"\n [title]=\"category.label\"\n ></ax-tab-item>\n }\n </ax-tabs>\n\n <div class=\"ax-emoji-picker-search-container\">\n @if (showSearch()) {\n <div class=\"ax-emoji-picker-search\">\n <ax-search-box\n [look]=\"'fill'\"\n [value]=\"searchQuery()\"\n [placeholder]=\"searchPlaceholder()\"\n [delayTime]=\"250\"\n (onValueChanged)=\"onSearchChanged($event)\"\n ></ax-search-box>\n </div>\n }\n\n @if (isEmpty()) {\n <div class=\"ax-emoji-picker-empty\">\n @if (isSearching()) {\n <span>No emojis found</span>\n } @else if (activeCategoryId() === 'recent') {\n <span>No recent emojis yet</span>\n } @else {\n <span>No emojis in this category</span>\n }\n </div>\n } @else {\n <cdk-virtual-scroll-viewport\n class=\"ax-emoji-picker-grid\"\n [itemSize]=\"rowHeight()\"\n [minBufferPx]=\"rowHeight() * 4\"\n [maxBufferPx]=\"rowHeight() * 8\"\n >\n <div class=\"ax-emoji-picker-row\" *cdkVirtualFor=\"let row of emojiRows(); trackBy: trackRow\">\n @for (emoji of row; track emoji.code) {\n <button\n type=\"button\"\n class=\"ax-emoji-picker-item\"\n (click)=\"selectEmoji(emoji)\"\n [attr.aria-label]=\"emoji.name\"\n [title]=\"emoji.name\"\n >\n <ax-emoji [emoji]=\"emoji\" [size]=\"size()\" [appearance]=\"appearance()\"></ax-emoji>\n </button>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { AXEmojiPickerComponent } from './emoji-picker.component';\n\n@NgModule({\n imports: [AXEmojiPickerComponent],\n exports: [AXEmojiPickerComponent],\n})\nexport class AXEmojiPickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-fab.mjs","sources":["../../../../packages/components/fab/src/lib/fab.component.ts","../../../../packages/components/fab/src/lib/fab.component.html","../../../../packages/components/fab/src/lib/fab-item/fab-item.component.ts","../../../../packages/components/fab/src/lib/fab-item/fab-item.component.html","../../../../packages/components/fab/src/acorex-components-fab.ts"],"sourcesContent":["import { AXClickEvent, AXEvent, AXPlacementType } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { Component, effect, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-fab',\n templateUrl: './fab.component.html',\n styleUrls: ['./fab.component.css'],\n encapsulation: ViewEncapsulation.None,\n\n imports: [AXButtonComponent, AXPopoverModule, AXDecoratorModule],\n})\nexport class AXFabComponent {\n label = input<string>(null);\n\n popupStyle = input<'bubble' | 'box'>('bubble');\n\n popupPlacement = model<AXPlacementType>(null);\n\n size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n\n protected popoverRef = viewChild(AXPopoverComponent);\n\n protected offsetPopover = signal<number>(null);\n\n #eff = effect(() => {\n if (this.popupStyle() === 'box') {\n this.popupPlacement.set('top-end');\n this.offsetPopover.set(-10);\n } else {\n this.popupPlacement.set('top');\n this.offsetPopover.set(-2);\n }\n });\n\n /**\n * Fires each time the user clicks the button.\n * @event\n */\n onClick = output<AXClickEvent>();\n\n /**\n * Emits when the popover is opened.\n * @event\n */\n onOpened = output<AXEvent>();\n\n /**\n * Emits when the popover is closed.\n * @event\n */\n onClosed = output<AXEvent>();\n\n private addStyleClass() {\n const fabItemContainer = document.querySelector('.ax-fab-item-container');\n if (!fabItemContainer) return;\n if (this.popupStyle() === 'box') {\n fabItemContainer.classList.add('ax-fab-box-style');\n } else {\n fabItemContainer.classList.add('ax-fab-bubble-style');\n }\n }\n\n protected openPopover() {\n this.addStyleClass();\n this.onOpened.emit({ component: this });\n }\n\n protected closePopover() {\n this.onClosed.emit({ component: this });\n }\n\n public close() {\n this.popoverRef().close();\n }\n}\n","<ax-button class=\"ax-{{ size() }}\" #btn (onClick)=\"onClick.emit($event)\" color=\"primary\" look=\"solid\" [text]=\"label()\">\n <ng-content select=\"ax-icon\"> </ng-content>\n</ax-button>\n\n<ax-popover\n (onOpened)=\"openPopover()\"\n (onClosed)=\"closePopover()\"\n [disablePanelClass]=\"true\"\n [offsetY]=\"offsetPopover()\"\n [placement]=\"popupPlacement()\"\n [target]=\"btn\"\n>\n <div class=\"ax-fab-item-container ax-action-list ax-action-list-vertical\">\n <ng-content select=\"ax-fab-item\"> </ng-content>\n </div>\n</ax-popover>\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonComponent, AXButtonItemComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXFabComponent } from '../fab.component';\n\n@Component({\n selector: 'ax-fab-item',\n templateUrl: './fab-item.component.html',\n encapsulation: ViewEncapsulation.None,\n\n imports: [AXButtonComponent, AXButtonItemComponent, AXDecoratorModule, NgTemplateOutlet],\n})\nexport class AXFabItemComponent {\n label = input<string>(null);\n\n protected parent = inject(AXFabComponent);\n\n protected buttonSize = computed(() => {\n switch (this.parent.size()) {\n case 'xl':\n return 'lg';\n case 'lg':\n return 'md';\n case 'md':\n return 'sm';\n case 'sm':\n return 'xs';\n case 'xs':\n return 'xs';\n }\n });\n\n /**\n * Fires each time the user clicks the button.\n * @event\n */\n onClick = output<AXClickEvent>();\n\n protected clickHandler() {\n this.onClick.emit({ component: this });\n }\n}\n","<ng-template #iconTpl>\n <ng-content select=\"ax-icon\"></ng-content>\n</ng-template>\n\n@if (parent.popupStyle() === 'bubble') {\n <ax-button class=\"ax-{{ buttonSize() }}\" [text]=\"label()\" (onClick)=\"clickHandler()\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ax-button>\n} @else {\n <ax-button-item [text]=\"label()\" (onClick)=\"clickHandler()\">\n <ax-prefix>\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ax-prefix>\n </ax-button-item>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":";;;;;;;;;MAca,cAAc,CAAA;AAR3B,IAAA,WAAA,GAAA;QASE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,IAAI;kFAAC;QAE3B,IAAA,CAAA,UAAU,GAAG,KAAK,CAAmB,QAAQ;uFAAC;QAE9C,IAAA,CAAA,cAAc,GAAG,KAAK,CAAkB,IAAI;2FAAC;QAE7C,IAAA,CAAA,IAAI,GAAG,KAAK,CAAmC,IAAI;iFAAC;QAE1C,IAAA,CAAA,UAAU,GAAG,SAAS,CAAC,kBAAkB;uFAAC;QAE1C,IAAA,CAAA,aAAa,GAAG,MAAM,CAAS,IAAI;0FAAC;AAE9C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAK;AACjB,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,EAAE;AAC/B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;gBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5B;QACF,CAAC;iFAAC;AAEF;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,MAAM,EAAgB;AAEhC;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAW;AAE5B;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,MAAM,EAAW;AAwB7B,IAAA;AAlDC,IAAA,IAAI;IA4BI,aAAa,GAAA;QACnB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;AACzE,QAAA,IAAI,CAAC,gBAAgB;YAAE;AACvB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,EAAE;AAC/B,YAAA,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACpD;aAAO;AACL,YAAA,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACvD;IACF;IAEU,WAAW,GAAA;QACnB,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzC;IAEU,YAAY,GAAA;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzC;IAEO,KAAK,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;IAC3B;8GA9DW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EASQ,kBAAkB,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBrD,gjBAgBA,6oFDJY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,aAAA,EAAA,WAAA,EAAA,YAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEpD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAR1B,SAAS;+BACE,QAAQ,EAAA,aAAA,EAGH,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAE5B,CAAC,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,gjBAAA,EAAA,MAAA,EAAA,CAAA,qlFAAA,CAAA,EAAA;mhBAW/B,kBAAkB,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;METxC,kBAAkB,CAAA;AAP/B,IAAA,WAAA,GAAA;QAQE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAS,IAAI;kFAAC;AAEjB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AAE/B,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AACnC,YAAA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACxB,gBAAA,KAAK,IAAI;AACP,oBAAA,OAAO,IAAI;AACb,gBAAA,KAAK,IAAI;AACP,oBAAA,OAAO,IAAI;AACb,gBAAA,KAAK,IAAI;AACP,oBAAA,OAAO,IAAI;AACb,gBAAA,KAAK,IAAI;AACP,oBAAA,OAAO,IAAI;AACb,gBAAA,KAAK,IAAI;AACP,oBAAA,OAAO,IAAI;;QAEjB,CAAC;uFAAC;AAEF;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,MAAM,EAAgB;AAKjC,IAAA;IAHW,YAAY,GAAA;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACxC;8GA5BW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd/B,mgBAeA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDHY,iBAAiB,mUAAE,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAE5E,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EAAA,aAAA,EAER,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAE5B,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,mgBAAA,EAAA;;;AEZ1F;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-components-fab.mjs","sources":["../../../../packages/components/fab/src/lib/fab.component.ts","../../../../packages/components/fab/src/lib/fab.component.html","../../../../packages/components/fab/src/lib/fab-item/fab-item.component.ts","../../../../packages/components/fab/src/lib/fab-item/fab-item.component.html","../../../../packages/components/fab/src/acorex-components-fab.ts"],"sourcesContent":["import { AXClickEvent, AXEvent, AXPlacementType } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { Component, effect, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'ax-fab',\n templateUrl: './fab.component.html',\n styleUrls: ['./fab.component.css'],\n encapsulation: ViewEncapsulation.None,\n\n imports: [AXButtonComponent, AXPopoverModule, AXDecoratorModule],\n})\nexport class AXFabComponent {\n label = input<string>(null);\n\n popupStyle = input<'bubble' | 'box'>('bubble');\n\n popupPlacement = model<AXPlacementType>(null);\n\n size = input<'xs' | 'sm' | 'md' | 'lg' | 'xl'>('md');\n\n protected popoverRef = viewChild(AXPopoverComponent);\n\n protected offsetPopover = signal<number>(null);\n\n #eff = effect(() => {\n if (this.popupStyle() === 'box') {\n this.popupPlacement.set('top-end');\n this.offsetPopover.set(-10);\n } else {\n this.popupPlacement.set('top');\n this.offsetPopover.set(-2);\n }\n });\n\n /**\n * Fires each time the user clicks the button.\n * @event\n */\n onClick = output<AXClickEvent>();\n\n /**\n * Emits when the popover is opened.\n * @event\n */\n onOpened = output<AXEvent>();\n\n /**\n * Emits when the popover is closed.\n * @event\n */\n onClosed = output<AXEvent>();\n\n private addStyleClass() {\n const fabItemContainer = document.querySelector('.ax-fab-item-container');\n if (!fabItemContainer) return;\n if (this.popupStyle() === 'box') {\n fabItemContainer.classList.add('ax-fab-box-style');\n } else {\n fabItemContainer.classList.add('ax-fab-bubble-style');\n }\n }\n\n protected openPopover() {\n this.addStyleClass();\n this.onOpened.emit({ component: this });\n }\n\n protected closePopover() {\n this.onClosed.emit({ component: this });\n }\n\n public close() {\n this.popoverRef().close();\n }\n}\n","<ax-button class=\"ax-{{ size() }}\" #btn (onClick)=\"onClick.emit($event)\" color=\"primary\" look=\"solid\" [text]=\"label()\">\n <ng-content select=\"ax-icon\"> </ng-content>\n</ax-button>\n\n<ax-popover\n (onOpened)=\"openPopover()\"\n (onClosed)=\"closePopover()\"\n [disablePanelClass]=\"true\"\n [offsetY]=\"offsetPopover()\"\n [placement]=\"popupPlacement()\"\n [target]=\"btn\"\n>\n <div class=\"ax-fab-item-container ax-action-list ax-action-list-vertical\">\n <ng-content select=\"ax-fab-item\"> </ng-content>\n </div>\n</ax-popover>\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonComponent, AXButtonItemComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Component, computed, inject, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXFabComponent } from '../fab.component';\n\n@Component({\n selector: 'ax-fab-item',\n templateUrl: './fab-item.component.html',\n encapsulation: ViewEncapsulation.None,\n\n imports: [AXButtonComponent, AXButtonItemComponent, AXDecoratorModule, NgTemplateOutlet],\n})\nexport class AXFabItemComponent {\n label = input<string>(null);\n\n protected parent = inject(AXFabComponent);\n\n protected buttonSize = computed(() => {\n switch (this.parent.size()) {\n case 'xl':\n return 'lg';\n case 'lg':\n return 'md';\n case 'md':\n return 'sm';\n case 'sm':\n return 'xs';\n case 'xs':\n return 'xs';\n }\n });\n\n /**\n * Fires each time the user clicks the button.\n * @event\n */\n onClick = output<AXClickEvent>();\n\n protected clickHandler() {\n this.onClick.emit({ component: this });\n }\n}\n","<ng-template #iconTpl>\n <ng-content select=\"ax-icon\"></ng-content>\n</ng-template>\n\n@if (parent.popupStyle() === 'bubble') {\n <ax-button class=\"ax-{{ buttonSize() }}\" [text]=\"label()\" (onClick)=\"clickHandler()\">\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ax-button>\n} @else {\n <ax-button-item [text]=\"label()\" (onClick)=\"clickHandler()\">\n <ax-prefix>\n <ng-container *ngTemplateOutlet=\"iconTpl\"></ng-container>\n </ax-prefix>\n </ax-button-item>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}