@3ddv/software-division-components 2.0.15 → 2.1.2

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 (30) hide show
  1. package/README.md +2 -0
  2. package/backoffice/datepicker/datepicker.component.css +262 -0
  3. package/fesm2022/3ddv-software-division-components-dvm-cart.mjs +18 -6
  4. package/fesm2022/3ddv-software-division-components-dvm-cart.mjs.map +1 -1
  5. package/fesm2022/3ddv-software-division-components-dvm-loader.mjs +18 -4
  6. package/fesm2022/3ddv-software-division-components-dvm-loader.mjs.map +1 -1
  7. package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs +24 -40
  8. package/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs.map +1 -1
  9. package/fesm2022/3ddv-software-division-components-generic-button.mjs +3 -2
  10. package/fesm2022/3ddv-software-division-components-generic-button.mjs.map +1 -1
  11. package/fesm2022/3ddv-software-division-components-generic-dialog.mjs +173 -19
  12. package/fesm2022/3ddv-software-division-components-generic-dialog.mjs.map +1 -1
  13. package/fesm2022/3ddv-software-division-components-generic-select.mjs +4 -3
  14. package/fesm2022/3ddv-software-division-components-generic-select.mjs.map +1 -1
  15. package/fesm2022/3ddv-software-division-components-generic-tooltip.mjs +1 -1
  16. package/fesm2022/3ddv-software-division-components-generic-tooltip.mjs.map +1 -1
  17. package/fesm2022/3ddv-software-division-components.mjs +14 -8
  18. package/fesm2022/3ddv-software-division-components.mjs.map +1 -1
  19. package/generic/braintree/braintree.component.css +7 -0
  20. package/host-tailwind-layer.css +7 -0
  21. package/package.json +77 -6
  22. package/shared/themes/sdc.css +171 -0
  23. package/styles.css +1 -1
  24. package/types/3ddv-software-division-components-dvm-cart.d.ts +20 -3
  25. package/types/3ddv-software-division-components-dvm-loader.d.ts +12 -5
  26. package/types/3ddv-software-division-components-dvm-neighbors.d.ts +10 -15
  27. package/types/3ddv-software-division-components-generic-button.d.ts +2 -1
  28. package/types/3ddv-software-division-components-generic-dialog.d.ts +121 -49
  29. package/types/3ddv-software-division-components-generic-select.d.ts +2 -1
  30. package/types/3ddv-software-division-components.d.ts +10 -0
