@thinkersteps_labs/3d-viewer-angular 1.1.0 → 1.2.0

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.
@@ -3,123 +3,123 @@ import { CommonModule } from '@angular/common';
3
3
  import { CANONICAL_STONE_PRESETS, getStonePreset, } from '@thinkersteps_labs/3d-viewer-core';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
- const SWATCH_STYLES = `
7
- :host {
8
- display: block;
9
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
10
- }
11
- .td-swatch-group {
12
- display: flex;
13
- flex-direction: column;
14
- gap: 8px;
15
- }
16
- .td-swatch-header {
17
- display: flex;
18
- justify-content: space-between;
19
- align-items: baseline;
20
- font-size: 13px;
21
- font-weight: 500;
22
- color: #333333;
23
- }
24
- .td-swatch-title {
25
- text-transform: uppercase;
26
- letter-spacing: 0.05em;
27
- font-size: 11px;
28
- font-weight: 600;
29
- color: #666666;
30
- }
31
- .td-swatch-selected-name {
32
- font-weight: 600;
33
- color: #111111;
34
- }
35
- .td-swatch-row {
36
- display: flex;
37
- flex-wrap: wrap;
38
- gap: 8px;
39
- align-items: center;
40
- }
41
- .td-swatch-pill {
42
- display: inline-flex;
43
- align-items: center;
44
- gap: 8px;
45
- padding: 6px 12px;
46
- border-radius: 9999px;
47
- border: 1px solid #e2e8f0;
48
- background: #ffffff;
49
- color: #1e293b;
50
- font-size: 13px;
51
- font-weight: 500;
52
- cursor: pointer;
53
- transition: all 0.15s ease-in-out;
54
- outline: none;
55
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
56
- }
57
- .td-swatch-pill:hover {
58
- border-color: #cbd5e1;
59
- background: #f8fafc;
60
- transform: translateY(-1px);
61
- }
62
- .td-swatch-pill.active {
63
- border-color: #0f172a;
64
- background: #0f172a;
65
- color: #ffffff;
66
- box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);
67
- }
68
- .td-swatch-dot {
69
- position: relative;
70
- width: 32px;
71
- height: 32px;
72
- border-radius: 50%;
73
- border: 2px solid transparent;
74
- padding: 2px;
75
- background: transparent;
76
- cursor: pointer;
77
- transition: all 0.15s ease-in-out;
78
- outline: none;
79
- display: inline-flex;
80
- align-items: center;
81
- justify-content: center;
82
- }
83
- .td-swatch-dot:hover {
84
- transform: scale(1.1);
85
- }
86
- .td-swatch-dot.active {
87
- border-color: #0f172a;
88
- transform: scale(1.08);
89
- }
90
- .td-swatch-color-circle {
91
- width: 100%;
92
- height: 100%;
93
- border-radius: 50%;
94
- border: 1px solid rgba(0, 0, 0, 0.12);
95
- box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);
96
- display: inline-block;
97
- flex-shrink: 0;
98
- }
99
- .td-swatch-pill .td-swatch-color-circle {
100
- width: 14px;
101
- height: 14px;
102
- }
103
- .td-select-wrapper {
104
- display: flex;
105
- flex-direction: column;
106
- gap: 6px;
107
- }
108
- .td-select {
109
- padding: 8px 12px;
110
- border-radius: 8px;
111
- border: 1px solid #cbd5e1;
112
- background-color: #ffffff;
113
- font-size: 14px;
114
- color: #1e293b;
115
- outline: none;
116
- cursor: pointer;
117
- transition: border-color 0.15s;
118
- }
119
- .td-select:focus {
120
- border-color: #0f172a;
121
- box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);
122
- }
6
+ const SWATCH_STYLES = `
7
+ :host {
8
+ display: block;
9
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
10
+ }
11
+ .td-swatch-group {
12
+ display: flex;
13
+ flex-direction: column;
14
+ gap: 8px;
15
+ }
16
+ .td-swatch-header {
17
+ display: flex;
18
+ justify-content: space-between;
19
+ align-items: baseline;
20
+ font-size: 13px;
21
+ font-weight: 500;
22
+ color: #333333;
23
+ }
24
+ .td-swatch-title {
25
+ text-transform: uppercase;
26
+ letter-spacing: 0.05em;
27
+ font-size: 11px;
28
+ font-weight: 600;
29
+ color: #666666;
30
+ }
31
+ .td-swatch-selected-name {
32
+ font-weight: 600;
33
+ color: #111111;
34
+ }
35
+ .td-swatch-row {
36
+ display: flex;
37
+ flex-wrap: wrap;
38
+ gap: 8px;
39
+ align-items: center;
40
+ }
41
+ .td-swatch-pill {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: 8px;
45
+ padding: 6px 12px;
46
+ border-radius: 9999px;
47
+ border: 1px solid #e2e8f0;
48
+ background: #ffffff;
49
+ color: #1e293b;
50
+ font-size: 13px;
51
+ font-weight: 500;
52
+ cursor: pointer;
53
+ transition: all 0.15s ease-in-out;
54
+ outline: none;
55
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
56
+ }
57
+ .td-swatch-pill:hover {
58
+ border-color: #cbd5e1;
59
+ background: #f8fafc;
60
+ transform: translateY(-1px);
61
+ }
62
+ .td-swatch-pill.active {
63
+ border-color: #0f172a;
64
+ background: #0f172a;
65
+ color: #ffffff;
66
+ box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);
67
+ }
68
+ .td-swatch-dot {
69
+ position: relative;
70
+ width: 32px;
71
+ height: 32px;
72
+ border-radius: 50%;
73
+ border: 2px solid transparent;
74
+ padding: 2px;
75
+ background: transparent;
76
+ cursor: pointer;
77
+ transition: all 0.15s ease-in-out;
78
+ outline: none;
79
+ display: inline-flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ }
83
+ .td-swatch-dot:hover {
84
+ transform: scale(1.1);
85
+ }
86
+ .td-swatch-dot.active {
87
+ border-color: #0f172a;
88
+ transform: scale(1.08);
89
+ }
90
+ .td-swatch-color-circle {
91
+ width: 100%;
92
+ height: 100%;
93
+ border-radius: 50%;
94
+ border: 1px solid rgba(0, 0, 0, 0.12);
95
+ box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);
96
+ display: inline-block;
97
+ flex-shrink: 0;
98
+ }
99
+ .td-swatch-pill .td-swatch-color-circle {
100
+ width: 14px;
101
+ height: 14px;
102
+ }
103
+ .td-select-wrapper {
104
+ display: flex;
105
+ flex-direction: column;
106
+ gap: 6px;
107
+ }
108
+ .td-select {
109
+ padding: 8px 12px;
110
+ border-radius: 8px;
111
+ border: 1px solid #cbd5e1;
112
+ background-color: #ffffff;
113
+ font-size: 14px;
114
+ color: #1e293b;
115
+ outline: none;
116
+ cursor: pointer;
117
+ transition: border-color 0.15s;
118
+ }
119
+ .td-select:focus {
120
+ border-color: #0f172a;
121
+ box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);
122
+ }
123
123
  `;
124
124
  export class StoneSwatchesComponent {
125
125
  constructor() {
@@ -148,58 +148,58 @@ export class StoneSwatchesComponent {
148
148
  this.valueChange.emit(s.id);
149
149
  }
150
150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StoneSwatchesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
151
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StoneSwatchesComponent, isStandalone: true, selector: "td-stone-swatches", inputs: { value: "value", options: "options", category: "category", variant: "variant", showLabel: "showLabel" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
152
- <div class="td-swatch-group">
153
- <div class="td-swatch-header" *ngIf="showLabel">
154
- <span class="td-swatch-title">Gemstone</span>
155
- <span class="td-swatch-selected-name" *ngIf="activePreset">
156
- {{ activePreset.label }}{{ activePreset.grade ? ' (' + activePreset.grade + ')' : '' }}
157
- </span>
158
- </div>
159
- <div class="td-swatch-row" role="radiogroup" aria-label="Gemstone Selection">
160
- <button
161
- *ngFor="let s of visibleOptions"
162
- type="button"
163
- role="radio"
164
- [attr.aria-checked]="isSelected(s)"
165
- [title]="s.label + (s.grade ? ' - ' + s.grade : '')"
166
- class="td-swatch-{{ variant === 'dots' ? 'dot' : 'pill' }}"
167
- [class.active]="isSelected(s)"
168
- (click)="selectStone(s)"
169
- >
170
- <span class="td-swatch-color-circle" [style.backgroundColor]="s.hex"></span>
171
- <span *ngIf="variant === 'pills'">{{ s.label }}</span>
172
- </button>
173
- </div>
174
- </div>
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StoneSwatchesComponent, isStandalone: true, selector: "td-stone-swatches", inputs: { value: "value", options: "options", category: "category", variant: "variant", showLabel: "showLabel" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
152
+ <div class="td-swatch-group">
153
+ <div class="td-swatch-header" *ngIf="showLabel">
154
+ <span class="td-swatch-title">Gemstone</span>
155
+ <span class="td-swatch-selected-name" *ngIf="activePreset">
156
+ {{ activePreset.label }}{{ activePreset.grade ? ' (' + activePreset.grade + ')' : '' }}
157
+ </span>
158
+ </div>
159
+ <div class="td-swatch-row" role="radiogroup" aria-label="Gemstone Selection">
160
+ <button
161
+ *ngFor="let s of visibleOptions"
162
+ type="button"
163
+ role="radio"
164
+ [attr.aria-checked]="isSelected(s)"
165
+ [title]="s.label + (s.grade ? ' - ' + s.grade : '')"
166
+ class="td-swatch-{{ variant === 'dots' ? 'dot' : 'pill' }}"
167
+ [class.active]="isSelected(s)"
168
+ (click)="selectStone(s)"
169
+ >
170
+ <span class="td-swatch-color-circle" [style.backgroundColor]="s.hex"></span>
171
+ <span *ngIf="variant === 'pills'">{{ s.label }}</span>
172
+ </button>
173
+ </div>
174
+ </div>
175
175
  `, isInline: true, styles: ["\n :host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n .td-swatch-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .td-swatch-header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: 13px;\n font-weight: 500;\n color: #333333;\n }\n .td-swatch-title {\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 11px;\n font-weight: 600;\n color: #666666;\n }\n .td-swatch-selected-name {\n font-weight: 600;\n color: #111111;\n }\n .td-swatch-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n }\n .td-swatch-pill {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 9999px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n color: #1e293b;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n }\n .td-swatch-pill:hover {\n border-color: #cbd5e1;\n background: #f8fafc;\n transform: translateY(-1px);\n }\n .td-swatch-pill.active {\n border-color: #0f172a;\n background: #0f172a;\n color: #ffffff;\n box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);\n }\n .td-swatch-dot {\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 2px solid transparent;\n padding: 2px;\n background: transparent;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .td-swatch-dot:hover {\n transform: scale(1.1);\n }\n .td-swatch-dot.active {\n border-color: #0f172a;\n transform: scale(1.08);\n }\n .td-swatch-color-circle {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);\n display: inline-block;\n flex-shrink: 0;\n }\n .td-swatch-pill .td-swatch-color-circle {\n width: 14px;\n height: 14px;\n }\n .td-select-wrapper {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .td-select {\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid #cbd5e1;\n background-color: #ffffff;\n font-size: 14px;\n color: #1e293b;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n }\n .td-select:focus {\n border-color: #0f172a;\n box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);\n }\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
176
176
  }
