@memberjunction/ng-ui-components 6.2.0-edge.0 → 6.2.0-edge.1

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 (81) hide show
  1. package/README.md +35 -9
  2. package/dist/lib/a11y/named-control.base.d.ts +91 -0
  3. package/dist/lib/a11y/named-control.base.d.ts.map +1 -0
  4. package/dist/lib/a11y/named-control.base.js +121 -0
  5. package/dist/lib/a11y/named-control.base.js.map +1 -0
  6. package/dist/lib/a11y/unnamed-control-guard.d.ts +52 -0
  7. package/dist/lib/a11y/unnamed-control-guard.d.ts.map +1 -0
  8. package/dist/lib/a11y/unnamed-control-guard.js +94 -0
  9. package/dist/lib/a11y/unnamed-control-guard.js.map +1 -0
  10. package/dist/lib/accordion/accordion.component.d.ts +16 -4
  11. package/dist/lib/accordion/accordion.component.d.ts.map +1 -1
  12. package/dist/lib/accordion/accordion.component.js +36 -12
  13. package/dist/lib/accordion/accordion.component.js.map +1 -1
  14. package/dist/lib/applied-filters/applied-filters.component.js.map +1 -1
  15. package/dist/lib/button/button.directive.d.ts +34 -6
  16. package/dist/lib/button/button.directive.d.ts.map +1 -1
  17. package/dist/lib/button/button.directive.js +85 -25
  18. package/dist/lib/button/button.directive.js.map +1 -1
  19. package/dist/lib/card-grid/card-grid.component.d.ts +3 -1
  20. package/dist/lib/card-grid/card-grid.component.d.ts.map +1 -1
  21. package/dist/lib/card-grid/card-grid.component.js +13 -9
  22. package/dist/lib/card-grid/card-grid.component.js.map +1 -1
  23. package/dist/lib/clickable/clickable.directive.d.ts +11 -3
  24. package/dist/lib/clickable/clickable.directive.d.ts.map +1 -1
  25. package/dist/lib/clickable/clickable.directive.js +25 -5
  26. package/dist/lib/clickable/clickable.directive.js.map +1 -1
  27. package/dist/lib/combobox/combobox.component.d.ts +44 -3
  28. package/dist/lib/combobox/combobox.component.d.ts.map +1 -1
  29. package/dist/lib/combobox/combobox.component.js +135 -51
  30. package/dist/lib/combobox/combobox.component.js.map +1 -1
  31. package/dist/lib/confirm-dialog/confirm-dialog.component.d.ts +6 -0
  32. package/dist/lib/confirm-dialog/confirm-dialog.component.d.ts.map +1 -1
  33. package/dist/lib/confirm-dialog/confirm-dialog.component.js +16 -4
  34. package/dist/lib/confirm-dialog/confirm-dialog.component.js.map +1 -1
  35. package/dist/lib/datepicker/datepicker.component.d.ts +25 -2
  36. package/dist/lib/datepicker/datepicker.component.d.ts.map +1 -1
  37. package/dist/lib/datepicker/datepicker.component.js +98 -42
  38. package/dist/lib/datepicker/datepicker.component.js.map +1 -1
  39. package/dist/lib/dialog/dialog.component.d.ts +4 -0
  40. package/dist/lib/dialog/dialog.component.d.ts.map +1 -1
  41. package/dist/lib/dialog/dialog.component.js +12 -4
  42. package/dist/lib/dialog/dialog.component.js.map +1 -1
  43. package/dist/lib/dialog/dialog.service.js.map +1 -1
  44. package/dist/lib/dropdown/dropdown.component.d.ts +19 -44
  45. package/dist/lib/dropdown/dropdown.component.d.ts.map +1 -1
  46. package/dist/lib/dropdown/dropdown.component.js +37 -76
  47. package/dist/lib/dropdown/dropdown.component.js.map +1 -1
  48. package/dist/lib/dropdown/dropdown.scss +0 -16
  49. package/dist/lib/filter-panel/filter-panel.component.d.ts +8 -0
  50. package/dist/lib/filter-panel/filter-panel.component.d.ts.map +1 -1
  51. package/dist/lib/filter-panel/filter-panel.component.js +25 -9
  52. package/dist/lib/filter-panel/filter-panel.component.js.map +1 -1
  53. package/dist/lib/numeric-input/numeric-input.component.d.ts +15 -1
  54. package/dist/lib/numeric-input/numeric-input.component.d.ts.map +1 -1
  55. package/dist/lib/numeric-input/numeric-input.component.js +36 -9
  56. package/dist/lib/numeric-input/numeric-input.component.js.map +1 -1
  57. package/dist/lib/page-search/page-search.component.d.ts +32 -3
  58. package/dist/lib/page-search/page-search.component.d.ts.map +1 -1
  59. package/dist/lib/page-search/page-search.component.js +68 -12
  60. package/dist/lib/page-search/page-search.component.js.map +1 -1
  61. package/dist/lib/switch/switch.component.d.ts +22 -1
  62. package/dist/lib/switch/switch.component.d.ts.map +1 -1
  63. package/dist/lib/switch/switch.component.js +50 -16
  64. package/dist/lib/switch/switch.component.js.map +1 -1
  65. package/dist/lib/tabs/tab-chrome-guard.d.ts +2 -0
  66. package/dist/lib/tabs/tab-chrome-guard.d.ts.map +1 -1
  67. package/dist/lib/tabs/tab-chrome-guard.js +5 -1
  68. package/dist/lib/tabs/tab-chrome-guard.js.map +1 -1
  69. package/dist/lib/window/window.component.d.ts +10 -0
  70. package/dist/lib/window/window.component.d.ts.map +1 -1
  71. package/dist/lib/window/window.component.js +27 -7
  72. package/dist/lib/window/window.component.js.map +1 -1
  73. package/dist/lib/workspace-tabs/workspace-tab-strip.component.d.ts +10 -0
  74. package/dist/lib/workspace-tabs/workspace-tab-strip.component.d.ts.map +1 -1
  75. package/dist/lib/workspace-tabs/workspace-tab-strip.component.js +27 -7
  76. package/dist/lib/workspace-tabs/workspace-tab-strip.component.js.map +1 -1
  77. package/dist/public-api.d.ts +2 -0
  78. package/dist/public-api.d.ts.map +1 -1
  79. package/dist/public-api.js +2 -0
  80. package/dist/public-api.js.map +1 -1
  81. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-tab-strip.component.js","sourceRoot":"","sources":["../../../src/lib/workspace-tabs/workspace-tab-strip.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { AfterViewInit, Component, ChangeDetectionStrategy, ElementRef, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CdkDropList, CdkDrag, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MJWorkspaceTab } from './workspace-tabs.types';\nimport { MJWorkspaceTipDirective } from './workspace-tip.directive';\nimport { MJTabListDirective, MJTabListRequest } from '../tabs/tab-list.directive';\nimport { warnIfTabChromeMissing } from '../tabs/tab-chrome-guard';\n\n/** A drag-reorder request from the strip: move the tab at `previousIndex` to `currentIndex`. */\nexport interface MJTabReorder {\n previousIndex: number;\n currentIndex: number;\n}\n\n/**\n * `<mj-workspace-tab-strip>` — browser-style draft tabs, presentation over `MJWorkspaceTabStore`.\n *\n * Dumb by design: it renders the tabs it is handed and emits intent. The store holds the state\n * machine; the host owns what a tab's payload means. That split keeps it app-agnostic.\n *\n * **Browser-tab behavior lives HERE** so every consumer inherits it:\n * - pinned new-tab button; the tab LIST scrolls horizontally *behind* it on overflow;\n * - tabs size to their text up to `--mj-tab-max`, then ellipsize; the inline unsaved-dot pushes the label;\n * - the tab body keeps the default arrow cursor (like browser tabs);\n * - the full label shows via the reusable `mjTip` tooltip when a tab is truncated (delayed, non-interactive);\n * - drag-reorder via CDK, emitted as intent for the host to apply to its store.\n *\n * **Appearance and keyboard behaviour are NOT owned here.** The look comes from the global\n * `.mj-tabs*` chrome in `tabs.scss`, and the ARIA tabs keyboard contract from `mjTabList` — both\n * shared with `mj-tabstrip`, so the two strips cannot drift apart visually or behaviourally even\n * though they keep different state models.\n */\n@Component({\n standalone: true,\n selector: 'mj-workspace-tab-strip',\n imports: [CommonModule, CdkDropList, CdkDrag, MJWorkspaceTipDirective, MJTabListDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-tabs mj-tabs__bar\">\n <div\n class=\"mj-tabs__list\"\n mjTabList\n (TabActivateRequested)=\"onActivateRequested($event)\"\n (TabCloseRequested)=\"onCloseRequested($event)\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (tab of Tabs; track tab.Id) {\n <!-- role=\"tab\" sits on the FOCUSABLE element, not on a wrapper around one. tabindex is\n owned by mjTabList (roving), so it is deliberately not bound here. The accessible\n name folds in the unsaved/rejected state, because those are conveyed visually by a\n dot and a colour that a screen reader cannot see. -->\n <div\n class=\"mj-tabs__tab\"\n cdkDrag\n [cdkDragDisabled]=\"!AllowReorder\"\n [cdkDragStartDelay]=\"DragStartDelay\"\n [class.mj-tabs__tab--active]=\"tab.Id === ActiveId\"\n [class.mj-tabs__tab--rejected]=\"tab.Status === 'rejected'\"\n [class.mj-tabs__tab--complete]=\"tab.Status === 'complete'\"\n role=\"tab\"\n [attr.aria-selected]=\"tab.Id === ActiveId\"\n [attr.aria-label]=\"tabAccessibleName(tab)\"\n (click)=\"TabSelected.emit(tab.Id)\">\n @if (tab.Icon) {\n <i [class]=\"tab.Icon\" class=\"mj-tabs__icon\" aria-hidden=\"true\"></i>\n }\n @if (tab.Status === 'rejected') {\n <i class=\"fa-solid fa-triangle-exclamation mj-tabs__status-icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"mj-tabs__label\" [mjTip]=\"tab.Label\">{{ tab.Label }}</span>\n @if (tab.Dirty) {\n <!-- Inline dot (no reserved slot): it PUSHES the label, so the ellipsis shifts left on\n a capped tab and a short tab grows by the dot's width. Silent to assistive tech —\n the state is already in the tab's accessible name. -->\n <span class=\"mj-tabs__dirty\" aria-hidden=\"true\">&bull;</span>\n }\n <!-- tabindex=\"-1\": the TAB is the focus stop and Delete closes it, so a second stop per\n tab would double the length of the strip in the page tab order. -->\n <button\n type=\"button\"\n class=\"mj-tabs__close\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Close ' + tab.Label\"\n (click)=\"onCloseClick($event, tab.Id)\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n @if (ShowNewTab) {\n <button type=\"button\" class=\"mj-tabs__new\" (click)=\"NewTabRequested.emit()\" [attr.aria-label]=\"NewTabLabel\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <span>{{ NewTabLabel }}</span>\n </button>\n }\n </div>\n `,\n styleUrls: ['./workspace-tab-strip.component.css'],\n})\nexport class MJWorkspaceTabStripComponent implements AfterViewInit {\n private readonly elementRef = inject(ElementRef);\n\n ngAfterViewInit(): void {\n warnIfTabChromeMissing(this.elementRef.nativeElement);\n }\n\n @Input() Tabs: MJWorkspaceTab[] = [];\n @Input() ActiveId: string | null = null;\n @Input() ShowNewTab = true;\n @Input() NewTabLabel = 'New';\n\n /**\n * Whether tabs can be drag-reordered at all. The escape hatch for hosts where even long-press\n * dragging is wrong (a kiosk surface, a read-only review screen) — reorder simply isn't offered\n * and every touch gesture belongs to scrolling.\n */\n @Input() AllowReorder = true;\n\n /**\n * Per-pointer-type drag threshold, resolving the touch conflict between REORDER and SCROLL: an\n * overflowing tab list scrolls by horizontal swipe, and a swipe starts on a tab — with an\n * immediate drag threshold, CDK claims that touch and the list becomes unscrollable on phones.\n * A hold-to-drag delay is the platform idiom for exactly this (iOS home screen, mobile browser\n * tabs): a moving finger within the delay window is a SCROLL and CDK lets it through natively; a\n * still finger past it is a DRAG. Mouse stays immediate — pointer users scroll with the wheel or\n * scrollbar, so there is no gesture to disambiguate and a delay would just feel laggy.\n */\n public readonly DragStartDelay = { touch: 400, mouse: 0 };\n\n @Output() TabSelected = new EventEmitter<string>();\n @Output() TabClosed = new EventEmitter<string>();\n @Output() NewTabRequested = new EventEmitter<void>();\n @Output() TabReordered = new EventEmitter<MJTabReorder>();\n\n /** CDK drop — emit the reorder intent; the host applies it to the store (the strip stays dumb). */\n public onDrop(event: CdkDragDrop<MJWorkspaceTab[]>): void {\n if (event.previousIndex !== event.currentIndex) {\n this.TabReordered.emit({ previousIndex: event.previousIndex, currentIndex: event.currentIndex });\n }\n }\n\n /**\n * The tab's accessible name. The dirty dot and the rejected colour/icon are the only signals for\n * those states, and neither survives being read aloud — so they are spelled out here instead.\n */\n public tabAccessibleName(tab: MJWorkspaceTab): string {\n const parts = [tab.Label];\n if (tab.Status === 'rejected') parts.push('(rejected)');\n if (tab.Dirty) parts.push('(unsaved changes)');\n return parts.join(' ');\n }\n\n /** Keyboard arrow/Home/End/Enter from `mjTabList` — map the position back onto our id. */\n public onActivateRequested(request: MJTabListRequest): void {\n const tab = this.Tabs[request.Index];\n if (tab) {\n this.TabSelected.emit(tab.Id);\n }\n }\n\n /** Delete/Backspace on a focused tab — the APG close gesture for a closeable tab. */\n public onCloseRequested(request: MJTabListRequest): void {\n const tab = this.Tabs[request.Index];\n if (tab) {\n this.TabClosed.emit(tab.Id);\n }\n }\n\n /** The close button sits inside the tab, so its click would otherwise also select the tab. */\n public onCloseClick(event: MouseEvent, id: string): void {\n event.stopPropagation();\n this.TabClosed.emit(id);\n }\n}\n"]}
1
+ {"version":3,"file":"workspace-tab-strip.component.js","sourceRoot":"","sources":["../../../src/lib/workspace-tabs/workspace-tab-strip.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { AfterViewInit, Component, ChangeDetectionStrategy, ElementRef, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CdkDropList, CdkDrag, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { MJWorkspaceTab } from './workspace-tabs.types';\nimport { MJWorkspaceTipDirective } from './workspace-tip.directive';\nimport { MJTabListDirective, MJTabListRequest } from '../tabs/tab-list.directive';\nimport { WarnIfTabChromeMissing } from '../tabs/tab-chrome-guard';\n\n/** A drag-reorder request from the strip: move the tab at `previousIndex` to `currentIndex`. */\nexport interface MJTabReorder {\n previousIndex: number;\n currentIndex: number;\n}\n\n/**\n * `<mj-workspace-tab-strip>` — browser-style draft tabs, presentation over `MJWorkspaceTabStore`.\n *\n * Dumb by design: it renders the tabs it is handed and emits intent. The store holds the state\n * machine; the host owns what a tab's payload means. That split keeps it app-agnostic.\n *\n * **Browser-tab behavior lives HERE** so every consumer inherits it:\n * - pinned new-tab button; the tab LIST scrolls horizontally *behind* it on overflow;\n * - tabs size to their text up to `--mj-tab-max`, then ellipsize; the inline unsaved-dot pushes the label;\n * - the tab body keeps the default arrow cursor (like browser tabs);\n * - the full label shows via the reusable `mjTip` tooltip when a tab is truncated (delayed, non-interactive);\n * - drag-reorder via CDK, emitted as intent for the host to apply to its store.\n *\n * **Appearance and keyboard behaviour are NOT owned here.** The look comes from the global\n * `.mj-tabs*` chrome in `tabs.scss`, and the ARIA tabs keyboard contract from `mjTabList` — both\n * shared with `mj-tabstrip`, so the two strips cannot drift apart visually or behaviourally even\n * though they keep different state models.\n */\n@Component({\n standalone: true,\n selector: 'mj-workspace-tab-strip',\n imports: [CommonModule, CdkDropList, CdkDrag, MJWorkspaceTipDirective, MJTabListDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"mj-tabs mj-tabs__bar\">\n <div\n class=\"mj-tabs__list\"\n mjTabList\n (TabActivateRequested)=\"onActivateRequested($event)\"\n (TabCloseRequested)=\"onCloseRequested($event)\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop($event)\">\n @for (tab of Tabs; track tab.Id) {\n <!-- role=\"tab\" sits on the FOCUSABLE element, not on a wrapper around one. tabindex is\n owned by mjTabList (roving), so it is deliberately not bound here. The accessible\n name folds in the unsaved/rejected state, because those are conveyed visually by a\n dot and a colour that a screen reader cannot see. -->\n <div\n class=\"mj-tabs__tab\"\n cdkDrag\n [cdkDragDisabled]=\"!AllowReorder\"\n [cdkDragStartDelay]=\"DragStartDelay\"\n [class.mj-tabs__tab--active]=\"tab.Id === ActiveId\"\n [class.mj-tabs__tab--rejected]=\"tab.Status === 'rejected'\"\n [class.mj-tabs__tab--complete]=\"tab.Status === 'complete'\"\n role=\"tab\"\n [attr.aria-selected]=\"tab.Id === ActiveId\"\n [attr.aria-label]=\"tabAccessibleName(tab)\"\n (click)=\"TabSelected.emit(tab.Id)\">\n @if (tab.Icon) {\n <i [class]=\"tab.Icon\" class=\"mj-tabs__icon\" aria-hidden=\"true\"></i>\n }\n @if (tab.Status === 'rejected') {\n <i class=\"fa-solid fa-triangle-exclamation mj-tabs__status-icon\" aria-hidden=\"true\"></i>\n }\n <span class=\"mj-tabs__label\" [mjTip]=\"tab.Label\">{{ tab.Label }}</span>\n @if (tab.Dirty) {\n <!-- Inline dot (no reserved slot): it PUSHES the label, so the ellipsis shifts left on\n a capped tab and a short tab grows by the dot's width. Silent to assistive tech —\n the state is already in the tab's accessible name. -->\n <span class=\"mj-tabs__dirty\" aria-hidden=\"true\">&bull;</span>\n }\n <!-- tabindex=\"-1\": the TAB is the focus stop and Delete closes it, so a second stop per\n tab would double the length of the strip in the page tab order. -->\n <button\n type=\"button\"\n class=\"mj-tabs__close\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'Close ' + tab.Label\"\n (click)=\"onCloseClick($event, tab.Id)\">\n <i class=\"fa-solid fa-xmark\" aria-hidden=\"true\"></i>\n </button>\n </div>\n }\n </div>\n @if (ShowNewTab) {\n <button type=\"button\" class=\"mj-tabs__new\" (click)=\"NewTabRequested.emit()\" [attr.aria-label]=\"NewTabLabel\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <span>{{ NewTabLabel }}</span>\n </button>\n }\n </div>\n `,\n styleUrls: ['./workspace-tab-strip.component.css'],\n})\nexport class MJWorkspaceTabStripComponent implements AfterViewInit {\n private readonly elementRef = inject(ElementRef);\n\n ngAfterViewInit(): void {\n WarnIfTabChromeMissing(this.elementRef.nativeElement);\n }\n\n @Input() Tabs: MJWorkspaceTab[] = [];\n @Input() ActiveId: string | null = null;\n @Input() ShowNewTab = true;\n @Input() NewTabLabel = 'New';\n\n /**\n * Whether tabs can be drag-reordered at all. The escape hatch for hosts where even long-press\n * dragging is wrong (a kiosk surface, a read-only review screen) — reorder simply isn't offered\n * and every touch gesture belongs to scrolling.\n */\n @Input() AllowReorder = true;\n\n /**\n * Per-pointer-type drag threshold, resolving the touch conflict between REORDER and SCROLL: an\n * overflowing tab list scrolls by horizontal swipe, and a swipe starts on a tab — with an\n * immediate drag threshold, CDK claims that touch and the list becomes unscrollable on phones.\n * A hold-to-drag delay is the platform idiom for exactly this (iOS home screen, mobile browser\n * tabs): a moving finger within the delay window is a SCROLL and CDK lets it through natively; a\n * still finger past it is a DRAG. Mouse stays immediate — pointer users scroll with the wheel or\n * scrollbar, so there is no gesture to disambiguate and a delay would just feel laggy.\n */\n public readonly DragStartDelay = { touch: 400, mouse: 0 };\n\n @Output() TabSelected = new EventEmitter<string>();\n @Output() TabClosed = new EventEmitter<string>();\n @Output() NewTabRequested = new EventEmitter<void>();\n @Output() TabReordered = new EventEmitter<MJTabReorder>();\n\n /** CDK drop — emit the reorder intent; the host applies it to the store (the strip stays dumb). */\n public OnDrop(event: CdkDragDrop<MJWorkspaceTab[]>): void {\n if (event.previousIndex !== event.currentIndex) {\n this.TabReordered.emit({ previousIndex: event.previousIndex, currentIndex: event.currentIndex });\n }\n }\n\n /** @deprecated Use {@link OnDrop}. */\n public onDrop(event: CdkDragDrop<MJWorkspaceTab[]>): void {\n return this.OnDrop(event);\n }\n\n /**\n * The tab's accessible name. The dirty dot and the rejected colour/icon are the only signals for\n * those states, and neither survives being read aloud — so they are spelled out here instead.\n */\n public TabAccessibleName(tab: MJWorkspaceTab): string {\n const parts = [tab.Label];\n if (tab.Status === 'rejected') parts.push('(rejected)');\n if (tab.Dirty) parts.push('(unsaved changes)');\n return parts.join(' ');\n }\n\n /** @deprecated Use {@link TabAccessibleName}. */\n public tabAccessibleName(tab: MJWorkspaceTab): string {\n return this.TabAccessibleName(tab);\n }\n\n /** Keyboard arrow/Home/End/Enter from `mjTabList` — map the position back onto our id. */\n public OnActivateRequested(request: MJTabListRequest): void {\n const tab = this.Tabs[request.Index];\n if (tab) {\n this.TabSelected.emit(tab.Id);\n }\n }\n\n /** @deprecated Use {@link OnActivateRequested}. */\n public onActivateRequested(request: MJTabListRequest): void {\n return this.OnActivateRequested(request);\n }\n\n /** Delete/Backspace on a focused tab — the APG close gesture for a closeable tab. */\n public OnCloseRequested(request: MJTabListRequest): void {\n const tab = this.Tabs[request.Index];\n if (tab) {\n this.TabClosed.emit(tab.Id);\n }\n }\n\n /** @deprecated Use {@link OnCloseRequested}. */\n public onCloseRequested(request: MJTabListRequest): void {\n return this.OnCloseRequested(request);\n }\n\n /** The close button sits inside the tab, so its click would otherwise also select the tab. */\n public OnCloseClick(event: MouseEvent, id: string): void {\n event.stopPropagation();\n this.TabClosed.emit(id);\n }\n\n /** @deprecated Use {@link OnCloseClick}. */\n public onCloseClick(event: MouseEvent, id: string): void {\n return this.OnCloseClick(event, id);\n }\n}\n"]}
@@ -1,3 +1,5 @@
1
+ export * from './lib/a11y/named-control.base';
2
+ export * from './lib/a11y/unnamed-control-guard';
1
3
  export * from './lib/button/button.directive';
2
4
  export * from './lib/clickable/clickable.directive';
3
5
  export * from './lib/dialog/dialog.component';
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAGA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAGA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  // @memberjunction/ng-ui-components
2
2
  // Reusable standalone Angular UI components for MemberJunction
3
+ export * from './lib/a11y/named-control.base';
4
+ export * from './lib/a11y/unnamed-control-guard';
3
5
  export * from './lib/button/button.directive';
4
6
  export * from './lib/clickable/clickable.directive';
5
7
  export * from './lib/dialog/dialog.component';
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,+DAA+D;AAE/D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC","sourcesContent":["// @memberjunction/ng-ui-components\n// Reusable standalone Angular UI components for MemberJunction\n\nexport * from './lib/button/button.directive';\nexport * from './lib/clickable/clickable.directive';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/dialog/dialog.service';\nexport * from './lib/confirm-dialog/confirm-dialog.component';\nexport * from './lib/confirm-dialog/confirm-dialog.service';\nexport * from './lib/dropdown/dropdown.component';\nexport * from './lib/switch/switch.component';\nexport * from './lib/numeric-input/numeric-input.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/calendar/calendar-utils';\nexport * from './lib/datepicker/datepicker.component';\nexport * from './lib/splitter/splitter.component';\nexport * from './lib/accordion/accordion.component';\nexport * from './lib/alert/alert.component';\nexport * from './lib/window/window.component';\nexport * from './lib/slide-panel/slide-panel.component';\nexport * from './lib/bottom-sheet/bottom-sheet.component';\nexport * from './lib/combobox/combobox.component';\nexport * from './lib/page-header/page-header.component';\nexport * from './lib/page-layout/page-layout.component';\nexport * from './lib/page-body/page-body.component';\nexport * from './lib/stat-badge/stat-badge.component';\nexport * from './lib/refresh-button/refresh-button.component';\nexport * from './lib/filter-popover/filter-popover.component';\nexport * from './lib/page-search/page-search.component';\nexport * from './lib/filter-chip/filter-chip.component';\nexport * from './lib/filter-field/filter-field.component';\nexport * from './lib/filter-panel/filter-panel.component';\nexport * from './lib/tab-nav/tab-nav.component';\nexport * from './lib/tabs/tab-list.directive';\nexport * from './lib/tabs/tab-chrome-guard';\nexport * from './lib/workspace-tabs/workspace-tabs.types';\nexport * from './lib/workspace-tabs/workspace-tab-store';\nexport * from './lib/workspace-tabs/workspace-tab-strip.component';\nexport * from './lib/workspace-tabs/workspace-card.component';\nexport * from './lib/workspace-tabs/workspace-tip.directive';\nexport * from './lib/view-toggle/view-toggle.component';\nexport * from './lib/left-nav/left-nav.component';\nexport * from './lib/left-nav/left-nav-content.component';\nexport * from './lib/page-header-interior/page-header-interior.component';\nexport * from './lib/page-body-interior/page-body-interior.component';\nexport * from './lib/empty-state/empty-state.component';\nexport * from './lib/card-grid/card-grid.component';\n"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,+DAA+D;AAE/D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC;AACpD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2CAA2C,CAAC;AAC1D,cAAc,0CAA0C,CAAC;AACzD,cAAc,oDAAoD,CAAC;AACnE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,yCAAyC,CAAC;AACxD,cAAc,qCAAqC,CAAC","sourcesContent":["// @memberjunction/ng-ui-components\n// Reusable standalone Angular UI components for MemberJunction\n\nexport * from './lib/a11y/named-control.base';\nexport * from './lib/a11y/unnamed-control-guard';\nexport * from './lib/button/button.directive';\nexport * from './lib/clickable/clickable.directive';\nexport * from './lib/dialog/dialog.component';\nexport * from './lib/dialog/dialog.service';\nexport * from './lib/confirm-dialog/confirm-dialog.component';\nexport * from './lib/confirm-dialog/confirm-dialog.service';\nexport * from './lib/dropdown/dropdown.component';\nexport * from './lib/switch/switch.component';\nexport * from './lib/numeric-input/numeric-input.component';\nexport * from './lib/progress-bar/progress-bar.component';\nexport * from './lib/calendar/calendar-utils';\nexport * from './lib/datepicker/datepicker.component';\nexport * from './lib/splitter/splitter.component';\nexport * from './lib/accordion/accordion.component';\nexport * from './lib/alert/alert.component';\nexport * from './lib/window/window.component';\nexport * from './lib/slide-panel/slide-panel.component';\nexport * from './lib/bottom-sheet/bottom-sheet.component';\nexport * from './lib/combobox/combobox.component';\nexport * from './lib/page-header/page-header.component';\nexport * from './lib/page-layout/page-layout.component';\nexport * from './lib/page-body/page-body.component';\nexport * from './lib/stat-badge/stat-badge.component';\nexport * from './lib/refresh-button/refresh-button.component';\nexport * from './lib/filter-popover/filter-popover.component';\nexport * from './lib/page-search/page-search.component';\nexport * from './lib/filter-chip/filter-chip.component';\nexport * from './lib/filter-field/filter-field.component';\nexport * from './lib/filter-panel/filter-panel.component';\nexport * from './lib/tab-nav/tab-nav.component';\nexport * from './lib/tabs/tab-list.directive';\nexport * from './lib/tabs/tab-chrome-guard';\nexport * from './lib/workspace-tabs/workspace-tabs.types';\nexport * from './lib/workspace-tabs/workspace-tab-store';\nexport * from './lib/workspace-tabs/workspace-tab-strip.component';\nexport * from './lib/workspace-tabs/workspace-card.component';\nexport * from './lib/workspace-tabs/workspace-tip.directive';\nexport * from './lib/view-toggle/view-toggle.component';\nexport * from './lib/left-nav/left-nav.component';\nexport * from './lib/left-nav/left-nav-content.component';\nexport * from './lib/page-header-interior/page-header-interior.component';\nexport * from './lib/page-body-interior/page-body-interior.component';\nexport * from './lib/empty-state/empty-state.component';\nexport * from './lib/card-grid/card-grid.component';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-ui-components",
3
- "version": "6.2.0-edge.0",
3
+ "version": "6.2.0-edge.1",
4
4
  "description": "MemberJunction: Angular UI Components - reusable standalone components replacing Kendo UI dependencies.",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -16,7 +16,7 @@
16
16
  "devDependencies": {
17
17
  "@angular/compiler": "21.2.22",
18
18
  "@angular/compiler-cli": "21.2.22",
19
- "@memberjunction/ng-test-utils": "6.2.0-edge.0",
19
+ "@memberjunction/ng-test-utils": "6.2.0-edge.1",
20
20
  "vitest": "^4.0.18"
21
21
  },
22
22
  "peerDependencies": {