@@ -1,29 +1,26 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, EventEmitter, computed, signal, Output, ViewChild, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { viewChild, input, output, computed, signal, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
 
4
4
  class NeighborsComponent {
5
5
  // VIEWCHILD
6
- neighborsContainer;
7
- currentSection;
8
- currentSection3d;
9
- leftSectionElement;
10
- rightSectionElement;
6
+ neighborsContainer = viewChild('neighborsContainer', ...(ngDevMode ? [{ debugName: "neighborsContainer" }] : []));
7
+ currentSection = viewChild('currentSection', ...(ngDevMode ? [{ debugName: "currentSection" }] : []));
8
+ currentSection3d = viewChild('currentSection3d', ...(ngDevMode ? [{ debugName: "currentSection3d" }] : []));
9
+ leftSectionElement = viewChild('leftSectionNumber', ...(ngDevMode ? [{ debugName: "leftSectionElement" }] : []));
10
+ rightSectionElement = viewChild('rightSectionNumber', ...(ngDevMode ? [{ debugName: "rightSectionElement" }] : []));
11
11
  // REQUIRED INPUTS
12
- translate = input((id) => id, ...(ngDevMode ? [{ debugName: "translate" }] : []));
13
12
  dvmService = input.required(...(ngDevMode ? [{ debugName: "dvmService" }] : []));
14
13
  currentSectionId = input.required(...(ngDevMode ? [{ debugName: "currentSectionId" }] : []));
15
14
  hasAvailability = input.required(...(ngDevMode ? [{ debugName: "hasAvailability" }] : []));
16
15
  // OPTIONAL INPUTS
16
+ translate = input((id) => id, ...(ngDevMode ? [{ debugName: "translate" }] : []));
17
17
  isLoading = input(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
18
18
  showElement = input(true, ...(ngDevMode ? [{ debugName: "showElement" }] : []));
19
19
  modeLr = input(false, ...(ngDevMode ? [{ debugName: "modeLr" }] : []));
20
20
  className = input('', ...(ngDevMode ? [{ debugName: "className" }] : []));
21
21
  theme = input('theme-sdc', ...(ngDevMode ? [{ debugName: "theme" }] : []));
22
22
  // OUTPUTS
23
- sectionChange = new EventEmitter();
24
- /**
25
- * Computed class string that combines theme and user classes.
26
- */
23
+ sectionChange = output();
27
24
  computedClass = computed(() => {
28
25
  const themeClass = this.theme();
29
26
  const className = this.className();
@@ -32,7 +29,6 @@ class NeighborsComponent {
32
29
  .join(' ');
33
30
  }, ...(ngDevMode ? [{ debugName: "computedClass" }] : []));
34
31
  // COMPONENT STATE
35
- subscriptions = [];
36
32
  relatedMaps = signal({}, ...(ngDevMode ? [{ debugName: "relatedMaps" }] : []));
37
33
  fetchingIds = new Set();
38
34
  // COMPUTED STATE
@@ -41,7 +37,8 @@ class NeighborsComponent {
41
37
  const currentId = this.currentSectionId();
42
38
  if (!currentId)
43
39
  return null;
44
- return this.findAvailableNeighbor('prev', currentId);
40
+ const neighbor = this.findAvailableNeighbor('prev', currentId);
41
+ return neighbor === currentId ? null : neighbor;
45
42
  }
46
43
  catch (error) {
47
44
  return null;
@@ -52,7 +49,8 @@ class NeighborsComponent {
52
49
  const currentId = this.currentSectionId();
53
50
  if (!currentId)
54
51
  return null;
55
- return this.findAvailableNeighbor('next', currentId);
52
+ const neighbor = this.findAvailableNeighbor('next', currentId);
53
+ return neighbor === currentId ? null : neighbor;
56
54
  }
57
55
  catch (error) {
58
56
  return null;
@@ -92,8 +90,12 @@ class NeighborsComponent {
92
90
  }
93
91
  }, ...(ngDevMode ? [{ debugName: "rightSectionLabel" }] : []));
94
92
  // NEIGHBOR RESOLUTION ALGORITHM
95
- findAvailableNeighbor(type, currentSectionTdcId) {
93
+ findAvailableNeighbor(type, currentSectionTdcId, visited = new Set()) {
96
94
  try {
95
+ if (visited.has(currentSectionTdcId)) {
96
+ return null;
97
+ }
98
+ visited.add(currentSectionTdcId);
97
99
  const neighborKey = type === 'prev' ? 'l' : 'r';
98
100
  const noNeighborValue = 'none';
99
101
  const neighbor = this.relatedMaps()[currentSectionTdcId] ?? null;
@@ -108,14 +110,14 @@ class NeighborsComponent {
108
110
  }
109
111
  // Skip general admission sections — not navigable as neighbors
110
112
  if (neighborSectionTdcId.includes('general_admission')) {
111
- return this.findAvailableNeighbor(type, neighborSectionTdcId);
113
+ return this.findAvailableNeighbor(type, neighborSectionTdcId, visited);
112
114
  }
113
115
  // Check availability using TDC ID
114
116
  if (this.hasAvailability()(neighborSectionTdcId)) {
115
117
  return neighborSectionTdcId;
116
118
  }
117
119
  // Recursively find next available (skip unavailable sections)
118
- return this.findAvailableNeighbor(type, neighborSectionTdcId);
120
+ return this.findAvailableNeighbor(type, neighborSectionTdcId, visited);
119
121
  }
120
122
  catch (error) {
121
123
  return null;
@@ -126,7 +128,9 @@ class NeighborsComponent {
126
128
  return;
127
129
  }
128
130
  this.fetchingIds.add(sectionId);
129
- void this.dvmService().getRelatedMapsForSection(sectionId).then(related => {
131
+ void this.dvmService()
132
+ .getRelatedMapsForSection(sectionId)
133
+ .then(related => {
130
134
  this.fetchingIds.delete(sectionId);
131
135
  if (!related)
132
136
  return;
@@ -148,9 +152,6 @@ class NeighborsComponent {
148
152
  get section() {
149
153
  return this.currentSectionLabel();
150
154
  }
151
- ngOnDestroy() {
152
- this.subscriptions.forEach((sub) => sub.unsubscribe());
153
- }
154
155
  // METHODS
155
156
  navigateToSection(section) {
156
157
  if (section === 'none' || !section) {
@@ -171,29 +172,12 @@ class NeighborsComponent {
171
172
  this.sectionChange.emit({ direction, sectionId: section });
172
173
  }
173
174
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NeighborsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
174
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: NeighborsComponent, isStandalone: true, selector: "sdc-neighbors", inputs: { translate: { classPropertyName: "translate", publicName: "translate", isSignal: true, isRequired: false, transformFunction: null }, dvmService: { classPropertyName: "dvmService", publicName: "dvmService", isSignal: true, isRequired: true, transformFunction: null }, currentSectionId: { classPropertyName: "currentSectionId", publicName: "currentSectionId", isSignal: true, isRequired: true, transformFunction: null }, hasAvailability: { classPropertyName: "hasAvailability", publicName: "hasAvailability", isSignal: true, isRequired: true, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, showElement: { classPropertyName: "showElement", publicName: "showElement", isSignal: true, isRequired: false, transformFunction: null }, modeLr: { classPropertyName: "modeLr", publicName: "modeLr", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sectionChange: "sectionChange" }, viewQueries: [{ propertyName: "neighborsContainer", first: true, predicate: ["neighborsContainer"], descendants: true }, { propertyName: "currentSection", first: true, predicate: ["currentSection"], descendants: true }, { propertyName: "currentSection3d", first: true, predicate: ["currentSection3d"], descendants: true }, { propertyName: "leftSectionElement", first: true, predicate: ["leftSectionNumber"], descendants: true }, { propertyName: "rightSectionElement", first: true, predicate: ["rightSectionNumber"], descendants: true }], ngImport: i0, template: "<div #neighborsContainer class=\"neighbors-container\" [class]=\"computedClass()\" [class.hidden]=\"!showElement()\">\n <!-- LEFT SECTION BUTTON -->\n @if (leftSection) {\n <div\n class=\"neighbor-button-left neighbor-button\"\n [class.is-none]=\"leftSection === 'none'\"\n tabindex=\"0\"\n (click)=\"navigateToSection(leftSection!)\"\n (keypress.enter)=\"navigateToSection(leftSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Left Section' : 'Section' }}&nbsp; </span>\n @if (leftSection !== 'none' && !modeLr()) {\n <span #leftSectionNumber class=\"section-number\">\n {{ leftSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n\n <!-- CURRENT SECTION TEXT -->\n <div class=\"current-section-wrapper\">\n @if (isLoading()) {\n <p class=\"current-section-loading\">\n <span>Loading</span>\n </p>\n } @else {\n @if (section) {\n <h3 class=\"current-section-text\">\n <span class=\"prefix\">Section&nbsp;</span>\n <span #currentSection class=\"section-number\">{{ section }}</span>\n </h3>\n }\n }\n </div>\n\n <!-- RIGHT SECTION BUTTON -->\n @if (rightSection) {\n <div\n class=\"neighbor-button-right neighbor-button\"\n [class.is-none]=\"rightSection === 'none'\"\n tabindex=\"1\"\n (click)=\"navigateToSection(rightSection!)\"\n (keypress.enter)=\"navigateToSection(rightSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Right Section' : 'Section' }}&nbsp; </span>\n @if (rightSection !== 'none' && !modeLr()) {\n <span #rightSectionNumber class=\"section-number\">\n {{ rightSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n", styles: [".sdc-neighbors{--sdc-neighbors-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-text-color: #ffffff;--sdc-neighbors-border-radius: 9999px;--sdc-neighbors-padding-x: .75rem;--sdc-neighbors-padding-y: .625rem;--sdc-neighbors-height: 2rem;--sdc-neighbors-max-width: 10rem;--sdc-neighbors-button-width: 75px;--sdc-neighbors-button-height: 2rem;--sdc-neighbors-button-offset: -31%;--sdc-neighbors-button-icon-color: #ffffff;--sdc-neighbors-button-hover-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-button-text-font-weight: 600;--sdc-neighbors-button-text-font-size: .625rem;--sdc-neighbors-button-text-transform: uppercase;--sdc-neighbors-prefix-opacity: .7;--sdc-neighbors-current-section-loading-font-weight: 600;--sdc-neighbors-current-section-loading-font-size: .75rem;--sdc-neighbors-current-section-text-font-weight: 600;--sdc-neighbors-current-section-text-font-size: .625rem;--sdc-neighbors-current-section-text-transform: uppercase}.neighbors-container{position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--sdc-neighbors-background-color);margin-left:auto;margin-right:auto;padding-left:var(--sdc-neighbors-padding-x);padding-right:var(--sdc-neighbors-padding-x);padding-top:var(--sdc-neighbors-padding-y);padding-bottom:var(--sdc-neighbors-padding-y);border-radius:var(--sdc-neighbors-border-radius);height:var(--sdc-neighbors-height);max-width:var(--sdc-neighbors-max-width);pointer-events:auto}.neighbor-button{position:absolute;width:var(--sdc-neighbors-button-width);height:var(--sdc-neighbors-button-height);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:opacity .15s cubic-bezier(.4,0,.2,1)}.neighbor-button-left{left:var(--sdc-neighbors-button-offset);flex-direction:row-reverse}.neighbor-button-right{right:var(--sdc-neighbors-button-offset);flex-direction:row}.neighbor-button.is-none{opacity:0;pointer-events:none}.neighbor-button-icon{display:flex;align-items:center;height:100%;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.neighbor-button:hover .neighbor-button-icon{background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button-icon i{display:block;color:var(--sdc-neighbors-button-icon-color);margin-top:auto;margin-bottom:auto}.neighbor-button-icon svg{width:.875rem;height:.875rem}.neighbor-button-label{opacity:0;transition:opacity .15s cubic-bezier(.4,0,.2,1);display:flex;flex-grow:1;height:100%;align-items:center;background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button:hover .neighbor-button-label{opacity:1}.neighbor-button-left .neighbor-button-label{padding-left:1.25rem;padding-right:.5rem;border-top-left-radius:9999px;border-bottom-left-radius:9999px}.neighbor-button-right .neighbor-button-label{padding-left:.5rem;padding-right:1.25rem;border-top-right-radius:9999px;border-bottom-right-radius:9999px}.neighbor-button-label p{color:var(--sdc-neighbors-text-color);font-size:var(--sdc-neighbors-button-text-font-size);font-weight:var(--sdc-neighbors-button-text-font-weight);text-transform:var(--sdc-neighbors-button-text-transform)}.neighbor-button-label .prefix{opacity:var(--sdc-neighbors-prefix-opacity);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(var(--sdc-neighbors-button-width) - 1.875rem)}.neighbor-button-label .section-number{white-space:nowrap}.current-section-wrapper{display:block;margin-left:auto;margin-right:auto;cursor:default;min-width:0;overflow:hidden}.current-section-loading{font-weight:var(--sdc-neighbors-current-section-loading-font-weight);font-size:var(--sdc-neighbors-current-section-loading-font-size);color:var(--sdc-neighbors-text-color)}.current-section-text{display:flex;font-weight:var(--sdc-neighbors-current-section-text-font-weight);font-size:var(--sdc-neighbors-current-section-text-font-size);color:var(--sdc-neighbors-text-color);text-transform:var(--sdc-neighbors-current-section-text-transform);overflow:hidden;min-width:0}.current-section-text .prefix{opacity:var(--sdc-neighbors-prefix-opacity);flex-shrink:0;white-space:nowrap}.current-section-text .section-number{display:inline-block;max-width:3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.current-section-text .prefix,.neighbor-button-label .prefix{display:none}.neighbors-container{max-width:7.5rem}.current-section-text .section-number{max-width:2.5rem}.neighbor-button{width:60px}}@media(max-width:420px){.neighbors-container{max-width:6rem}.current-section-text .section-number{max-width:2rem}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
175
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: NeighborsComponent, isStandalone: true, selector: "sdc-neighbors", inputs: { dvmService: { classPropertyName: "dvmService", publicName: "dvmService", isSignal: true, isRequired: true, transformFunction: null }, currentSectionId: { classPropertyName: "currentSectionId", publicName: "currentSectionId", isSignal: true, isRequired: true, transformFunction: null }, hasAvailability: { classPropertyName: "hasAvailability", publicName: "hasAvailability", isSignal: true, isRequired: true, transformFunction: null }, translate: { classPropertyName: "translate", publicName: "translate", isSignal: true, isRequired: false, transformFunction: null }, isLoading: { classPropertyName: "isLoading", publicName: "isLoading", isSignal: true, isRequired: false, transformFunction: null }, showElement: { classPropertyName: "showElement", publicName: "showElement", isSignal: true, isRequired: false, transformFunction: null }, modeLr: { classPropertyName: "modeLr", publicName: "modeLr", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sectionChange: "sectionChange" }, viewQueries: [{ propertyName: "neighborsContainer", first: true, predicate: ["neighborsContainer"], descendants: true, isSignal: true }, { propertyName: "currentSection", first: true, predicate: ["currentSection"], descendants: true, isSignal: true }, { propertyName: "currentSection3d", first: true, predicate: ["currentSection3d"], descendants: true, isSignal: true }, { propertyName: "leftSectionElement", first: true, predicate: ["leftSectionNumber"], descendants: true, isSignal: true }, { propertyName: "rightSectionElement", first: true, predicate: ["rightSectionNumber"], descendants: true, isSignal: true }], ngImport: i0, template: "<div #neighborsContainer class=\"neighbors-container\" [class]=\"computedClass()\" [class.hidden]=\"!showElement()\">\n <!-- LEFT SECTION BUTTON -->\n @if (leftSection) {\n <div\n class=\"neighbor-button-left neighbor-button\"\n [class.is-none]=\"leftSection === 'none'\"\n tabindex=\"0\"\n (click)=\"navigateToSection(leftSection!)\"\n (keypress.enter)=\"navigateToSection(leftSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Left Section' : 'Section' }}&nbsp; </span>\n @if (leftSection !== 'none' && !modeLr()) {\n <span #leftSectionNumber class=\"section-number\">\n {{ leftSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n\n <!-- CURRENT SECTION TEXT -->\n <div class=\"current-section-wrapper\">\n @if (isLoading()) {\n <p class=\"current-section-loading\">\n <span>Loading</span>\n </p>\n } @else {\n @if (section) {\n <h3 class=\"current-section-text\">\n <span class=\"prefix\">Section&nbsp;</span>\n <span #currentSection class=\"section-number\">{{ section }}</span>\n </h3>\n }\n }\n </div>\n\n <!-- RIGHT SECTION BUTTON -->\n @if (rightSection) {\n <div\n class=\"neighbor-button-right neighbor-button\"\n [class.is-none]=\"rightSection === 'none'\"\n tabindex=\"1\"\n (click)=\"navigateToSection(rightSection!)\"\n (keypress.enter)=\"navigateToSection(rightSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Right Section' : 'Section' }}&nbsp; </span>\n @if (rightSection !== 'none' && !modeLr()) {\n <span #rightSectionNumber class=\"section-number\">\n {{ rightSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n", styles: [".sdc-neighbors{--sdc-neighbors-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-text-color: #ffffff;--sdc-neighbors-border-radius: 9999px;--sdc-neighbors-padding-x: .75rem;--sdc-neighbors-padding-y: .625rem;--sdc-neighbors-height: 2rem;--sdc-neighbors-max-width: 10rem;--sdc-neighbors-button-width: 75px;--sdc-neighbors-button-height: 2rem;--sdc-neighbors-button-offset: -31%;--sdc-neighbors-button-icon-color: #ffffff;--sdc-neighbors-button-hover-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-button-text-font-weight: 600;--sdc-neighbors-button-text-font-size: .625rem;--sdc-neighbors-button-text-transform: uppercase;--sdc-neighbors-prefix-opacity: .7;--sdc-neighbors-current-section-loading-font-weight: 600;--sdc-neighbors-current-section-loading-font-size: .75rem;--sdc-neighbors-current-section-text-font-weight: 600;--sdc-neighbors-current-section-text-font-size: .625rem;--sdc-neighbors-current-section-text-transform: uppercase}.neighbors-container{position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--sdc-neighbors-background-color);margin-left:auto;margin-right:auto;padding-left:var(--sdc-neighbors-padding-x);padding-right:var(--sdc-neighbors-padding-x);padding-top:var(--sdc-neighbors-padding-y);padding-bottom:var(--sdc-neighbors-padding-y);border-radius:var(--sdc-neighbors-border-radius);height:var(--sdc-neighbors-height);max-width:var(--sdc-neighbors-max-width);pointer-events:auto}.neighbor-button{position:absolute;width:var(--sdc-neighbors-button-width);height:var(--sdc-neighbors-button-height);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:opacity .15s cubic-bezier(.4,0,.2,1)}.neighbor-button-left{left:var(--sdc-neighbors-button-offset);flex-direction:row-reverse}.neighbor-button-right{right:var(--sdc-neighbors-button-offset);flex-direction:row}.neighbor-button.is-none{opacity:0;pointer-events:none}.neighbor-button-icon{display:flex;align-items:center;height:100%;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.neighbor-button:hover .neighbor-button-icon{background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button-icon i{display:block;color:var(--sdc-neighbors-button-icon-color);margin-top:auto;margin-bottom:auto}.neighbor-button-icon svg{width:.875rem;height:.875rem}.neighbor-button-label{opacity:0;transition:opacity .15s cubic-bezier(.4,0,.2,1);display:flex;flex-grow:1;height:100%;align-items:center;background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button:hover .neighbor-button-label{opacity:1}.neighbor-button-left .neighbor-button-label{padding-left:1.25rem;padding-right:.5rem;border-top-left-radius:9999px;border-bottom-left-radius:9999px}.neighbor-button-right .neighbor-button-label{padding-left:.5rem;padding-right:1.25rem;border-top-right-radius:9999px;border-bottom-right-radius:9999px}.neighbor-button-label p{color:var(--sdc-neighbors-text-color);font-size:var(--sdc-neighbors-button-text-font-size);font-weight:var(--sdc-neighbors-button-text-font-weight);text-transform:var(--sdc-neighbors-button-text-transform)}.neighbor-button-label .prefix{opacity:var(--sdc-neighbors-prefix-opacity);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(var(--sdc-neighbors-button-width) - 1.875rem)}.neighbor-button-label .section-number{white-space:nowrap}.current-section-wrapper{display:block;margin-left:auto;margin-right:auto;cursor:default;min-width:0;overflow:hidden}.current-section-loading{font-weight:var(--sdc-neighbors-current-section-loading-font-weight);font-size:var(--sdc-neighbors-current-section-loading-font-size);color:var(--sdc-neighbors-text-color)}.current-section-text{display:flex;font-weight:var(--sdc-neighbors-current-section-text-font-weight);font-size:var(--sdc-neighbors-current-section-text-font-size);color:var(--sdc-neighbors-text-color);text-transform:var(--sdc-neighbors-current-section-text-transform);overflow:hidden;min-width:0}.current-section-text .prefix{opacity:var(--sdc-neighbors-prefix-opacity);flex-shrink:0;white-space:nowrap}.current-section-text .section-number{display:inline-block;max-width:3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.current-section-text .prefix,.neighbor-button-label .prefix{display:none}.neighbors-container{max-width:7.5rem}.current-section-text .section-number{max-width:2.5rem}.neighbor-button{width:60px}}@media(max-width:420px){.neighbors-container{max-width:6rem}.current-section-text .section-number{max-width:2rem}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
175
176
  }
176
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: NeighborsComponent, decorators: [{
177
178
  type: Component,
178
179
  args: [{ selector: 'sdc-neighbors', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #neighborsContainer class=\"neighbors-container\" [class]=\"computedClass()\" [class.hidden]=\"!showElement()\">\n <!-- LEFT SECTION BUTTON -->\n @if (leftSection) {\n <div\n class=\"neighbor-button-left neighbor-button\"\n [class.is-none]=\"leftSection === 'none'\"\n tabindex=\"0\"\n (click)=\"navigateToSection(leftSection!)\"\n (keypress.enter)=\"navigateToSection(leftSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Left Section' : 'Section' }}&nbsp; </span>\n @if (leftSection !== 'none' && !modeLr()) {\n <span #leftSectionNumber class=\"section-number\">\n {{ leftSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n\n <!-- CURRENT SECTION TEXT -->\n <div class=\"current-section-wrapper\">\n @if (isLoading()) {\n <p class=\"current-section-loading\">\n <span>Loading</span>\n </p>\n } @else {\n @if (section) {\n <h3 class=\"current-section-text\">\n <span class=\"prefix\">Section&nbsp;</span>\n <span #currentSection class=\"section-number\">{{ section }}</span>\n </h3>\n }\n }\n </div>\n\n <!-- RIGHT SECTION BUTTON -->\n @if (rightSection) {\n <div\n class=\"neighbor-button-right neighbor-button\"\n [class.is-none]=\"rightSection === 'none'\"\n tabindex=\"1\"\n (click)=\"navigateToSection(rightSection!)\"\n (keypress.enter)=\"navigateToSection(rightSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Right Section' : 'Section' }}&nbsp; </span>\n @if (rightSection !== 'none' && !modeLr()) {\n <span #rightSectionNumber class=\"section-number\">\n {{ rightSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n", styles: [".sdc-neighbors{--sdc-neighbors-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-text-color: #ffffff;--sdc-neighbors-border-radius: 9999px;--sdc-neighbors-padding-x: .75rem;--sdc-neighbors-padding-y: .625rem;--sdc-neighbors-height: 2rem;--sdc-neighbors-max-width: 10rem;--sdc-neighbors-button-width: 75px;--sdc-neighbors-button-height: 2rem;--sdc-neighbors-button-offset: -31%;--sdc-neighbors-button-icon-color: #ffffff;--sdc-neighbors-button-hover-background-color: rgba(0, 0, 0, .85);--sdc-neighbors-button-text-font-weight: 600;--sdc-neighbors-button-text-font-size: .625rem;--sdc-neighbors-button-text-transform: uppercase;--sdc-neighbors-prefix-opacity: .7;--sdc-neighbors-current-section-loading-font-weight: 600;--sdc-neighbors-current-section-loading-font-size: .75rem;--sdc-neighbors-current-section-text-font-weight: 600;--sdc-neighbors-current-section-text-font-size: .625rem;--sdc-neighbors-current-section-text-transform: uppercase}.neighbors-container{position:relative;display:flex;justify-content:center;align-items:center;background-color:var(--sdc-neighbors-background-color);margin-left:auto;margin-right:auto;padding-left:var(--sdc-neighbors-padding-x);padding-right:var(--sdc-neighbors-padding-x);padding-top:var(--sdc-neighbors-padding-y);padding-bottom:var(--sdc-neighbors-padding-y);border-radius:var(--sdc-neighbors-border-radius);height:var(--sdc-neighbors-height);max-width:var(--sdc-neighbors-max-width);pointer-events:auto}.neighbor-button{position:absolute;width:var(--sdc-neighbors-button-width);height:var(--sdc-neighbors-button-height);display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:opacity .15s cubic-bezier(.4,0,.2,1)}.neighbor-button-left{left:var(--sdc-neighbors-button-offset);flex-direction:row-reverse}.neighbor-button-right{right:var(--sdc-neighbors-button-offset);flex-direction:row}.neighbor-button.is-none{opacity:0;pointer-events:none}.neighbor-button-icon{display:flex;align-items:center;height:100%;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.neighbor-button:hover .neighbor-button-icon{background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button-icon i{display:block;color:var(--sdc-neighbors-button-icon-color);margin-top:auto;margin-bottom:auto}.neighbor-button-icon svg{width:.875rem;height:.875rem}.neighbor-button-label{opacity:0;transition:opacity .15s cubic-bezier(.4,0,.2,1);display:flex;flex-grow:1;height:100%;align-items:center;background-color:var(--sdc-neighbors-button-hover-background-color)}.neighbor-button:hover .neighbor-button-label{opacity:1}.neighbor-button-left .neighbor-button-label{padding-left:1.25rem;padding-right:.5rem;border-top-left-radius:9999px;border-bottom-left-radius:9999px}.neighbor-button-right .neighbor-button-label{padding-left:.5rem;padding-right:1.25rem;border-top-right-radius:9999px;border-bottom-right-radius:9999px}.neighbor-button-label p{color:var(--sdc-neighbors-text-color);font-size:var(--sdc-neighbors-button-text-font-size);font-weight:var(--sdc-neighbors-button-text-font-weight);text-transform:var(--sdc-neighbors-button-text-transform)}.neighbor-button-label .prefix{opacity:var(--sdc-neighbors-prefix-opacity);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(var(--sdc-neighbors-button-width) - 1.875rem)}.neighbor-button-label .section-number{white-space:nowrap}.current-section-wrapper{display:block;margin-left:auto;margin-right:auto;cursor:default;min-width:0;overflow:hidden}.current-section-loading{font-weight:var(--sdc-neighbors-current-section-loading-font-weight);font-size:var(--sdc-neighbors-current-section-loading-font-size);color:var(--sdc-neighbors-text-color)}.current-section-text{display:flex;font-weight:var(--sdc-neighbors-current-section-text-font-weight);font-size:var(--sdc-neighbors-current-section-text-font-size);color:var(--sdc-neighbors-text-color);text-transform:var(--sdc-neighbors-current-section-text-transform);overflow:hidden;min-width:0}.current-section-text .prefix{opacity:var(--sdc-neighbors-prefix-opacity);flex-shrink:0;white-space:nowrap}.current-section-text .section-number{display:inline-block;max-width:3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.current-section-text .prefix,.neighbor-button-label .prefix{display:none}.neighbors-container{max-width:7.5rem}.current-section-text .section-number{max-width:2.5rem}.neighbor-button{width:60px}}@media(max-width:420px){.neighbors-container{max-width:6rem}.current-section-text .section-number{max-width:2rem}}\n"] }]
179
- }], propDecorators: { neighborsContainer: [{
180
- type: ViewChild,
181
- args: ['neighborsContainer']
182
- }], currentSection: [{
183
- type: ViewChild,
184
- args: ['currentSection', { static: false }]
185
- }], currentSection3d: [{
186
- type: ViewChild,
187
- args: ['currentSection3d', { static: false }]
188
- }], leftSectionElement: [{
189
- type: ViewChild,
190
- args: ['leftSectionNumber', { static: false }]
191
- }], rightSectionElement: [{
192
- type: ViewChild,
193
- args: ['rightSectionNumber', { static: false }]
194
- }], translate: [{ type: i0.Input, args: [{ isSignal: true, alias: "translate", required: false }] }], dvmService: [{ type: i0.Input, args: [{ isSignal: true, alias: "dvmService", required: true }] }], currentSectionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSectionId", required: true }] }], hasAvailability: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasAvailability", required: true }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], showElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "showElement", required: false }] }], modeLr: [{ type: i0.Input, args: [{ isSignal: true, alias: "modeLr", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], sectionChange: [{
195
- type: Output
196
- }] } });
180
+ }], propDecorators: { neighborsContainer: [{ type: i0.ViewChild, args: ['neighborsContainer', { isSignal: true }] }], currentSection: [{ type: i0.ViewChild, args: ['currentSection', { isSignal: true }] }], currentSection3d: [{ type: i0.ViewChild, args: ['currentSection3d', { isSignal: true }] }], leftSectionElement: [{ type: i0.ViewChild, args: ['leftSectionNumber', { isSignal: true }] }], rightSectionElement: [{ type: i0.ViewChild, args: ['rightSectionNumber', { isSignal: true }] }], dvmService: [{ type: i0.Input, args: [{ isSignal: true, alias: "dvmService", required: true }] }], currentSectionId: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentSectionId", required: true }] }], hasAvailability: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasAvailability", required: true }] }], translate: [{ type: i0.Input, args: [{ isSignal: true, alias: "translate", required: false }] }], isLoading: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLoading", required: false }] }], showElement: [{ type: i0.Input, args: [{ isSignal: true, alias: "showElement", required: false }] }], modeLr: [{ type: i0.Input, args: [{ isSignal: true, alias: "modeLr", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], sectionChange: [{ type: i0.Output, args: ["sectionChange"] }] } });
197
181
 
198
182
  /**
199
183
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"3ddv-software-division-components-dvm-neighbors.mjs","sources":["../../dvm/neighbors/neighbors.component.ts","../../dvm/neighbors/neighbors.component.html","../../dvm/neighbors/3ddv-software-division-components-dvm-neighbors.ts"],"sourcesContent":["import { ThemeClass } from '@3ddv/software-division-components/shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n EventEmitter,\n input,\n OnDestroy,\n Output,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { Direction, HasAvailabilityFn, NeighborsDvmService, SectionChangeEvent, TranslateSectionIdFn } from './types';\n\n@Component({\n selector: 'sdc-neighbors',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './neighbors.component.html',\n styleUrl: './neighbors.component.css',\n})\nexport class NeighborsComponent implements OnDestroy {\n // VIEWCHILD\n @ViewChild('neighborsContainer')\n public readonly neighborsContainer!: ElementRef<HTMLDivElement>;\n\n @ViewChild('currentSection', { static: false })\n public readonly currentSection!: ElementRef<HTMLSpanElement>;\n\n @ViewChild('currentSection3d', { static: false })\n public readonly currentSection3d!: ElementRef<HTMLSpanElement>;\n\n @ViewChild('leftSectionNumber', { static: false })\n public readonly leftSectionElement!: ElementRef<HTMLSpanElement>;\n\n @ViewChild('rightSectionNumber', { static: false })\n public readonly rightSectionElement!: ElementRef<HTMLSpanElement>;\n\n // REQUIRED INPUTS\n public readonly translate = input<TranslateSectionIdFn>((id: string) => id);\n public readonly dvmService = input.required<NeighborsDvmService>();\n public readonly currentSectionId = input.required<string | null>();\n public readonly hasAvailability = input.required<HasAvailabilityFn>();\n\n // OPTIONAL INPUTS\n public readonly isLoading = input<boolean>(false);\n public readonly showElement = input<boolean>(true);\n public readonly modeLr = input<boolean>(false);\n public readonly className = input<string>('');\n public readonly theme = input<ThemeClass>('theme-sdc');\n\n // OUTPUTS\n @Output() sectionChange = new EventEmitter<SectionChangeEvent>();\n\n /**\n * Computed class string that combines theme and user classes.\n */\n protected readonly computedClass = computed(() => {\n const themeClass = this.theme();\n const className = this.className();\n return Array.from(new Set(['sdc-neighbors', themeClass, className]))\n .filter(Boolean)\n .join(' ');\n });\n\n // COMPONENT STATE\n private readonly subscriptions: Subscription[] = [];\n private readonly relatedMaps = signal<Record<string, { l?: string; r?: string }>>({});\n private readonly fetchingIds = new Set<string>();\n\n // COMPUTED STATE\n protected readonly leftSectionId = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return null;\n return this.findAvailableNeighbor('prev', currentId);\n } catch (error) {\n return null;\n }\n });\n\n protected readonly rightSectionId = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return null;\n return this.findAvailableNeighbor('next', currentId);\n } catch (error) {\n return null;\n }\n });\n\n protected readonly currentSectionLabel = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return 'Loading';\n return this.translate()(currentId) || currentId;\n } catch (error) {\n return 'Loading';\n }\n });\n\n protected readonly leftSectionLabel = computed(() => {\n try {\n const leftId = this.leftSectionId();\n if (!leftId) return null;\n return this.translate()(leftId) || leftId;\n } catch (error) {\n return null;\n }\n });\n\n protected readonly rightSectionLabel = computed(() => {\n try {\n const rightId = this.rightSectionId();\n if (!rightId) return null;\n return this.translate()(rightId) || rightId;\n } catch (error) {\n return null;\n }\n });\n\n // NEIGHBOR RESOLUTION ALGORITHM\n private findAvailableNeighbor(type: Direction, currentSectionTdcId: string): string | null {\n try {\n const neighborKey = type === 'prev' ? 'l' : 'r';\n const noNeighborValue = 'none';\n\n const neighbor = this.relatedMaps()[currentSectionTdcId] ?? null;\n\n if (!neighbor) {\n this.fetchSection(currentSectionTdcId);\n return null;\n }\n\n const neighborSectionTdcId = neighbor[neighborKey] ?? noNeighborValue;\n\n // Handle 'none' boundary\n if (!neighborSectionTdcId || neighborSectionTdcId === noNeighborValue) {\n return null;\n }\n\n // Skip general admission sections — not navigable as neighbors\n if (neighborSectionTdcId.includes('general_admission')) {\n return this.findAvailableNeighbor(type, neighborSectionTdcId);\n }\n\n // Check availability using TDC ID\n if (this.hasAvailability()(neighborSectionTdcId)) {\n return neighborSectionTdcId;\n }\n\n // Recursively find next available (skip unavailable sections)\n return this.findAvailableNeighbor(type, neighborSectionTdcId);\n } catch (error) {\n return null;\n }\n }\n\n private fetchSection(sectionId: string): void {\n if (this.relatedMaps()[sectionId] || this.fetchingIds.has(sectionId)) {\n return;\n }\n this.fetchingIds.add(sectionId);\n void this.dvmService().getRelatedMapsForSection(sectionId).then(related => {\n this.fetchingIds.delete(sectionId);\n if (!related) return;\n const entry: { l?: string; r?: string } = {};\n if (related['left']?.map_id) entry.l = related['left'].map_id;\n if (related['right']?.map_id) entry.r = related['right'].map_id;\n this.relatedMaps.update(prev => ({ ...prev, [sectionId]: entry }));\n });\n }\n\n // GETTERS\n public get leftSection(): string | null {\n return this.leftSectionId();\n }\n\n public get rightSection(): string | null {\n return this.rightSectionId();\n }\n\n public get section(): string | null {\n return this.currentSectionLabel();\n }\n\n ngOnDestroy(): void {\n this.subscriptions.forEach((sub: Subscription): void => sub.unsubscribe());\n }\n\n // METHODS\n public navigateToSection(section: string): void {\n if (section === 'none' || !section) {\n return;\n }\n\n const leftId = this.leftSectionId();\n const rightId = this.rightSectionId();\n\n let direction: Direction;\n if (section === leftId) {\n direction = 'prev';\n } else if (section === rightId) {\n direction = 'next';\n } else {\n return;\n }\n\n this.sectionChange.emit({ direction, sectionId: section });\n }\n}\n","<div #neighborsContainer class=\"neighbors-container\" [class]=\"computedClass()\" [class.hidden]=\"!showElement()\">\n <!-- LEFT SECTION BUTTON -->\n @if (leftSection) {\n <div\n class=\"neighbor-button-left neighbor-button\"\n [class.is-none]=\"leftSection === 'none'\"\n tabindex=\"0\"\n (click)=\"navigateToSection(leftSection!)\"\n (keypress.enter)=\"navigateToSection(leftSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Left Section' : 'Section' }}&nbsp; </span>\n @if (leftSection !== 'none' && !modeLr()) {\n <span #leftSectionNumber class=\"section-number\">\n {{ leftSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n\n <!-- CURRENT SECTION TEXT -->\n <div class=\"current-section-wrapper\">\n @if (isLoading()) {\n <p class=\"current-section-loading\">\n <span>Loading</span>\n </p>\n } @else {\n @if (section) {\n <h3 class=\"current-section-text\">\n <span class=\"prefix\">Section&nbsp;</span>\n <span #currentSection class=\"section-number\">{{ section }}</span>\n </h3>\n }\n }\n </div>\n\n <!-- RIGHT SECTION BUTTON -->\n @if (rightSection) {\n <div\n class=\"neighbor-button-right neighbor-button\"\n [class.is-none]=\"rightSection === 'none'\"\n tabindex=\"1\"\n (click)=\"navigateToSection(rightSection!)\"\n (keypress.enter)=\"navigateToSection(rightSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Right Section' : 'Section' }}&nbsp; </span>\n @if (rightSection !== 'none' && !modeLr()) {\n <span #rightSectionNumber class=\"section-number\">\n {{ rightSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"3ddv-software-division-components-dvm-neighbors.mjs","sources":["../../dvm/neighbors/neighbors.component.ts","../../dvm/neighbors/neighbors.component.html","../../dvm/neighbors/3ddv-software-division-components-dvm-neighbors.ts"],"sourcesContent":["import { ThemeClass } from '@3ddv/software-division-components/shared';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { Direction, HasAvailabilityFn, NeighborsDvmService, SectionChangeEvent, TranslateSectionIdFn } from './types';\n\n@Component({\n selector: 'sdc-neighbors',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './neighbors.component.html',\n styleUrl: './neighbors.component.css',\n})\nexport class NeighborsComponent {\n // VIEWCHILD\n public readonly neighborsContainer = viewChild<ElementRef<HTMLDivElement>>('neighborsContainer');\n public readonly currentSection = viewChild<ElementRef<HTMLSpanElement>>('currentSection');\n public readonly currentSection3d = viewChild<ElementRef<HTMLSpanElement>>('currentSection3d');\n public readonly leftSectionElement = viewChild<ElementRef<HTMLSpanElement>>('leftSectionNumber');\n public readonly rightSectionElement = viewChild<ElementRef<HTMLSpanElement>>('rightSectionNumber');\n\n // REQUIRED INPUTS\n public readonly dvmService = input.required<NeighborsDvmService>();\n public readonly currentSectionId = input.required<string | null>();\n public readonly hasAvailability = input.required<HasAvailabilityFn>();\n\n // OPTIONAL INPUTS\n public readonly translate = input<TranslateSectionIdFn>((id: string) => id);\n public readonly isLoading = input<boolean>(false);\n public readonly showElement = input<boolean>(true);\n public readonly modeLr = input<boolean>(false);\n public readonly className = input<string>('');\n public readonly theme = input<ThemeClass>('theme-sdc');\n\n // OUTPUTS\n public readonly sectionChange = output<SectionChangeEvent>();\n\n protected readonly computedClass = computed(() => {\n const themeClass = this.theme();\n const className = this.className();\n return Array.from(new Set(['sdc-neighbors', themeClass, className]))\n .filter(Boolean)\n .join(' ');\n });\n\n // COMPONENT STATE\n private readonly relatedMaps = signal<Record<string, { l?: string; r?: string }>>({});\n private readonly fetchingIds = new Set<string>();\n\n // COMPUTED STATE\n protected readonly leftSectionId = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return null;\n const neighbor = this.findAvailableNeighbor('prev', currentId);\n return neighbor === currentId ? null : neighbor;\n } catch (error) {\n return null;\n }\n });\n\n protected readonly rightSectionId = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return null;\n const neighbor = this.findAvailableNeighbor('next', currentId);\n return neighbor === currentId ? null : neighbor;\n } catch (error) {\n return null;\n }\n });\n\n protected readonly currentSectionLabel = computed(() => {\n try {\n const currentId = this.currentSectionId();\n if (!currentId) return 'Loading';\n return this.translate()(currentId) || currentId;\n } catch (error) {\n return 'Loading';\n }\n });\n\n protected readonly leftSectionLabel = computed(() => {\n try {\n const leftId = this.leftSectionId();\n if (!leftId) return null;\n return this.translate()(leftId) || leftId;\n } catch (error) {\n return null;\n }\n });\n\n protected readonly rightSectionLabel = computed(() => {\n try {\n const rightId = this.rightSectionId();\n if (!rightId) return null;\n return this.translate()(rightId) || rightId;\n } catch (error) {\n return null;\n }\n });\n\n // NEIGHBOR RESOLUTION ALGORITHM\n private findAvailableNeighbor(\n type: Direction,\n currentSectionTdcId: string,\n visited = new Set<string>()\n ): string | null {\n try {\n if (visited.has(currentSectionTdcId)) {\n return null;\n }\n visited.add(currentSectionTdcId);\n\n const neighborKey = type === 'prev' ? 'l' : 'r';\n const noNeighborValue = 'none';\n\n const neighbor = this.relatedMaps()[currentSectionTdcId] ?? null;\n\n if (!neighbor) {\n this.fetchSection(currentSectionTdcId);\n return null;\n }\n\n const neighborSectionTdcId = neighbor[neighborKey] ?? noNeighborValue;\n\n // Handle 'none' boundary\n if (!neighborSectionTdcId || neighborSectionTdcId === noNeighborValue) {\n return null;\n }\n\n // Skip general admission sections — not navigable as neighbors\n if (neighborSectionTdcId.includes('general_admission')) {\n return this.findAvailableNeighbor(type, neighborSectionTdcId, visited);\n }\n\n // Check availability using TDC ID\n if (this.hasAvailability()(neighborSectionTdcId)) {\n return neighborSectionTdcId;\n }\n\n // Recursively find next available (skip unavailable sections)\n return this.findAvailableNeighbor(type, neighborSectionTdcId, visited);\n } catch (error) {\n return null;\n }\n }\n\n private fetchSection(sectionId: string): void {\n if (this.relatedMaps()[sectionId] || this.fetchingIds.has(sectionId)) {\n return;\n }\n this.fetchingIds.add(sectionId);\n void this.dvmService()\n .getRelatedMapsForSection(sectionId)\n .then(related => {\n this.fetchingIds.delete(sectionId);\n if (!related) return;\n const entry: { l?: string; r?: string } = {};\n if (related['left']?.map_id) entry.l = related['left'].map_id;\n if (related['right']?.map_id) entry.r = related['right'].map_id;\n this.relatedMaps.update(prev => ({ ...prev, [sectionId]: entry }));\n });\n }\n\n // GETTERS\n public get leftSection(): string | null {\n return this.leftSectionId();\n }\n\n public get rightSection(): string | null {\n return this.rightSectionId();\n }\n\n public get section(): string | null {\n return this.currentSectionLabel();\n }\n\n // METHODS\n public navigateToSection(section: string): void {\n if (section === 'none' || !section) {\n return;\n }\n\n const leftId = this.leftSectionId();\n const rightId = this.rightSectionId();\n\n let direction: Direction;\n if (section === leftId) {\n direction = 'prev';\n } else if (section === rightId) {\n direction = 'next';\n } else {\n return;\n }\n\n this.sectionChange.emit({ direction, sectionId: section });\n }\n}\n","<div #neighborsContainer class=\"neighbors-container\" [class]=\"computedClass()\" [class.hidden]=\"!showElement()\">\n <!-- LEFT SECTION BUTTON -->\n @if (leftSection) {\n <div\n class=\"neighbor-button-left neighbor-button\"\n [class.is-none]=\"leftSection === 'none'\"\n tabindex=\"0\"\n (click)=\"navigateToSection(leftSection!)\"\n (keypress.enter)=\"navigateToSection(leftSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15.75 19.5 8.25 12l7.5-7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Left Section' : 'Section' }}&nbsp; </span>\n @if (leftSection !== 'none' && !modeLr()) {\n <span #leftSectionNumber class=\"section-number\">\n {{ leftSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n\n <!-- CURRENT SECTION TEXT -->\n <div class=\"current-section-wrapper\">\n @if (isLoading()) {\n <p class=\"current-section-loading\">\n <span>Loading</span>\n </p>\n } @else {\n @if (section) {\n <h3 class=\"current-section-text\">\n <span class=\"prefix\">Section&nbsp;</span>\n <span #currentSection class=\"section-number\">{{ section }}</span>\n </h3>\n }\n }\n </div>\n\n <!-- RIGHT SECTION BUTTON -->\n @if (rightSection) {\n <div\n class=\"neighbor-button-right neighbor-button\"\n [class.is-none]=\"rightSection === 'none'\"\n tabindex=\"1\"\n (click)=\"navigateToSection(rightSection!)\"\n (keypress.enter)=\"navigateToSection(rightSection!)\">\n <!-- ARROW ICON -->\n <div class=\"neighbor-button-icon\">\n <i>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"3\"\n stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m8.25 4.5 7.5 7.5-7.5 7.5\" />\n </svg>\n </i>\n </div>\n\n <!-- SECTION LABEL -->\n <div class=\"neighbor-button-label\">\n <p>\n <span class=\"prefix\"> {{ modeLr() ? 'Right Section' : 'Section' }}&nbsp; </span>\n @if (rightSection !== 'none' && !modeLr()) {\n <span #rightSectionNumber class=\"section-number\">\n {{ rightSectionLabel() }}\n </span>\n }\n </p>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -94,6 +94,7 @@ const BUTTON_VARIANTS = {
94
94
  'warning-light': 'warning-light',
95
95
  'destructive-light': 'destructive-light',
96
96
  'outline-white': 'outline-white',
97
+ 'outline-brand': 'outline-brand',
97
98
  'outline-alternative': 'outline-alternative',
98
99
  'outline-accent': 'outline-accent',
99
100
  link: 'link',
@@ -366,11 +367,11 @@ class ButtonComponent {
366
367
  }, 600);
367
368
  }
368
369
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
369
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: ButtonComponent, isStandalone: true, selector: "sdc-button", inputs: { theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ripple: { classPropertyName: "ripple", publicName: "ripple", isSignal: true, isRequired: false, transformFunction: null }, debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur", isDebounced: "isDebounced" }, host: { listeners: { "click": "onHostClick($event)" } }, ngImport: i0, template: "<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n", styles: [".sdc-button{--sdc-button-ripple-color: var(--color-neutral-300);--sdc-button-text-color: var(--color-pure-white);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium);--sdc-button-background: var(--color-primary);--sdc-button-padding: var(--space-2) var(--space-7);--sdc-button-border-color: var(--color-primary);--sdc-button-border-radius: var(--radius-full);--sdc-button-border-width: var(--border-0);--sdc-button-height: 100%;--sdc-button-width: 100%;position:relative;overflow:hidden;cursor:pointer;color:var(--sdc-button-text-color);font-size:var(--sdc-button-text-size);font-weight:var(--sdc-button-text-weight);background:var(--sdc-button-background);padding:var(--sdc-button-padding);border-color:var(--sdc-button-border-color);border-radius:var(--sdc-button-border-radius);border-width:var(--sdc-button-border-width);height:var(--sdc-button-height);width:var(--sdc-button-width)}.sdc-button[disabled]{cursor:not-allowed;opacity:.6;transition:opacity .2s ease-in-out}.sdc-button:not([disabled]){transition:all .2s ease-in-out}.sdc-button:not([disabled]):hover{transform:translateY(-1px);box-shadow:0 4px 8px #0000001a}.sdc-button:not([disabled]):focus{outline:none}.sdc-button:not([disabled]):active{transform:translateY(0);box-shadow:0 2px 4px #0000001a}.sdc-button.variant-primary{--sdc-button-background: var(--color-primary);--sdc-button-border-color: var(--color-primary)}.sdc-button.variant-primary-light{--sdc-button-background: color-mix(in srgb, var(--color-primary) 15%, white);--sdc-button-border-color: var(--color-outline);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-secondary{--sdc-button-background: var(--color-secondary);--sdc-button-border-color: var(--color-secondary);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-alternative{--sdc-button-background: var(--color-alternative);--sdc-button-border-color: var(--color-alternative)}.sdc-button.variant-alternative-light{--sdc-button-background: color-mix(in srgb, var(--color-alternative) 15%, white);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-accent{--sdc-button-background: var(--color-accent);--sdc-button-border-color: var(--color-accent)}.sdc-button.variant-accent-light{--sdc-button-background: color-mix(in srgb, var(--color-accent) 15%, white);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-success{--sdc-button-background: var(--color-success);--sdc-button-border-color: var(--color-success)}.sdc-button.variant-warning{--sdc-button-background: var(--color-warning);--sdc-button-border-color: var(--color-warning)}.sdc-button.variant-danger{--sdc-button-background: var(--color-danger);--sdc-button-border-color: var(--color-danger)}.sdc-button.variant-outline{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-primary);--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-outline:hover{box-shadow:none}.sdc-button.variant-outline-accent{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-outline-accent:hover{box-shadow:none}.sdc-button.variant-outline-alternative{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-alternative)}.sdc-button.variant-outline-alternative:hover{box-shadow:none}.sdc-button.variant-outline-white{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: white;--sdc-button-text-color: white}.sdc-button.variant-outline-white:hover{box-shadow:none}.sdc-button.variant-link{--sdc-button-background: transparent;--sdc-button-border-color: transparent;--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-link:hover{box-shadow:none}.sdc-button.variant-success-light{--sdc-button-background: color-mix(in srgb, var(--color-success) 15%, white);--sdc-button-border-color: var(--color-success);--sdc-button-text-color: var(--color-success)}.sdc-button.variant-warning-light{--sdc-button-background: color-mix(in srgb, var(--color-warning) 15%, white);--sdc-button-border-color: var(--color-warning);--sdc-button-text-color: var(--color-warning)}.sdc-button.variant-destructive-light{--sdc-button-background: color-mix(in srgb, var(--color-danger) 20%, white);--sdc-button-border-color: var(--color-danger);--sdc-button-text-color: var(--color-danger)}.sdc-button.variant-secondary-blue{--sdc-button-background: var(--3ddv-blue-button-background);--sdc-button-border-color: var(--3ddv-blue-button-background);--sdc-button-text-color: var(--3ddv-blue-text)}.sdc-button.variant-gray{--sdc-button-background: var(--color-pure-gray);--sdc-button-border-color: var(--color-pure-gray);--sdc-button-text-color: var(--color-pure-white)}.sdc-button.variant-white{--sdc-button-background: var(--color-pure-white);--sdc-button-border-color: var(--color-pure-white);--sdc-button-text-color: var(--color-pure-black)}.sdc-button.size-xxs{--sdc-button-padding: 0;--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-xs{--sdc-button-padding: var(--space-1) var(--space-2_5);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-sm{--sdc-button-padding: var(--space-1) var(--space-4);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-md{--sdc-button-padding: var(--space-1_5) var(--space-7);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-lg,.sdc-button.size-2xl{--sdc-button-padding: var(--space-2) var(--space-8);--sdc-button-text-size: var(--text-lg);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-xl{--sdc-button-padding: var(--space-4) var(--space-8);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-bold)}.sdc-button.size-circle-xs{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-4);--sdc-button-width: var(--space-4);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-sm{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-6);--sdc-button-width: var(--space-6);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-md{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-8);--sdc-button-width: var(--space-8);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-lg{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-10);--sdc-button-width: var(--space-10);--sdc-button-text-size: var(--text-xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-xl{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-12);--sdc-button-width: var(--space-12);--sdc-button-text-size: var(--text-2xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.radius-default{--sdc-button-border-radius: var(--radius-default)}.sdc-button.radius-sm{--sdc-button-border-radius: var(--radius-sm)}.sdc-button.radius-md{--sdc-button-border-radius: var(--radius-md)}.sdc-button.radius-lg{--sdc-button-border-radius: var(--radius-lg)}.sdc-button.radius-xl{--sdc-button-border-radius: var(--radius-xl)}.sdc-button.radius-2xl{--sdc-button-border-radius: var(--radius-2xl)}.sdc-button.radius-full{--sdc-button-border-radius: var(--radius-full)}.sdc-button.variant-glass{--sdc-button-background: rgba(90, 90, 115, .25);--sdc-button-border-width: var(--border-default);--sdc-button-border-color: rgba(255, 255, 255, .12);--sdc-button-text-color: var(--color-pure-white);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:inset 0 1px #ffffff8c,inset 1px 0 #ffffff2e,inset -1px 0 #ffffff0a,inset 0 -1px #ffffff0f}.sdc-button.variant-glass:not([disabled]):hover{--sdc-button-background: rgba(90, 90, 115, .38);box-shadow:inset 0 1px #ffffffb3,inset 1px 0 #ffffff40,inset -1px 0 #ffffff0f,inset 0 -1px #ffffff14;transform:translateY(-1px)}.sdc-button.variant-glass:not([disabled]):active{--sdc-button-background: rgba(90, 90, 115, .15);box-shadow:inset 0 1px #ffffff59,inset 1px 0 #ffffff1a;transform:translateY(0)}.sdc-button.border-0{--sdc-button-border-width: var(--border-0)}.sdc-button.border-default{--sdc-button-border-width: var(--border-default)}.sdc-button.border-2{--sdc-button-border-width: var(--border-2)}.sdc-button.border-4{--sdc-button-border-width: var(--border-4)}.sdc-button.border-8{--sdc-button-border-width: var(--border-8)}\n"], dependencies: [{ kind: "ngmodule", type: HlmButtonModule }, { kind: "directive", type: HlmButton, selector: "[hlmBtn]", inputs: ["class", "variant", "size"], exportAs: ["hlmBtn"] }] });
370
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: ButtonComponent, isStandalone: true, selector: "sdc-button", inputs: { theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ripple: { classPropertyName: "ripple", publicName: "ripple", isSignal: true, isRequired: false, transformFunction: null }, debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur", isDebounced: "isDebounced" }, host: { listeners: { "click": "onHostClick($event)" } }, ngImport: i0, template: "<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n", styles: [".sdc-button{--sdc-button-ripple-color: var(--color-neutral-300);--sdc-button-text-color: var(--color-pure-white);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium);--sdc-button-background: var(--color-primary);--sdc-button-padding: var(--space-2) var(--space-7);--sdc-button-border-color: var(--color-primary);--sdc-button-border-radius: var(--radius-full);--sdc-button-border-width: var(--border-0);--sdc-button-height: 100%;--sdc-button-width: 100%;position:relative;overflow:hidden;cursor:pointer;color:var(--sdc-button-text-color);font-size:var(--sdc-button-text-size);font-weight:var(--sdc-button-text-weight);background:var(--sdc-button-background);padding:var(--sdc-button-padding);border-color:var(--sdc-button-border-color);border-radius:var(--sdc-button-border-radius);border-width:var(--sdc-button-border-width);height:var(--sdc-button-height);width:var(--sdc-button-width)}.sdc-button[disabled]{cursor:not-allowed;opacity:.6;transition:opacity .2s ease-in-out}.sdc-button:not([disabled]){transition:all .2s ease-in-out}.sdc-button:not([disabled]):hover{transform:translateY(-1px);box-shadow:0 4px 8px #0000001a}.sdc-button:not([disabled]):focus{outline:none}.sdc-button:not([disabled]):active{transform:translateY(0);box-shadow:0 2px 4px #0000001a}.sdc-button.variant-primary{--sdc-button-background: var(--color-primary);--sdc-button-border-color: var(--color-primary)}.sdc-button.variant-primary-light{--sdc-button-background: color-mix(in srgb, var(--color-primary) 15%, white);--sdc-button-border-color: var(--color-outline);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-secondary{--sdc-button-background: var(--color-secondary);--sdc-button-border-color: var(--color-secondary);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-alternative{--sdc-button-background: var(--color-alternative);--sdc-button-border-color: var(--color-alternative)}.sdc-button.variant-alternative-light{--sdc-button-background: color-mix(in srgb, var(--color-alternative) 15%, white);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-accent{--sdc-button-background: var(--color-accent);--sdc-button-border-color: var(--color-accent)}.sdc-button.variant-accent-light{--sdc-button-background: color-mix(in srgb, var(--color-accent) 15%, white);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-success{--sdc-button-background: var(--color-success);--sdc-button-border-color: var(--color-success)}.sdc-button.variant-warning{--sdc-button-background: var(--color-warning);--sdc-button-border-color: var(--color-warning)}.sdc-button.variant-danger{--sdc-button-background: var(--color-danger);--sdc-button-border-color: var(--color-danger)}.sdc-button.variant-outline{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-primary);--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-outline:hover{box-shadow:none}.sdc-button.variant-outline-accent{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-outline-accent:hover{box-shadow:none}.sdc-button.variant-outline-alternative{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-alternative)}.sdc-button.variant-outline-alternative:hover{box-shadow:none}.sdc-button.variant-outline-white{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: white;--sdc-button-text-color: white}.sdc-button.variant-outline-white:hover{box-shadow:none}.sdc-button.variant-outline-brand{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-brand-foreground);--sdc-button-text-color: var(--color-brand-foreground)}.sdc-button.variant-outline-brand:hover{box-shadow:none}.sdc-button.variant-link{--sdc-button-background: transparent;--sdc-button-border-color: transparent;--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-link:hover{box-shadow:none}.sdc-button.variant-success-light{--sdc-button-background: color-mix(in srgb, var(--color-success) 15%, white);--sdc-button-border-color: var(--color-success);--sdc-button-text-color: var(--color-success)}.sdc-button.variant-warning-light{--sdc-button-background: color-mix(in srgb, var(--color-warning) 15%, white);--sdc-button-border-color: var(--color-warning);--sdc-button-text-color: var(--color-warning)}.sdc-button.variant-destructive-light{--sdc-button-background: color-mix(in srgb, var(--color-danger) 20%, white);--sdc-button-border-color: var(--color-danger);--sdc-button-text-color: var(--color-danger)}.sdc-button.variant-secondary-blue{--sdc-button-background: var(--color-brand-button-background);--sdc-button-border-color: var(--color-brand-button-background);--sdc-button-text-color: var(--color-brand-foreground)}.sdc-button.variant-gray{--sdc-button-background: var(--color-pure-gray);--sdc-button-border-color: var(--color-pure-gray);--sdc-button-text-color: var(--color-pure-white)}.sdc-button.variant-white{--sdc-button-background: var(--color-pure-white);--sdc-button-border-color: var(--color-pure-white);--sdc-button-text-color: var(--color-pure-black)}.sdc-button.size-xxs{--sdc-button-padding: 0;--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-xs{--sdc-button-padding: var(--space-1) var(--space-2_5);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-sm{--sdc-button-padding: var(--space-1) var(--space-4);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-md{--sdc-button-padding: var(--space-1_5) var(--space-7);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-lg,.sdc-button.size-2xl{--sdc-button-padding: var(--space-2) var(--space-8);--sdc-button-text-size: var(--text-lg);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-xl{--sdc-button-padding: var(--space-4) var(--space-8);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-bold)}.sdc-button.size-circle-xs{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-4);--sdc-button-width: var(--space-4);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-sm{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-6);--sdc-button-width: var(--space-6);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-md{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-8);--sdc-button-width: var(--space-8);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-lg{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-10);--sdc-button-width: var(--space-10);--sdc-button-text-size: var(--text-xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-xl{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-12);--sdc-button-width: var(--space-12);--sdc-button-text-size: var(--text-2xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.radius-default{--sdc-button-border-radius: var(--radius-default)}.sdc-button.radius-sm{--sdc-button-border-radius: var(--radius-sm)}.sdc-button.radius-md{--sdc-button-border-radius: var(--radius-md)}.sdc-button.radius-lg{--sdc-button-border-radius: var(--radius-lg)}.sdc-button.radius-xl{--sdc-button-border-radius: var(--radius-xl)}.sdc-button.radius-2xl{--sdc-button-border-radius: var(--radius-2xl)}.sdc-button.radius-full{--sdc-button-border-radius: var(--radius-full)}.sdc-button.variant-glass{--sdc-button-background: rgba(90, 90, 115, .25);--sdc-button-border-width: var(--border-default);--sdc-button-border-color: rgba(255, 255, 255, .12);--sdc-button-text-color: var(--color-pure-white);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:inset 0 1px #ffffff8c,inset 1px 0 #ffffff2e,inset -1px 0 #ffffff0a,inset 0 -1px #ffffff0f}.sdc-button.variant-glass:not([disabled]):hover{--sdc-button-background: rgba(90, 90, 115, .38);box-shadow:inset 0 1px #ffffffb3,inset 1px 0 #ffffff40,inset -1px 0 #ffffff0f,inset 0 -1px #ffffff14;transform:translateY(-1px)}.sdc-button.variant-glass:not([disabled]):active{--sdc-button-background: rgba(90, 90, 115, .15);box-shadow:inset 0 1px #ffffff59,inset 1px 0 #ffffff1a;transform:translateY(0)}.sdc-button.border-0{--sdc-button-border-width: var(--border-0)}.sdc-button.border-default{--sdc-button-border-width: var(--border-default)}.sdc-button.border-2{--sdc-button-border-width: var(--border-2)}.sdc-button.border-4{--sdc-button-border-width: var(--border-4)}.sdc-button.border-8{--sdc-button-border-width: var(--border-8)}\n"], dependencies: [{ kind: "ngmodule", type: HlmButtonModule }, { kind: "directive", type: HlmButton, selector: "[hlmBtn]", inputs: ["class", "variant", "size"], exportAs: ["hlmBtn"] }] });
370
371
  }
371
372
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ButtonComponent, decorators: [{
372
373
  type: Component,
373
- args: [{ selector: 'sdc-button', imports: [HlmButtonModule], template: "<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n", styles: [".sdc-button{--sdc-button-ripple-color: var(--color-neutral-300);--sdc-button-text-color: var(--color-pure-white);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium);--sdc-button-background: var(--color-primary);--sdc-button-padding: var(--space-2) var(--space-7);--sdc-button-border-color: var(--color-primary);--sdc-button-border-radius: var(--radius-full);--sdc-button-border-width: var(--border-0);--sdc-button-height: 100%;--sdc-button-width: 100%;position:relative;overflow:hidden;cursor:pointer;color:var(--sdc-button-text-color);font-size:var(--sdc-button-text-size);font-weight:var(--sdc-button-text-weight);background:var(--sdc-button-background);padding:var(--sdc-button-padding);border-color:var(--sdc-button-border-color);border-radius:var(--sdc-button-border-radius);border-width:var(--sdc-button-border-width);height:var(--sdc-button-height);width:var(--sdc-button-width)}.sdc-button[disabled]{cursor:not-allowed;opacity:.6;transition:opacity .2s ease-in-out}.sdc-button:not([disabled]){transition:all .2s ease-in-out}.sdc-button:not([disabled]):hover{transform:translateY(-1px);box-shadow:0 4px 8px #0000001a}.sdc-button:not([disabled]):focus{outline:none}.sdc-button:not([disabled]):active{transform:translateY(0);box-shadow:0 2px 4px #0000001a}.sdc-button.variant-primary{--sdc-button-background: var(--color-primary);--sdc-button-border-color: var(--color-primary)}.sdc-button.variant-primary-light{--sdc-button-background: color-mix(in srgb, var(--color-primary) 15%, white);--sdc-button-border-color: var(--color-outline);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-secondary{--sdc-button-background: var(--color-secondary);--sdc-button-border-color: var(--color-secondary);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-alternative{--sdc-button-background: var(--color-alternative);--sdc-button-border-color: var(--color-alternative)}.sdc-button.variant-alternative-light{--sdc-button-background: color-mix(in srgb, var(--color-alternative) 15%, white);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-accent{--sdc-button-background: var(--color-accent);--sdc-button-border-color: var(--color-accent)}.sdc-button.variant-accent-light{--sdc-button-background: color-mix(in srgb, var(--color-accent) 15%, white);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-success{--sdc-button-background: var(--color-success);--sdc-button-border-color: var(--color-success)}.sdc-button.variant-warning{--sdc-button-background: var(--color-warning);--sdc-button-border-color: var(--color-warning)}.sdc-button.variant-danger{--sdc-button-background: var(--color-danger);--sdc-button-border-color: var(--color-danger)}.sdc-button.variant-outline{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-primary);--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-outline:hover{box-shadow:none}.sdc-button.variant-outline-accent{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-outline-accent:hover{box-shadow:none}.sdc-button.variant-outline-alternative{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-alternative)}.sdc-button.variant-outline-alternative:hover{box-shadow:none}.sdc-button.variant-outline-white{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: white;--sdc-button-text-color: white}.sdc-button.variant-outline-white:hover{box-shadow:none}.sdc-button.variant-link{--sdc-button-background: transparent;--sdc-button-border-color: transparent;--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-link:hover{box-shadow:none}.sdc-button.variant-success-light{--sdc-button-background: color-mix(in srgb, var(--color-success) 15%, white);--sdc-button-border-color: var(--color-success);--sdc-button-text-color: var(--color-success)}.sdc-button.variant-warning-light{--sdc-button-background: color-mix(in srgb, var(--color-warning) 15%, white);--sdc-button-border-color: var(--color-warning);--sdc-button-text-color: var(--color-warning)}.sdc-button.variant-destructive-light{--sdc-button-background: color-mix(in srgb, var(--color-danger) 20%, white);--sdc-button-border-color: var(--color-danger);--sdc-button-text-color: var(--color-danger)}.sdc-button.variant-secondary-blue{--sdc-button-background: var(--3ddv-blue-button-background);--sdc-button-border-color: var(--3ddv-blue-button-background);--sdc-button-text-color: var(--3ddv-blue-text)}.sdc-button.variant-gray{--sdc-button-background: var(--color-pure-gray);--sdc-button-border-color: var(--color-pure-gray);--sdc-button-text-color: var(--color-pure-white)}.sdc-button.variant-white{--sdc-button-background: var(--color-pure-white);--sdc-button-border-color: var(--color-pure-white);--sdc-button-text-color: var(--color-pure-black)}.sdc-button.size-xxs{--sdc-button-padding: 0;--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-xs{--sdc-button-padding: var(--space-1) var(--space-2_5);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-sm{--sdc-button-padding: var(--space-1) var(--space-4);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-md{--sdc-button-padding: var(--space-1_5) var(--space-7);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-lg,.sdc-button.size-2xl{--sdc-button-padding: var(--space-2) var(--space-8);--sdc-button-text-size: var(--text-lg);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-xl{--sdc-button-padding: var(--space-4) var(--space-8);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-bold)}.sdc-button.size-circle-xs{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-4);--sdc-button-width: var(--space-4);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-sm{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-6);--sdc-button-width: var(--space-6);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-md{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-8);--sdc-button-width: var(--space-8);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-lg{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-10);--sdc-button-width: var(--space-10);--sdc-button-text-size: var(--text-xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-xl{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-12);--sdc-button-width: var(--space-12);--sdc-button-text-size: var(--text-2xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.radius-default{--sdc-button-border-radius: var(--radius-default)}.sdc-button.radius-sm{--sdc-button-border-radius: var(--radius-sm)}.sdc-button.radius-md{--sdc-button-border-radius: var(--radius-md)}.sdc-button.radius-lg{--sdc-button-border-radius: var(--radius-lg)}.sdc-button.radius-xl{--sdc-button-border-radius: var(--radius-xl)}.sdc-button.radius-2xl{--sdc-button-border-radius: var(--radius-2xl)}.sdc-button.radius-full{--sdc-button-border-radius: var(--radius-full)}.sdc-button.variant-glass{--sdc-button-background: rgba(90, 90, 115, .25);--sdc-button-border-width: var(--border-default);--sdc-button-border-color: rgba(255, 255, 255, .12);--sdc-button-text-color: var(--color-pure-white);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:inset 0 1px #ffffff8c,inset 1px 0 #ffffff2e,inset -1px 0 #ffffff0a,inset 0 -1px #ffffff0f}.sdc-button.variant-glass:not([disabled]):hover{--sdc-button-background: rgba(90, 90, 115, .38);box-shadow:inset 0 1px #ffffffb3,inset 1px 0 #ffffff40,inset -1px 0 #ffffff0f,inset 0 -1px #ffffff14;transform:translateY(-1px)}.sdc-button.variant-glass:not([disabled]):active{--sdc-button-background: rgba(90, 90, 115, .15);box-shadow:inset 0 1px #ffffff59,inset 1px 0 #ffffff1a;transform:translateY(0)}.sdc-button.border-0{--sdc-button-border-width: var(--border-0)}.sdc-button.border-default{--sdc-button-border-width: var(--border-default)}.sdc-button.border-2{--sdc-button-border-width: var(--border-2)}.sdc-button.border-4{--sdc-button-border-width: var(--border-4)}.sdc-button.border-8{--sdc-button-border-width: var(--border-8)}\n"] }]
374
+ args: [{ selector: 'sdc-button', imports: [HlmButtonModule], template: "<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n", styles: [".sdc-button{--sdc-button-ripple-color: var(--color-neutral-300);--sdc-button-text-color: var(--color-pure-white);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium);--sdc-button-background: var(--color-primary);--sdc-button-padding: var(--space-2) var(--space-7);--sdc-button-border-color: var(--color-primary);--sdc-button-border-radius: var(--radius-full);--sdc-button-border-width: var(--border-0);--sdc-button-height: 100%;--sdc-button-width: 100%;position:relative;overflow:hidden;cursor:pointer;color:var(--sdc-button-text-color);font-size:var(--sdc-button-text-size);font-weight:var(--sdc-button-text-weight);background:var(--sdc-button-background);padding:var(--sdc-button-padding);border-color:var(--sdc-button-border-color);border-radius:var(--sdc-button-border-radius);border-width:var(--sdc-button-border-width);height:var(--sdc-button-height);width:var(--sdc-button-width)}.sdc-button[disabled]{cursor:not-allowed;opacity:.6;transition:opacity .2s ease-in-out}.sdc-button:not([disabled]){transition:all .2s ease-in-out}.sdc-button:not([disabled]):hover{transform:translateY(-1px);box-shadow:0 4px 8px #0000001a}.sdc-button:not([disabled]):focus{outline:none}.sdc-button:not([disabled]):active{transform:translateY(0);box-shadow:0 2px 4px #0000001a}.sdc-button.variant-primary{--sdc-button-background: var(--color-primary);--sdc-button-border-color: var(--color-primary)}.sdc-button.variant-primary-light{--sdc-button-background: color-mix(in srgb, var(--color-primary) 15%, white);--sdc-button-border-color: var(--color-outline);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-secondary{--sdc-button-background: var(--color-secondary);--sdc-button-border-color: var(--color-secondary);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-alternative{--sdc-button-background: var(--color-alternative);--sdc-button-border-color: var(--color-alternative)}.sdc-button.variant-alternative-light{--sdc-button-background: color-mix(in srgb, var(--color-alternative) 15%, white);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-accent{--sdc-button-background: var(--color-accent);--sdc-button-border-color: var(--color-accent)}.sdc-button.variant-accent-light{--sdc-button-background: color-mix(in srgb, var(--color-accent) 15%, white);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-primary)}.sdc-button.variant-success{--sdc-button-background: var(--color-success);--sdc-button-border-color: var(--color-success)}.sdc-button.variant-warning{--sdc-button-background: var(--color-warning);--sdc-button-border-color: var(--color-warning)}.sdc-button.variant-danger{--sdc-button-background: var(--color-danger);--sdc-button-border-color: var(--color-danger)}.sdc-button.variant-outline{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-primary);--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-outline:hover{box-shadow:none}.sdc-button.variant-outline-accent{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-accent);--sdc-button-text-color: var(--color-accent)}.sdc-button.variant-outline-accent:hover{box-shadow:none}.sdc-button.variant-outline-alternative{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-alternative);--sdc-button-text-color: var(--color-alternative)}.sdc-button.variant-outline-alternative:hover{box-shadow:none}.sdc-button.variant-outline-white{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: white;--sdc-button-text-color: white}.sdc-button.variant-outline-white:hover{box-shadow:none}.sdc-button.variant-outline-brand{--sdc-button-background: transparent;--sdc-button-border-width: var(--border-default);--sdc-button-border-color: var(--color-brand-foreground);--sdc-button-text-color: var(--color-brand-foreground)}.sdc-button.variant-outline-brand:hover{box-shadow:none}.sdc-button.variant-link{--sdc-button-background: transparent;--sdc-button-border-color: transparent;--sdc-button-text-color: var(--color-neutral-700)}.sdc-button.variant-link:hover{box-shadow:none}.sdc-button.variant-success-light{--sdc-button-background: color-mix(in srgb, var(--color-success) 15%, white);--sdc-button-border-color: var(--color-success);--sdc-button-text-color: var(--color-success)}.sdc-button.variant-warning-light{--sdc-button-background: color-mix(in srgb, var(--color-warning) 15%, white);--sdc-button-border-color: var(--color-warning);--sdc-button-text-color: var(--color-warning)}.sdc-button.variant-destructive-light{--sdc-button-background: color-mix(in srgb, var(--color-danger) 20%, white);--sdc-button-border-color: var(--color-danger);--sdc-button-text-color: var(--color-danger)}.sdc-button.variant-secondary-blue{--sdc-button-background: var(--color-brand-button-background);--sdc-button-border-color: var(--color-brand-button-background);--sdc-button-text-color: var(--color-brand-foreground)}.sdc-button.variant-gray{--sdc-button-background: var(--color-pure-gray);--sdc-button-border-color: var(--color-pure-gray);--sdc-button-text-color: var(--color-pure-white)}.sdc-button.variant-white{--sdc-button-background: var(--color-pure-white);--sdc-button-border-color: var(--color-pure-white);--sdc-button-text-color: var(--color-pure-black)}.sdc-button.size-xxs{--sdc-button-padding: 0;--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-xs{--sdc-button-padding: var(--space-1) var(--space-2_5);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-regular)}.sdc-button.size-sm{--sdc-button-padding: var(--space-1) var(--space-4);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-md{--sdc-button-padding: var(--space-1_5) var(--space-7);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-lg,.sdc-button.size-2xl{--sdc-button-padding: var(--space-2) var(--space-8);--sdc-button-text-size: var(--text-lg);--sdc-button-text-weight: var(--font-semibold)}.sdc-button.size-xl{--sdc-button-padding: var(--space-4) var(--space-8);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-bold)}.sdc-button.size-circle-xs{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-4);--sdc-button-width: var(--space-4);--sdc-button-text-size: var(--text-xs);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-sm{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-6);--sdc-button-width: var(--space-6);--sdc-button-text-size: var(--text-sm);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-md{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-8);--sdc-button-width: var(--space-8);--sdc-button-text-size: var(--text-base);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-lg{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-10);--sdc-button-width: var(--space-10);--sdc-button-text-size: var(--text-xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.size-circle-xl{display:flex;justify-content:center;align-items:center;--sdc-button-padding: 0;--sdc-button-height: var(--space-12);--sdc-button-width: var(--space-12);--sdc-button-text-size: var(--text-2xl);--sdc-button-text-weight: var(--font-medium)}.sdc-button.radius-default{--sdc-button-border-radius: var(--radius-default)}.sdc-button.radius-sm{--sdc-button-border-radius: var(--radius-sm)}.sdc-button.radius-md{--sdc-button-border-radius: var(--radius-md)}.sdc-button.radius-lg{--sdc-button-border-radius: var(--radius-lg)}.sdc-button.radius-xl{--sdc-button-border-radius: var(--radius-xl)}.sdc-button.radius-2xl{--sdc-button-border-radius: var(--radius-2xl)}.sdc-button.radius-full{--sdc-button-border-radius: var(--radius-full)}.sdc-button.variant-glass{--sdc-button-background: rgba(90, 90, 115, .25);--sdc-button-border-width: var(--border-default);--sdc-button-border-color: rgba(255, 255, 255, .12);--sdc-button-text-color: var(--color-pure-white);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:inset 0 1px #ffffff8c,inset 1px 0 #ffffff2e,inset -1px 0 #ffffff0a,inset 0 -1px #ffffff0f}.sdc-button.variant-glass:not([disabled]):hover{--sdc-button-background: rgba(90, 90, 115, .38);box-shadow:inset 0 1px #ffffffb3,inset 1px 0 #ffffff40,inset -1px 0 #ffffff0f,inset 0 -1px #ffffff14;transform:translateY(-1px)}.sdc-button.variant-glass:not([disabled]):active{--sdc-button-background: rgba(90, 90, 115, .15);box-shadow:inset 0 1px #ffffff59,inset 1px 0 #ffffff1a;transform:translateY(0)}.sdc-button.border-0{--sdc-button-border-width: var(--border-0)}.sdc-button.border-default{--sdc-button-border-width: var(--border-default)}.sdc-button.border-2{--sdc-button-border-width: var(--border-2)}.sdc-button.border-4{--sdc-button-border-width: var(--border-4)}.sdc-button.border-8{--sdc-button-border-width: var(--border-8)}\n"] }]
374
375
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ripple: [{ type: i0.Input, args: [{ isSignal: true, alias: "ripple", required: false }] }], onClick: [{ type: i0.Output, args: ["onClick"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], isDebounced: [{ type: i0.Output, args: ["isDebounced"] }], onHostClick: [{
375
376
  type: HostListener,
376
377
  args: ['click', ['$event']]
@@ -1 +1 @@
1
- {"version":3,"file":"3ddv-software-division-components-generic-button.mjs","sources":["../../generic/button/ui/ui-button-helm/src/lib/hlm-button.token.ts","../../generic/button/ui/ui-button-helm/src/lib/hlm-button.ts","../../generic/button/ui/ui-button-helm/src/index.ts","../../generic/button/button.component.ts","../../generic/button/button.component.html","../../generic/button/public-api.ts","../../generic/button/3ddv-software-division-components-generic-button.ts"],"sourcesContent":["import { InjectionToken, ValueProvider, inject } from '@angular/core';\nimport type { ButtonVariants } from './hlm-button';\n\nexport interface BrnButtonConfig {\n\tvariant: ButtonVariants['variant'];\n\tsize: ButtonVariants['size'];\n}\n\nconst defaultConfig: BrnButtonConfig = {\n\tvariant: 'default',\n\tsize: 'default',\n};\n\nconst BrnButtonConfigToken = new InjectionToken<BrnButtonConfig>('BrnButtonConfig');\n\nexport function provideBrnButtonConfig(config: Partial<BrnButtonConfig>): ValueProvider {\n\treturn { provide: BrnButtonConfigToken, useValue: { ...defaultConfig, ...config } };\n}\n\nexport function injectBrnButtonConfig(): BrnButtonConfig {\n\treturn inject(BrnButtonConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { Directive, computed, input, signal } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport { injectBrnButtonConfig } from './hlm-button.token';\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_ng-icon]:pointer-events-none shrink-0 [&_ng-icon]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-default',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline: 'border bg-background shadow-xs dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>ng-icon]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>ng-icon]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>ng-icon]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n\n@Directive({\n selector: '[hlmBtn]',\n standalone: true,\n exportAs: 'hlmBtn',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmButton {\n private readonly _config = injectBrnButtonConfig();\n\n private readonly _additionalClasses = signal<ClassValue>('');\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(buttonVariants({ variant: this.variant(), size: this.size() }), this.userClass(), this._additionalClasses())\n );\n\n public readonly variant = input<ButtonVariants['variant']>(this._config.variant);\n\n public readonly size = input<ButtonVariants['size']>(this._config.size);\n\n setClass(classes: string): void {\n this._additionalClasses.set(classes);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HlmButton } from './lib/hlm-button';\nexport * from './lib/hlm-button';\nexport * from './lib/hlm-button.token';\n\n@NgModule({\n\timports: [HlmButton],\n\texports: [HlmButton],\n})\nexport class HlmButtonModule {}\n","import { Size, SIZES, ThemeClass } from '@3ddv/software-division-components/shared';\nimport { Component, computed, effect, ElementRef, HostListener, input, output, signal } from '@angular/core';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { HlmButtonModule } from './ui/ui-button-helm/src';\n\nconst BUTTON_VARIANTS = {\n primary: 'primary',\n secondary: 'secondary',\n 'secondary-blue': 'secondary-blue',\n accent: 'accent',\n alternative: 'alternative',\n warning: 'warning',\n success: 'success',\n outline: 'outline',\n destructive: 'destructive',\n 'primary-light': 'primary-light',\n 'alternative-light': 'alternative-light',\n 'success-muted': 'success-muted',\n 'accent-light': 'accent-light',\n 'warning-light': 'warning-light',\n 'destructive-light': 'destructive-light',\n 'outline-white': 'outline-white',\n 'outline-alternative': 'outline-alternative',\n 'outline-accent': 'outline-accent',\n link: 'link',\n gray: 'gray',\n white: 'white',\n icon: 'icon',\n glass: 'glass',\n} as const;\n\ntype ButtonVariant = (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS];\n\ntype ButtonType = 'button' | 'submit' | 'reset';\n\nexport type ButtonStyleClasses = ReturnType<(typeof ButtonComponent.prototype)['styleClass']>;\n\n/**\n * A customizable button component built on Spartan UI Button.\n *\n * This component supports various configurations and exposes all Spartan UI button functionality.\n * All HTML button attributes and events are automatically forwarded to the inner button element.\n *\n * @since 1.0.0-alpha.1\n * @updated 1.0.0-alpha.3\n */\n@Component({\n selector: 'sdc-button',\n styleUrls: ['./button.component.css'],\n templateUrl: './button.component.html',\n imports: [HlmButtonModule],\n})\nexport class ButtonComponent {\n private readonly allowedVariants = Object.values(BUTTON_VARIANTS).map(v => `variant-${v}` as const);\n private readonly allowedSizes = Object.values(SIZES).map(v => `size-${v}` as const);\n private readonly allowedCircleSizes = [\n 'size-circle-xs',\n 'size-circle-sm',\n 'size-circle-md',\n 'size-circle-lg',\n 'size-circle-xl',\n ] as const;\n private readonly allowedRadius = [\n 'radius-default',\n 'radius-sm',\n 'radius-md',\n 'radius-lg',\n 'radius-xl',\n 'radius-2xl',\n 'radius-full',\n ] as const;\n private readonly allowedBorder = ['border-0', 'border-default', 'border-2', 'border-4', 'border-8'] as const;\n\n /**\n * The current theme applied to the component.\n */\n public readonly theme = input<ThemeClass>('theme-sdc');\n\n /**\n * Predefined styles to apply to the component.\n * Can be a single class or multiple classes from different categories.\n */\n public readonly styleClass = input<\n (\n | (typeof this.allowedVariants)[number]\n | (typeof this.allowedSizes)[number]\n | (typeof this.allowedCircleSizes)[number]\n | (typeof this.allowedRadius)[number]\n | (typeof this.allowedBorder)[number]\n )[]\n >([]);\n\n // Computed signal that validates and filters the styleClass input\n private readonly _validatedStyleClass = computed(() => {\n const value = this.styleClass();\n\n if (!Array.isArray(value)) {\n console.warn('ButtonComponent: styleClass must be an array, defaulting to empty array');\n return [];\n }\n\n const validValues = value.filter(\n style =>\n this.allowedVariants.includes(style as any) ||\n this.allowedSizes.includes(style as any) ||\n this.allowedCircleSizes.includes(style as any) ||\n this.allowedRadius.includes(style as any) ||\n this.allowedBorder.includes(style as any)\n );\n\n const invalidValues = value.filter(\n style =>\n !this.allowedVariants.includes(style as any) &&\n !this.allowedSizes.includes(style as any) &&\n !this.allowedCircleSizes.includes(style as any) &&\n !this.allowedRadius.includes(style as any) &&\n !this.allowedBorder.includes(style as any)\n );\n\n if (invalidValues.length > 0) {\n throw new Error(\n `ButtonComponent: Invalid styleClass values ignored: ${invalidValues.join(', ')}. Allowed values: ${[\n ...this.allowedVariants,\n ...this.allowedSizes,\n ...this.allowedCircleSizes,\n ...this.allowedRadius,\n ...this.allowedBorder,\n ].join(', ')}`\n );\n }\n\n return validValues;\n });\n\n /**\n * Additional classes\n */\n public readonly className = input<string>('');\n\n /**\n * Button component style variant\n */\n public readonly variant = input<ButtonVariant>('primary');\n\n /**\n * Button component size variant\n */\n public readonly size = input<Size>('md');\n\n /**\n * Native button type attribute\n */\n public readonly type = input<ButtonType>('button');\n\n /**\n * Whether the component is disabled.\n */\n public readonly disabled = input<boolean>(false);\n\n /**\n * Whether to enable the ripple effect on the component.\n * Default value is false.\n */\n public readonly ripple = input<boolean>(false);\n\n /**\n * Event emitted when the component is clicked.\n */\n public readonly onClick = output<MouseEvent>();\n\n /**\n * Event emitted when the component receives focus.\n */\n public readonly onFocus = output<FocusEvent>();\n\n /**\n * Event emitted when the component loses focus.\n */\n public readonly onBlur = output<FocusEvent>();\n\n protected readonly _sizeClass = computed(() => {\n const size = SIZES[this.size()];\n\n if (!size) {\n throw new Error(`size must be one of these: ${Object.values(SIZES).join(', ')}}`);\n }\n\n return `size-${size}`;\n });\n\n protected readonly _variantClass = computed(() => {\n const variant = BUTTON_VARIANTS[this.variant()];\n\n if (!variant) {\n throw new Error(`variant must be one of these: ${Object.values(BUTTON_VARIANTS).join(', ')}}`);\n }\n\n return `variant-${variant}`;\n });\n\n /**\n * Computed class string that combines theme and user classes.\n */\n protected readonly computedClass = computed(() => {\n const themeClass = this.theme();\n const styleClass = this._validatedStyleClass();\n const sizeClass = this._sizeClass();\n const variantClass = this._variantClass();\n const className = this.className();\n return Array.from(new Set(['sdc-button', themeClass, sizeClass, variantClass, ...styleClass, className]))\n .filter(Boolean)\n .join(' ');\n });\n\n /**\n * Debounce time in milliseconds. When null, no debounce is applied.\n * Default value is null (no debounce).\n */\n public readonly debounce = input<number | null>(null);\n\n /**\n * Event emitted to notify the debounce state.\n * Returns true while the component is debounced, false when not.\n */\n public readonly isDebounced = output<boolean>();\n\n /**\n * Signal to track the current debounce state of the component.\n */\n protected readonly debounceState = signal<boolean>(false);\n\n /**\n * Subject for handling click events with debounce.\n */\n private readonly clickSubject = new Subject<MouseEvent>();\n\n /**\n * Subject for cleanup.\n */\n private readonly destroy$ = new Subject<void>();\n\n /**\n * Current subscription for debounce.\n */\n private debounceSubscription: Subscription | null = null;\n\n /**\n * Current debounce timeout.\n */\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private elementRef: ElementRef) {\n // Set up reactive debounce handling within injection context\n effect(() => {\n const debounceTime = this.debounce();\n this.setupDebounce(debounceTime);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.clickSubject.complete();\n if (this.debounceSubscription) {\n this.debounceSubscription.unsubscribe();\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n }\n\n /**\n * Sets up the debounce functionality for click events.\n */\n private setupDebounce(debounceTime: number | null): void {\n // Clear existing subscription\n if (this.debounceSubscription) {\n this.debounceSubscription.unsubscribe();\n }\n\n // Clear existing timeout\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n\n // Set up new subscription\n this.debounceSubscription = this.clickSubject.pipe(takeUntil(this.destroy$)).subscribe((event: MouseEvent) => {\n // Clear existing timeout\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n // Set new timeout\n this.debounceTimeout = setTimeout(() => {\n this.debounceState.set(false);\n this.isDebounced.emit(false);\n this.onClick.emit(event);\n this.debounceTimeout = null;\n }, debounceTime ?? 0);\n });\n }\n\n /**\n * Handles click events with debounce functionality.\n */\n @HostListener('click', ['$event'])\n protected onHostClick(event: MouseEvent): void {\n if (this.disabled() || this.debounceState()) event.stopImmediatePropagation();\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled() || this.debounceState()) return;\n const debounceTime = this.debounce();\n\n if (debounceTime !== null && debounceTime > 0) {\n // Apply debounce\n this.debounceState.set(true);\n this.isDebounced.emit(true);\n this.clickSubject.next(event);\n } else {\n // No debounce, emit immediately\n this.onClick.emit(event);\n }\n }\n\n /**\n * Handles focus events and emits the onFocus output.\n */\n protected handleFocus(event: FocusEvent): void {\n this.onFocus.emit(event);\n }\n\n /**\n * Handles blur events and emits the onBlur output.\n */\n protected handleBlur(event: FocusEvent): void {\n this.onBlur.emit(event);\n }\n\n /**\n * Creates a ripple effect at the specified position.\n */\n protected createRipple(event: MouseEvent): void {\n if (!this.ripple()) return;\n\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n const x = event.clientX - rect.left - size / 2;\n const y = event.clientY - rect.top - size / 2;\n\n const ripple = document.createElement('span');\n ripple.style.width = ripple.style.height = size + 'px';\n ripple.style.left = x + 'px';\n ripple.style.top = y + 'px';\n ripple.classList.add('sdc-ripple');\n\n button.appendChild(ripple);\n\n setTimeout(() => {\n ripple.remove();\n }, 600);\n }\n}\n","<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './button.component';\nexport { HlmButton, HlmButtonModule, buttonVariants, provideBrnButtonConfig } from './ui/ui-button-helm/src';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.HlmButton"],"mappings":"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"}
1
+ {"version":3,"file":"3ddv-software-division-components-generic-button.mjs","sources":["../../generic/button/ui/ui-button-helm/src/lib/hlm-button.token.ts","../../generic/button/ui/ui-button-helm/src/lib/hlm-button.ts","../../generic/button/ui/ui-button-helm/src/index.ts","../../generic/button/button.component.ts","../../generic/button/button.component.html","../../generic/button/public-api.ts","../../generic/button/3ddv-software-division-components-generic-button.ts"],"sourcesContent":["import { InjectionToken, ValueProvider, inject } from '@angular/core';\nimport type { ButtonVariants } from './hlm-button';\n\nexport interface BrnButtonConfig {\n\tvariant: ButtonVariants['variant'];\n\tsize: ButtonVariants['size'];\n}\n\nconst defaultConfig: BrnButtonConfig = {\n\tvariant: 'default',\n\tsize: 'default',\n};\n\nconst BrnButtonConfigToken = new InjectionToken<BrnButtonConfig>('BrnButtonConfig');\n\nexport function provideBrnButtonConfig(config: Partial<BrnButtonConfig>): ValueProvider {\n\treturn { provide: BrnButtonConfigToken, useValue: { ...defaultConfig, ...config } };\n}\n\nexport function injectBrnButtonConfig(): BrnButtonConfig {\n\treturn inject(BrnButtonConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { Directive, computed, input, signal } from '@angular/core';\nimport { hlm } from '@spartan-ng/brain/core';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport type { ClassValue } from 'clsx';\nimport { injectBrnButtonConfig } from './hlm-button.token';\n\nexport const buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_ng-icon]:pointer-events-none shrink-0 [&_ng-icon]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive cursor-default',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive:\n 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',\n outline: 'border bg-background shadow-xs dark:bg-input/30 dark:border-input dark:hover:bg-input/50',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>ng-icon]:px-3',\n sm: 'h-8 rounded-md gap-1.5 px-3 has-[>ng-icon]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>ng-icon]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n\n@Directive({\n selector: '[hlmBtn]',\n standalone: true,\n exportAs: 'hlmBtn',\n host: {\n '[class]': '_computedClass()',\n },\n})\nexport class HlmButton {\n private readonly _config = injectBrnButtonConfig();\n\n private readonly _additionalClasses = signal<ClassValue>('');\n\n public readonly userClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(() =>\n hlm(buttonVariants({ variant: this.variant(), size: this.size() }), this.userClass(), this._additionalClasses())\n );\n\n public readonly variant = input<ButtonVariants['variant']>(this._config.variant);\n\n public readonly size = input<ButtonVariants['size']>(this._config.size);\n\n setClass(classes: string): void {\n this._additionalClasses.set(classes);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { HlmButton } from './lib/hlm-button';\nexport * from './lib/hlm-button';\nexport * from './lib/hlm-button.token';\n\n@NgModule({\n\timports: [HlmButton],\n\texports: [HlmButton],\n})\nexport class HlmButtonModule {}\n","import { Size, SIZES, ThemeClass } from '@3ddv/software-division-components/shared';\nimport { Component, computed, effect, ElementRef, HostListener, input, output, signal } from '@angular/core';\nimport { Subject, Subscription, takeUntil } from 'rxjs';\nimport { HlmButtonModule } from './ui/ui-button-helm/src';\n\nconst BUTTON_VARIANTS = {\n primary: 'primary',\n secondary: 'secondary',\n 'secondary-blue': 'secondary-blue',\n accent: 'accent',\n alternative: 'alternative',\n warning: 'warning',\n success: 'success',\n outline: 'outline',\n destructive: 'destructive',\n 'primary-light': 'primary-light',\n 'alternative-light': 'alternative-light',\n 'success-muted': 'success-muted',\n 'accent-light': 'accent-light',\n 'warning-light': 'warning-light',\n 'destructive-light': 'destructive-light',\n 'outline-white': 'outline-white',\n 'outline-brand': 'outline-brand',\n 'outline-alternative': 'outline-alternative',\n 'outline-accent': 'outline-accent',\n link: 'link',\n gray: 'gray',\n white: 'white',\n icon: 'icon',\n glass: 'glass',\n} as const;\n\ntype ButtonVariant = (typeof BUTTON_VARIANTS)[keyof typeof BUTTON_VARIANTS];\n\ntype ButtonType = 'button' | 'submit' | 'reset';\n\nexport type ButtonStyleClasses = ReturnType<(typeof ButtonComponent.prototype)['styleClass']>;\n\n/**\n * A customizable button component built on Spartan UI Button.\n *\n * This component supports various configurations and exposes all Spartan UI button functionality.\n * All HTML button attributes and events are automatically forwarded to the inner button element.\n *\n * @since 1.0.0-alpha.1\n * @updated 1.0.0-alpha.3\n */\n@Component({\n selector: 'sdc-button',\n styleUrls: ['./button.component.css'],\n templateUrl: './button.component.html',\n imports: [HlmButtonModule],\n})\nexport class ButtonComponent {\n private readonly allowedVariants = Object.values(BUTTON_VARIANTS).map(v => `variant-${v}` as const);\n private readonly allowedSizes = Object.values(SIZES).map(v => `size-${v}` as const);\n private readonly allowedCircleSizes = [\n 'size-circle-xs',\n 'size-circle-sm',\n 'size-circle-md',\n 'size-circle-lg',\n 'size-circle-xl',\n ] as const;\n private readonly allowedRadius = [\n 'radius-default',\n 'radius-sm',\n 'radius-md',\n 'radius-lg',\n 'radius-xl',\n 'radius-2xl',\n 'radius-full',\n ] as const;\n private readonly allowedBorder = ['border-0', 'border-default', 'border-2', 'border-4', 'border-8'] as const;\n\n /**\n * The current theme applied to the component.\n */\n public readonly theme = input<ThemeClass>('theme-sdc');\n\n /**\n * Predefined styles to apply to the component.\n * Can be a single class or multiple classes from different categories.\n */\n public readonly styleClass = input<\n (\n | (typeof this.allowedVariants)[number]\n | (typeof this.allowedSizes)[number]\n | (typeof this.allowedCircleSizes)[number]\n | (typeof this.allowedRadius)[number]\n | (typeof this.allowedBorder)[number]\n )[]\n >([]);\n\n // Computed signal that validates and filters the styleClass input\n private readonly _validatedStyleClass = computed(() => {\n const value = this.styleClass();\n\n if (!Array.isArray(value)) {\n console.warn('ButtonComponent: styleClass must be an array, defaulting to empty array');\n return [];\n }\n\n const validValues = value.filter(\n style =>\n this.allowedVariants.includes(style as any) ||\n this.allowedSizes.includes(style as any) ||\n this.allowedCircleSizes.includes(style as any) ||\n this.allowedRadius.includes(style as any) ||\n this.allowedBorder.includes(style as any)\n );\n\n const invalidValues = value.filter(\n style =>\n !this.allowedVariants.includes(style as any) &&\n !this.allowedSizes.includes(style as any) &&\n !this.allowedCircleSizes.includes(style as any) &&\n !this.allowedRadius.includes(style as any) &&\n !this.allowedBorder.includes(style as any)\n );\n\n if (invalidValues.length > 0) {\n throw new Error(\n `ButtonComponent: Invalid styleClass values ignored: ${invalidValues.join(', ')}. Allowed values: ${[\n ...this.allowedVariants,\n ...this.allowedSizes,\n ...this.allowedCircleSizes,\n ...this.allowedRadius,\n ...this.allowedBorder,\n ].join(', ')}`\n );\n }\n\n return validValues;\n });\n\n /**\n * Additional classes\n */\n public readonly className = input<string>('');\n\n /**\n * Button component style variant\n */\n public readonly variant = input<ButtonVariant>('primary');\n\n /**\n * Button component size variant\n */\n public readonly size = input<Size>('md');\n\n /**\n * Native button type attribute\n */\n public readonly type = input<ButtonType>('button');\n\n /**\n * Whether the component is disabled.\n */\n public readonly disabled = input<boolean>(false);\n\n /**\n * Whether to enable the ripple effect on the component.\n * Default value is false.\n */\n public readonly ripple = input<boolean>(false);\n\n /**\n * Event emitted when the component is clicked.\n */\n public readonly onClick = output<MouseEvent>();\n\n /**\n * Event emitted when the component receives focus.\n */\n public readonly onFocus = output<FocusEvent>();\n\n /**\n * Event emitted when the component loses focus.\n */\n public readonly onBlur = output<FocusEvent>();\n\n protected readonly _sizeClass = computed(() => {\n const size = SIZES[this.size()];\n\n if (!size) {\n throw new Error(`size must be one of these: ${Object.values(SIZES).join(', ')}}`);\n }\n\n return `size-${size}`;\n });\n\n protected readonly _variantClass = computed(() => {\n const variant = BUTTON_VARIANTS[this.variant()];\n\n if (!variant) {\n throw new Error(`variant must be one of these: ${Object.values(BUTTON_VARIANTS).join(', ')}}`);\n }\n\n return `variant-${variant}`;\n });\n\n /**\n * Computed class string that combines theme and user classes.\n */\n protected readonly computedClass = computed(() => {\n const themeClass = this.theme();\n const styleClass = this._validatedStyleClass();\n const sizeClass = this._sizeClass();\n const variantClass = this._variantClass();\n const className = this.className();\n return Array.from(new Set(['sdc-button', themeClass, sizeClass, variantClass, ...styleClass, className]))\n .filter(Boolean)\n .join(' ');\n });\n\n /**\n * Debounce time in milliseconds. When null, no debounce is applied.\n * Default value is null (no debounce).\n */\n public readonly debounce = input<number | null>(null);\n\n /**\n * Event emitted to notify the debounce state.\n * Returns true while the component is debounced, false when not.\n */\n public readonly isDebounced = output<boolean>();\n\n /**\n * Signal to track the current debounce state of the component.\n */\n protected readonly debounceState = signal<boolean>(false);\n\n /**\n * Subject for handling click events with debounce.\n */\n private readonly clickSubject = new Subject<MouseEvent>();\n\n /**\n * Subject for cleanup.\n */\n private readonly destroy$ = new Subject<void>();\n\n /**\n * Current subscription for debounce.\n */\n private debounceSubscription: Subscription | null = null;\n\n /**\n * Current debounce timeout.\n */\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\n constructor(private elementRef: ElementRef) {\n // Set up reactive debounce handling within injection context\n effect(() => {\n const debounceTime = this.debounce();\n this.setupDebounce(debounceTime);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.clickSubject.complete();\n if (this.debounceSubscription) {\n this.debounceSubscription.unsubscribe();\n }\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n }\n\n /**\n * Sets up the debounce functionality for click events.\n */\n private setupDebounce(debounceTime: number | null): void {\n // Clear existing subscription\n if (this.debounceSubscription) {\n this.debounceSubscription.unsubscribe();\n }\n\n // Clear existing timeout\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n this.debounceTimeout = null;\n }\n\n // Set up new subscription\n this.debounceSubscription = this.clickSubject.pipe(takeUntil(this.destroy$)).subscribe((event: MouseEvent) => {\n // Clear existing timeout\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n // Set new timeout\n this.debounceTimeout = setTimeout(() => {\n this.debounceState.set(false);\n this.isDebounced.emit(false);\n this.onClick.emit(event);\n this.debounceTimeout = null;\n }, debounceTime ?? 0);\n });\n }\n\n /**\n * Handles click events with debounce functionality.\n */\n @HostListener('click', ['$event'])\n protected onHostClick(event: MouseEvent): void {\n if (this.disabled() || this.debounceState()) event.stopImmediatePropagation();\n }\n\n protected handleClick(event: MouseEvent): void {\n if (this.disabled() || this.debounceState()) return;\n const debounceTime = this.debounce();\n\n if (debounceTime !== null && debounceTime > 0) {\n // Apply debounce\n this.debounceState.set(true);\n this.isDebounced.emit(true);\n this.clickSubject.next(event);\n } else {\n // No debounce, emit immediately\n this.onClick.emit(event);\n }\n }\n\n /**\n * Handles focus events and emits the onFocus output.\n */\n protected handleFocus(event: FocusEvent): void {\n this.onFocus.emit(event);\n }\n\n /**\n * Handles blur events and emits the onBlur output.\n */\n protected handleBlur(event: FocusEvent): void {\n this.onBlur.emit(event);\n }\n\n /**\n * Creates a ripple effect at the specified position.\n */\n protected createRipple(event: MouseEvent): void {\n if (!this.ripple()) return;\n\n const button = event.currentTarget as HTMLElement;\n const rect = button.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n const x = event.clientX - rect.left - size / 2;\n const y = event.clientY - rect.top - size / 2;\n\n const ripple = document.createElement('span');\n ripple.style.width = ripple.style.height = size + 'px';\n ripple.style.left = x + 'px';\n ripple.style.top = y + 'px';\n ripple.classList.add('sdc-ripple');\n\n button.appendChild(ripple);\n\n setTimeout(() => {\n ripple.remove();\n }, 600);\n }\n}\n","<button\n hlmBtn\n [class]=\"computedClass()\"\n [disabled]=\"disabled() || debounceState()\"\n (click)=\"handleClick($event); createRipple($event)\"\n (focus)=\"handleFocus($event)\"\n (blur)=\"handleBlur($event)\"\n [type]=\"type()\">\n <ng-content></ng-content>\n</button>\n","/*\n * Public API Surface of software-division-components\n */\n\nexport * from './button.component';\nexport { HlmButton, HlmButtonModule, buttonVariants, provideBrnButtonConfig } from './ui/ui-button-helm/src';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.HlmButton"],"mappings":"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"}