177
177
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StoneSwatchesComponent, decorators: [{
178
178
  type: Component,
179
- args: [{ selector: 'td-stone-swatches', standalone: true, imports: [CommonModule], template: `
180
- <div class="td-swatch-group">
181
- <div class="td-swatch-header" *ngIf="showLabel">
182
- <span class="td-swatch-title">Gemstone</span>
183
- <span class="td-swatch-selected-name" *ngIf="activePreset">
184
- {{ activePreset.label }}{{ activePreset.grade ? ' (' + activePreset.grade + ')' : '' }}
185
- </span>
186
- </div>
187
- <div class="td-swatch-row" role="radiogroup" aria-label="Gemstone Selection">
188
- <button
189
- *ngFor="let s of visibleOptions"
190
- type="button"
191
- role="radio"
192
- [attr.aria-checked]="isSelected(s)"
193
- [title]="s.label + (s.grade ? ' - ' + s.grade : '')"
194
- class="td-swatch-{{ variant === 'dots' ? 'dot' : 'pill' }}"
195
- [class.active]="isSelected(s)"
196
- (click)="selectStone(s)"
197
- >
198
- <span class="td-swatch-color-circle" [style.backgroundColor]="s.hex"></span>
199
- <span *ngIf="variant === 'pills'">{{ s.label }}</span>
200
- </button>
201
- </div>
202
- </div>
179
+ args: [{ selector: 'td-stone-swatches', standalone: true, imports: [CommonModule], template: `
180
+ <div class="td-swatch-group">
181
+ <div class="td-swatch-header" *ngIf="showLabel">
182
+ <span class="td-swatch-title">Gemstone</span>
183
+ <span class="td-swatch-selected-name" *ngIf="activePreset">
184
+ {{ activePreset.label }}{{ activePreset.grade ? ' (' + activePreset.grade + ')' : '' }}
185
+ </span>
186
+ </div>
187
+ <div class="td-swatch-row" role="radiogroup" aria-label="Gemstone Selection">
188
+ <button
189
+ *ngFor="let s of visibleOptions"
190
+ type="button"
191
+ role="radio"
192
+ [attr.aria-checked]="isSelected(s)"
193
+ [title]="s.label + (s.grade ? ' - ' + s.grade : '')"
194
+ class="td-swatch-{{ variant === 'dots' ? 'dot' : 'pill' }}"
195
+ [class.active]="isSelected(s)"
196
+ (click)="selectStone(s)"
197
+ >
198
+ <span class="td-swatch-color-circle" [style.backgroundColor]="s.hex"></span>
199
+ <span *ngIf="variant === 'pills'">{{ s.label }}</span>
200
+ </button>
201
+ </div>
202
+ </div>
203
203
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n :host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n .td-swatch-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .td-swatch-header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: 13px;\n font-weight: 500;\n color: #333333;\n }\n .td-swatch-title {\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 11px;\n font-weight: 600;\n color: #666666;\n }\n .td-swatch-selected-name {\n font-weight: 600;\n color: #111111;\n }\n .td-swatch-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n }\n .td-swatch-pill {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 9999px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n color: #1e293b;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n }\n .td-swatch-pill:hover {\n border-color: #cbd5e1;\n background: #f8fafc;\n transform: translateY(-1px);\n }\n .td-swatch-pill.active {\n border-color: #0f172a;\n background: #0f172a;\n color: #ffffff;\n box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);\n }\n .td-swatch-dot {\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 2px solid transparent;\n padding: 2px;\n background: transparent;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .td-swatch-dot:hover {\n transform: scale(1.1);\n }\n .td-swatch-dot.active {\n border-color: #0f172a;\n transform: scale(1.08);\n }\n .td-swatch-color-circle {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);\n display: inline-block;\n flex-shrink: 0;\n }\n .td-swatch-pill .td-swatch-color-circle {\n width: 14px;\n height: 14px;\n }\n .td-select-wrapper {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .td-select {\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid #cbd5e1;\n background-color: #ffffff;\n font-size: 14px;\n color: #1e293b;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n }\n .td-select:focus {\n border-color: #0f172a;\n box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);\n }\n"] }]
204
204
  }], propDecorators: { value: [{
205
205
  type: Input
@@ -230,28 +230,28 @@ export class StoneSelectComponent {
230
230
  this.valueChange.emit(target.value);
231
231
  }
232
232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StoneSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
233
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StoneSelectComponent, isStandalone: true, selector: "td-stone-select", inputs: { value: "value", options: "options", label: "label" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
234
- <div class="td-select-wrapper">
235
- <label class="td-swatch-title" *ngIf="label">{{ label }}</label>
236
- <select class="td-select" [value]="activeValue" (change)="onSelectChange($event)">
237
- <option *ngFor="let s of options" [value]="s.id">
238
- {{ s.label }} {{ s.grade ? '(' + s.grade + ')' : '' }}
239
- </option>
240
- </select>
241
- </div>
233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StoneSelectComponent, isStandalone: true, selector: "td-stone-select", inputs: { value: "value", options: "options", label: "label" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
234
+ <div class="td-select-wrapper">
235
+ <label class="td-swatch-title" *ngIf="label">{{ label }}</label>
236
+ <select class="td-select" [value]="activeValue" (change)="onSelectChange($event)">
237
+ <option *ngFor="let s of options" [value]="s.id">
238
+ {{ s.label }} {{ s.grade ? '(' + s.grade + ')' : '' }}
239
+ </option>
240
+ </select>
241
+ </div>
242
242
  `, isInline: true, styles: ["\n :host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n .td-swatch-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .td-swatch-header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: 13px;\n font-weight: 500;\n color: #333333;\n }\n .td-swatch-title {\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 11px;\n font-weight: 600;\n color: #666666;\n }\n .td-swatch-selected-name {\n font-weight: 600;\n color: #111111;\n }\n .td-swatch-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n }\n .td-swatch-pill {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 9999px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n color: #1e293b;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n }\n .td-swatch-pill:hover {\n border-color: #cbd5e1;\n background: #f8fafc;\n transform: translateY(-1px);\n }\n .td-swatch-pill.active {\n border-color: #0f172a;\n background: #0f172a;\n color: #ffffff;\n box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);\n }\n .td-swatch-dot {\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 2px solid transparent;\n padding: 2px;\n background: transparent;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .td-swatch-dot:hover {\n transform: scale(1.1);\n }\n .td-swatch-dot.active {\n border-color: #0f172a;\n transform: scale(1.08);\n }\n .td-swatch-color-circle {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);\n display: inline-block;\n flex-shrink: 0;\n }\n .td-swatch-pill .td-swatch-color-circle {\n width: 14px;\n height: 14px;\n }\n .td-select-wrapper {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .td-select {\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid #cbd5e1;\n background-color: #ffffff;\n font-size: 14px;\n color: #1e293b;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n }\n .td-select:focus {\n border-color: #0f172a;\n box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);\n }\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
243
243
  }
244
244
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StoneSelectComponent, decorators: [{
245
245
  type: Component,
246
- args: [{ selector: 'td-stone-select', standalone: true, imports: [CommonModule], template: `
247
- <div class="td-select-wrapper">
248
- <label class="td-swatch-title" *ngIf="label">{{ label }}</label>
249
- <select class="td-select" [value]="activeValue" (change)="onSelectChange($event)">
250
- <option *ngFor="let s of options" [value]="s.id">
251
- {{ s.label }} {{ s.grade ? '(' + s.grade + ')' : '' }}
252
- </option>
253
- </select>
254
- </div>
246
+ args: [{ selector: 'td-stone-select', standalone: true, imports: [CommonModule], template: `
247
+ <div class="td-select-wrapper">
248
+ <label class="td-swatch-title" *ngIf="label">{{ label }}</label>
249
+ <select class="td-select" [value]="activeValue" (change)="onSelectChange($event)">
250
+ <option *ngFor="let s of options" [value]="s.id">
251
+ {{ s.label }} {{ s.grade ? '(' + s.grade + ')' : '' }}
252
+ </option>
253
+ </select>
254
+ </div>
255
255
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["\n :host {\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;\n }\n .td-swatch-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n .td-swatch-header {\n display: flex;\n justify-content: space-between;\n align-items: baseline;\n font-size: 13px;\n font-weight: 500;\n color: #333333;\n }\n .td-swatch-title {\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 11px;\n font-weight: 600;\n color: #666666;\n }\n .td-swatch-selected-name {\n font-weight: 600;\n color: #111111;\n }\n .td-swatch-row {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n align-items: center;\n }\n .td-swatch-pill {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n border-radius: 9999px;\n border: 1px solid #e2e8f0;\n background: #ffffff;\n color: #1e293b;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n }\n .td-swatch-pill:hover {\n border-color: #cbd5e1;\n background: #f8fafc;\n transform: translateY(-1px);\n }\n .td-swatch-pill.active {\n border-color: #0f172a;\n background: #0f172a;\n color: #ffffff;\n box-shadow: 0 2px 4px rgba(15, 23, 42, 0.2);\n }\n .td-swatch-dot {\n position: relative;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n border: 2px solid transparent;\n padding: 2px;\n background: transparent;\n cursor: pointer;\n transition: all 0.15s ease-in-out;\n outline: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n }\n .td-swatch-dot:hover {\n transform: scale(1.1);\n }\n .td-swatch-dot.active {\n border-color: #0f172a;\n transform: scale(1.08);\n }\n .td-swatch-color-circle {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.4), 0 1px 2px rgba(0, 0, 0, 0.08);\n display: inline-block;\n flex-shrink: 0;\n }\n .td-swatch-pill .td-swatch-color-circle {\n width: 14px;\n height: 14px;\n }\n .td-select-wrapper {\n display: flex;\n flex-direction: column;\n gap: 6px;\n }\n .td-select {\n padding: 8px 12px;\n border-radius: 8px;\n border: 1px solid #cbd5e1;\n background-color: #ffffff;\n font-size: 14px;\n color: #1e293b;\n outline: none;\n cursor: pointer;\n transition: border-color 0.15s;\n }\n .td-select:focus {\n border-color: #0f172a;\n box-shadow: 0 0 0 2px rgba(15, 23, 42, 0.1);\n }\n"] }]
256
256
  }], propDecorators: { value: [{
257
257
  type: Input
package/package.json CHANGED
@@ -1,50 +1,50 @@
1
- {
2
- "name": "@thinkersteps_labs/3d-viewer-angular",
3
- "version": "1.1.0",
4
- "license": "MIT",
5
- "repository": {
6
- "type": "git",
7
- "url": "git+https://github.com/lalitthinker/3d-jewelry-viewer.git",
8
- "directory": "packages/angular"
9
- },
10
- "publishConfig": {
11
- "access": "public"
12
- },
13
- "type": "module",
14
- "main": "./dist/index.js",
15
- "module": "./dist/index.js",
16
- "types": "./dist/index.d.ts",
17
- "exports": {
18
- ".": {
19
- "types": "./dist/index.d.ts",
20
- "import": "./dist/index.js",
21
- "default": "./dist/index.js"
22
- }
23
- },
24
- "files": [
25
- "dist"
26
- ],
27
- "peerDependencies": {
28
- "@angular/common": ">=18.0.0",
29
- "@angular/core": ">=18.0.0",
30
- "three": ">=0.150.0",
31
- "@thinkersteps_labs/3d-viewer-core": "1.1.0"
32
- },
33
- "devDependencies": {
34
- "@angular/common": "^18.2.0",
35
- "@angular/compiler": "^18.2.0",
36
- "@angular/compiler-cli": "^18.2.0",
37
- "@angular/core": "^18.2.0",
38
- "@angular/platform-browser": "^18.2.0",
39
- "@types/node": "^20.11.0",
40
- "rxjs": "^7.8.0",
41
- "three": "^0.160.0",
42
- "typescript": "~5.5.4",
43
- "zone.js": "^0.14.0",
44
- "@thinkersteps_labs/3d-viewer-core": "1.1.0"
45
- },
46
- "scripts": {
47
- "build": "ngc -p tsconfig.json",
48
- "typecheck": "tsc --noEmit"
49
- }
1
+ {
2
+ "name": "@thinkersteps_labs/3d-viewer-angular",
3
+ "version": "1.2.0",
4
+ "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/lalitthinker/3d-jewelry-viewer.git",
8
+ "directory": "packages/angular"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "module": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "import": "./dist/index.js",
21
+ "default": "./dist/index.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "scripts": {
28
+ "build": "ngc -p tsconfig.json",
29
+ "typecheck": "tsc --noEmit"
30
+ },
31
+ "peerDependencies": {
32
+ "@angular/common": ">=18.0.0",
33
+ "@angular/core": ">=18.0.0",
34
+ "@thinkersteps_labs/3d-viewer-core": "workspace:*",
35
+ "three": ">=0.150.0"
36
+ },
37
+ "devDependencies": {
38
+ "@angular/common": "^18.2.0",
39
+ "@angular/compiler": "^18.2.0",
40
+ "@angular/compiler-cli": "^18.2.0",
41
+ "@angular/core": "^18.2.0",
42
+ "@angular/platform-browser": "^18.2.0",
43
+ "@thinkersteps_labs/3d-viewer-core": "workspace:*",
44
+ "@types/node": "^20.11.0",
45
+ "rxjs": "^7.8.0",
46
+ "three": "^0.160.0",
47
+ "typescript": "~5.5.4",
48
+ "zone.js": "^0.14.0"
49
+ }
50
50
  }