@propbinder/mobile-design 0.4.41 → 0.4.44

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 (23) hide show
  1. package/README.md +63 -63
  2. package/assets/fonts/brockmann-medium-webfont.woff2 +0 -0
  3. package/assets/fonts/brockmann-mediumitalic-webfont.woff2 +0 -0
  4. package/assets/fonts/brockmann-regular-webfont.woff2 +0 -0
  5. package/assets/fonts/brockmann-regularitalic-webfont.woff2 +0 -0
  6. package/assets/fonts/brockmann-semibold-webfont.woff2 +0 -0
  7. package/assets/fonts/brockmann-semibolditalic-webfont.woff2 +0 -0
  8. package/fesm2022/{propbinder-mobile-design-ds-mobile-days-sheet-BsahIVaB.mjs → propbinder-mobile-design-ds-mobile-days-sheet-Bf7hxhB6.mjs} +51 -51
  9. package/fesm2022/propbinder-mobile-design-ds-mobile-days-sheet-Bf7hxhB6.mjs.map +1 -0
  10. package/fesm2022/{propbinder-mobile-design-ds-mobile-duration-sheet-Dun-o-dR.mjs → propbinder-mobile-design-ds-mobile-duration-sheet-BHTlCfU7.mjs} +173 -173
  11. package/fesm2022/propbinder-mobile-design-ds-mobile-duration-sheet-BHTlCfU7.mjs.map +1 -0
  12. package/fesm2022/{propbinder-mobile-design-ds-mobile-time-sheet-B9Ny4wM7.mjs → propbinder-mobile-design-ds-mobile-time-sheet-CrUB7zl-.mjs} +69 -69
  13. package/fesm2022/propbinder-mobile-design-ds-mobile-time-sheet-CrUB7zl-.mjs.map +1 -0
  14. package/fesm2022/propbinder-mobile-design.mjs +15058 -15034
  15. package/fesm2022/propbinder-mobile-design.mjs.map +1 -1
  16. package/index.d.ts +19 -7
  17. package/package.json +1 -1
  18. package/styles/ionic.css +989 -989
  19. package/styles/mobile-common.css +155 -155
  20. package/styles/mobile-page-base.css +338 -338
  21. package/fesm2022/propbinder-mobile-design-ds-mobile-days-sheet-BsahIVaB.mjs.map +0 -1
  22. package/fesm2022/propbinder-mobile-design-ds-mobile-duration-sheet-Dun-o-dR.mjs.map +0 -1
  23. package/fesm2022/propbinder-mobile-design-ds-mobile-time-sheet-B9Ny4wM7.mjs.map +0 -1
@@ -94,92 +94,92 @@ class DsMobileDurationSheetComponent {
94
94
  this.customMinutes.set(+mMatch[1]);
95
95
  }
96
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileDurationSheetComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
97
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.23", type: DsMobileDurationSheetComponent, isStandalone: true, selector: "ds-mobile-duration-sheet", inputs: { initialDuration: "initialDuration" }, ngImport: i0, template: `
98
- <ds-mobile-bottom-sheet-wrapper>
99
- <ds-mobile-bottom-sheet-header
100
- title="Varighed"
101
- leftButtonLabel="Annuller"
102
- rightButtonLabel="Gem"
103
- [rightButtonDisabled]="!isValid()"
104
- (leftButtonClick)="dismiss()"
105
- (rightButtonClick)="confirmSelection()">
106
- </ds-mobile-bottom-sheet-header>
107
-
108
- <div class="sheet-content">
109
- <div class="chip-grid">
110
- @for (option of options; track option.value) {
111
- <button
112
- type="button"
113
- class="chip"
114
- [id]="option.value === 'Vælg selv' ? 'vaelg-selv-chip' : null"
115
- [class.active]="selectedDuration() === option.value"
116
- (click)="selectDuration(option.value)">
117
- @if (option.value === 'Vælg selv' && selectedDuration() === 'Vælg selv' && customLabel()) {
118
- {{ customLabel() }}
119
- } @else {
120
- {{ option.label }}
121
- }
122
- </button>
123
- }
124
- </div>
125
-
126
- @if (showInlineInputs()) {
127
- <div class="custom-inputs">
128
- <input
129
- type="number"
130
- class="number-input"
131
- min="0"
132
- [ngModel]="customHours()"
133
- (ngModelChange)="customHours.set(+$event)"
134
- (blur)="normalize()"
135
- />
136
- <span class="unit">timer</span>
137
- <input
138
- type="number"
139
- class="number-input"
140
- min="0"
141
- max="59"
142
- [ngModel]="customMinutes()"
143
- (ngModelChange)="customMinutes.set(+$event)"
144
- (blur)="normalize()"
145
- />
146
- <span class="unit">min</span>
147
- </div>
148
- }
149
-
150
- @if (!isDesktop()) {
151
- <ds-mobile-dropdown
152
- trigger="vaelg-selv-chip"
153
- [isOpen]="pickerOpen()"
154
- maxWidth="240px"
155
- position="above"
156
- (closed)="onPickerDismiss()">
157
- <ng-template #customContent>
158
- <ion-picker style="--background: transparent; --fade-background-rgb: transparent; --highlight-background: rgba(0, 0, 0, 0.05); --highlight-border-radius: 9999px;">
159
- <ion-picker-column
160
- [value]="customHours()"
161
- style="--padding-start: 4px; --padding-end: 4px;"
162
- (ionChange)="customHours.set(+($event.detail.value ?? customHours()))">
163
- <div slot="suffix" class="picker-suffix">t</div>
164
- @for (h of hours; track h) {
165
- <ion-picker-column-option [value]="h">{{ h }}</ion-picker-column-option>
166
- }
167
- </ion-picker-column>
168
- <ion-picker-column
169
- [value]="customMinutes()"
170
- style="--padding-start: 4px; --padding-end: 4px;"
171
- (ionChange)="customMinutes.set(+($event.detail.value ?? customMinutes()))">
172
- <div slot="suffix" class="picker-suffix">min</div>
173
- @for (m of minuteOptions; track m) {
174
- <ion-picker-column-option [value]="m">{{ m }}</ion-picker-column-option>
175
- }
176
- </ion-picker-column>
177
- </ion-picker>
178
- </ng-template>
179
- </ds-mobile-dropdown>
180
- }
181
- </div>
182
- </ds-mobile-bottom-sheet-wrapper>
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.23", type: DsMobileDurationSheetComponent, isStandalone: true, selector: "ds-mobile-duration-sheet", inputs: { initialDuration: "initialDuration" }, ngImport: i0, template: `
98
+ <ds-mobile-bottom-sheet-wrapper>
99
+ <ds-mobile-bottom-sheet-header
100
+ title="Varighed"
101
+ leftButtonLabel="Annuller"
102
+ rightButtonLabel="Gem"
103
+ [rightButtonDisabled]="!isValid()"
104
+ (leftButtonClick)="dismiss()"
105
+ (rightButtonClick)="confirmSelection()">
106
+ </ds-mobile-bottom-sheet-header>
107
+
108
+ <div class="sheet-content">
109
+ <div class="chip-grid">
110
+ @for (option of options; track option.value) {
111
+ <button
112
+ type="button"
113
+ class="chip"
114
+ [id]="option.value === 'Vælg selv' ? 'vaelg-selv-chip' : null"
115
+ [class.active]="selectedDuration() === option.value"
116
+ (click)="selectDuration(option.value)">
117
+ @if (option.value === 'Vælg selv' && selectedDuration() === 'Vælg selv' && customLabel()) {
118
+ {{ customLabel() }}
119
+ } @else {
120
+ {{ option.label }}
121
+ }
122
+ </button>
123
+ }
124
+ </div>
125
+
126
+ @if (showInlineInputs()) {
127
+ <div class="custom-inputs">
128
+ <input
129
+ type="number"
130
+ class="number-input"
131
+ min="0"
132
+ [ngModel]="customHours()"
133
+ (ngModelChange)="customHours.set(+$event)"
134
+ (blur)="normalize()"
135
+ />
136
+ <span class="unit">timer</span>
137
+ <input
138
+ type="number"
139
+ class="number-input"
140
+ min="0"
141
+ max="59"
142
+ [ngModel]="customMinutes()"
143
+ (ngModelChange)="customMinutes.set(+$event)"
144
+ (blur)="normalize()"
145
+ />
146
+ <span class="unit">min</span>
147
+ </div>
148
+ }
149
+
150
+ @if (!isDesktop()) {
151
+ <ds-mobile-dropdown
152
+ trigger="vaelg-selv-chip"
153
+ [isOpen]="pickerOpen()"
154
+ maxWidth="240px"
155
+ position="above"
156
+ (closed)="onPickerDismiss()">
157
+ <ng-template #customContent>
158
+ <ion-picker style="--background: transparent; --fade-background-rgb: transparent; --highlight-background: rgba(0, 0, 0, 0.05); --highlight-border-radius: 9999px;">
159
+ <ion-picker-column
160
+ [value]="customHours()"
161
+ style="--padding-start: 4px; --padding-end: 4px;"
162
+ (ionChange)="customHours.set(+($event.detail.value ?? customHours()))">
163
+ <div slot="suffix" class="picker-suffix">t</div>
164
+ @for (h of hours; track h) {
165
+ <ion-picker-column-option [value]="h">{{ h }}</ion-picker-column-option>
166
+ }
167
+ </ion-picker-column>
168
+ <ion-picker-column
169
+ [value]="customMinutes()"
170
+ style="--padding-start: 4px; --padding-end: 4px;"
171
+ (ionChange)="customMinutes.set(+($event.detail.value ?? customMinutes()))">
172
+ <div slot="suffix" class="picker-suffix">min</div>
173
+ @for (m of minuteOptions; track m) {
174
+ <ion-picker-column-option [value]="m">{{ m }}</ion-picker-column-option>
175
+ }
176
+ </ion-picker-column>
177
+ </ion-picker>
178
+ </ng-template>
179
+ </ds-mobile-dropdown>
180
+ }
181
+ </div>
182
+ </ds-mobile-bottom-sheet-wrapper>
183
183
  `, isInline: true, styles: [".sheet-content{padding:16px}.chip-grid{display:flex;flex-wrap:wrap;gap:8px}.chip{display:flex;align-items:center;justify-content:center;height:40px;padding:0 16px;border-radius:99px;border:none;background:var(--color-background-neutral-secondary, #f6f7f8);font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-primary, #202227);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}.chip:hover:not(.active){background:var(--color-background-neutral-secondary-hover, #ebebeb)}.chip:active{opacity:.7}.chip:focus-visible{outline:2px solid var(--color-brand-primary, #5d5fef);outline-offset:2px}.chip.active{background:var(--color-accent, #6b5ff5);color:#fff}.custom-inputs{display:flex;align-items:center;gap:8px;margin-top:12px;animation:fadeSlideIn .15s ease}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.number-input{width:64px;height:40px;padding:0 10px;border:1px solid var(--border-color-default, #e3e6eb);border-radius:99px;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;color:var(--text-color-default-primary, #202227);text-align:center;outline:none;transition:border-color .2s ease}.number-input:focus{border-color:var(--color-accent, #6b5ff5)}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield}.unit{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;color:var(--text-color-default-secondary, #626b78)}.picker-suffix{margin-left:-24px;font-size:13px;color:var(--text-color-default-secondary, #626b78)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper", inputs: ["showDragHandle"] }, { kind: "component", type: DsMobileBottomSheetHeaderComponent, selector: "ds-mobile-bottom-sheet-header", inputs: ["title", "leftButtonLabel", "rightButtonLabel", "rightButtonDisabled", "rightButtonLoading", "showLeftButton", "showRightButton"], outputs: ["leftButtonClick", "rightButtonClick"] }, { kind: "component", type: DsMobileDropdownComponent, selector: "ds-mobile-dropdown", inputs: ["trigger", "keepFocusOn", "items", "isOpen", "position", "align", "maxHeight", "emptyMessage", "ariaLabel", "maxWidth"], outputs: ["itemSelected", "closed"] }, { kind: "component", type: IonPicker, selector: "ion-picker", inputs: ["mode"] }, { kind: "component", type: IonPickerColumn, selector: "ion-picker-column", inputs: ["color", "disabled", "mode", "value"] }, { kind: "component", type: IonPickerColumnOption, selector: "ion-picker-column-option", inputs: ["color", "disabled", "value"] }] });
184
184
  }
185
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileDurationSheetComponent, decorators: [{
@@ -193,96 +193,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
193
193
  IonPicker,
194
194
  IonPickerColumn,
195
195
  IonPickerColumnOption,
196
- ], template: `
197
- <ds-mobile-bottom-sheet-wrapper>
198
- <ds-mobile-bottom-sheet-header
199
- title="Varighed"
200
- leftButtonLabel="Annuller"
201
- rightButtonLabel="Gem"
202
- [rightButtonDisabled]="!isValid()"
203
- (leftButtonClick)="dismiss()"
204
- (rightButtonClick)="confirmSelection()">
205
- </ds-mobile-bottom-sheet-header>
206
-
207
- <div class="sheet-content">
208
- <div class="chip-grid">
209
- @for (option of options; track option.value) {
210
- <button
211
- type="button"
212
- class="chip"
213
- [id]="option.value === 'Vælg selv' ? 'vaelg-selv-chip' : null"
214
- [class.active]="selectedDuration() === option.value"
215
- (click)="selectDuration(option.value)">
216
- @if (option.value === 'Vælg selv' && selectedDuration() === 'Vælg selv' && customLabel()) {
217
- {{ customLabel() }}
218
- } @else {
219
- {{ option.label }}
220
- }
221
- </button>
222
- }
223
- </div>
224
-
225
- @if (showInlineInputs()) {
226
- <div class="custom-inputs">
227
- <input
228
- type="number"
229
- class="number-input"
230
- min="0"
231
- [ngModel]="customHours()"
232
- (ngModelChange)="customHours.set(+$event)"
233
- (blur)="normalize()"
234
- />
235
- <span class="unit">timer</span>
236
- <input
237
- type="number"
238
- class="number-input"
239
- min="0"
240
- max="59"
241
- [ngModel]="customMinutes()"
242
- (ngModelChange)="customMinutes.set(+$event)"
243
- (blur)="normalize()"
244
- />
245
- <span class="unit">min</span>
246
- </div>
247
- }
248
-
249
- @if (!isDesktop()) {
250
- <ds-mobile-dropdown
251
- trigger="vaelg-selv-chip"
252
- [isOpen]="pickerOpen()"
253
- maxWidth="240px"
254
- position="above"
255
- (closed)="onPickerDismiss()">
256
- <ng-template #customContent>
257
- <ion-picker style="--background: transparent; --fade-background-rgb: transparent; --highlight-background: rgba(0, 0, 0, 0.05); --highlight-border-radius: 9999px;">
258
- <ion-picker-column
259
- [value]="customHours()"
260
- style="--padding-start: 4px; --padding-end: 4px;"
261
- (ionChange)="customHours.set(+($event.detail.value ?? customHours()))">
262
- <div slot="suffix" class="picker-suffix">t</div>
263
- @for (h of hours; track h) {
264
- <ion-picker-column-option [value]="h">{{ h }}</ion-picker-column-option>
265
- }
266
- </ion-picker-column>
267
- <ion-picker-column
268
- [value]="customMinutes()"
269
- style="--padding-start: 4px; --padding-end: 4px;"
270
- (ionChange)="customMinutes.set(+($event.detail.value ?? customMinutes()))">
271
- <div slot="suffix" class="picker-suffix">min</div>
272
- @for (m of minuteOptions; track m) {
273
- <ion-picker-column-option [value]="m">{{ m }}</ion-picker-column-option>
274
- }
275
- </ion-picker-column>
276
- </ion-picker>
277
- </ng-template>
278
- </ds-mobile-dropdown>
279
- }
280
- </div>
281
- </ds-mobile-bottom-sheet-wrapper>
196
+ ], template: `
197
+ <ds-mobile-bottom-sheet-wrapper>
198
+ <ds-mobile-bottom-sheet-header
199
+ title="Varighed"
200
+ leftButtonLabel="Annuller"
201
+ rightButtonLabel="Gem"
202
+ [rightButtonDisabled]="!isValid()"
203
+ (leftButtonClick)="dismiss()"
204
+ (rightButtonClick)="confirmSelection()">
205
+ </ds-mobile-bottom-sheet-header>
206
+
207
+ <div class="sheet-content">
208
+ <div class="chip-grid">
209
+ @for (option of options; track option.value) {
210
+ <button
211
+ type="button"
212
+ class="chip"
213
+ [id]="option.value === 'Vælg selv' ? 'vaelg-selv-chip' : null"
214
+ [class.active]="selectedDuration() === option.value"
215
+ (click)="selectDuration(option.value)">
216
+ @if (option.value === 'Vælg selv' && selectedDuration() === 'Vælg selv' && customLabel()) {
217
+ {{ customLabel() }}
218
+ } @else {
219
+ {{ option.label }}
220
+ }
221
+ </button>
222
+ }
223
+ </div>
224
+
225
+ @if (showInlineInputs()) {
226
+ <div class="custom-inputs">
227
+ <input
228
+ type="number"
229
+ class="number-input"
230
+ min="0"
231
+ [ngModel]="customHours()"
232
+ (ngModelChange)="customHours.set(+$event)"
233
+ (blur)="normalize()"
234
+ />
235
+ <span class="unit">timer</span>
236
+ <input
237
+ type="number"
238
+ class="number-input"
239
+ min="0"
240
+ max="59"
241
+ [ngModel]="customMinutes()"
242
+ (ngModelChange)="customMinutes.set(+$event)"
243
+ (blur)="normalize()"
244
+ />
245
+ <span class="unit">min</span>
246
+ </div>
247
+ }
248
+
249
+ @if (!isDesktop()) {
250
+ <ds-mobile-dropdown
251
+ trigger="vaelg-selv-chip"
252
+ [isOpen]="pickerOpen()"
253
+ maxWidth="240px"
254
+ position="above"
255
+ (closed)="onPickerDismiss()">
256
+ <ng-template #customContent>
257
+ <ion-picker style="--background: transparent; --fade-background-rgb: transparent; --highlight-background: rgba(0, 0, 0, 0.05); --highlight-border-radius: 9999px;">
258
+ <ion-picker-column
259
+ [value]="customHours()"
260
+ style="--padding-start: 4px; --padding-end: 4px;"
261
+ (ionChange)="customHours.set(+($event.detail.value ?? customHours()))">
262
+ <div slot="suffix" class="picker-suffix">t</div>
263
+ @for (h of hours; track h) {
264
+ <ion-picker-column-option [value]="h">{{ h }}</ion-picker-column-option>
265
+ }
266
+ </ion-picker-column>
267
+ <ion-picker-column
268
+ [value]="customMinutes()"
269
+ style="--padding-start: 4px; --padding-end: 4px;"
270
+ (ionChange)="customMinutes.set(+($event.detail.value ?? customMinutes()))">
271
+ <div slot="suffix" class="picker-suffix">min</div>
272
+ @for (m of minuteOptions; track m) {
273
+ <ion-picker-column-option [value]="m">{{ m }}</ion-picker-column-option>
274
+ }
275
+ </ion-picker-column>
276
+ </ion-picker>
277
+ </ng-template>
278
+ </ds-mobile-dropdown>
279
+ }
280
+ </div>
281
+ </ds-mobile-bottom-sheet-wrapper>
282
282
  `, styles: [".sheet-content{padding:16px}.chip-grid{display:flex;flex-wrap:wrap;gap:8px}.chip{display:flex;align-items:center;justify-content:center;height:40px;padding:0 16px;border-radius:99px;border:none;background:var(--color-background-neutral-secondary, #f6f7f8);font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-primary, #202227);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background .15s ease,color .15s ease}.chip:hover:not(.active){background:var(--color-background-neutral-secondary-hover, #ebebeb)}.chip:active{opacity:.7}.chip:focus-visible{outline:2px solid var(--color-brand-primary, #5d5fef);outline-offset:2px}.chip.active{background:var(--color-accent, #6b5ff5);color:#fff}.custom-inputs{display:flex;align-items:center;gap:8px;margin-top:12px;animation:fadeSlideIn .15s ease}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.number-input{width:64px;height:40px;padding:0 10px;border:1px solid var(--border-color-default, #e3e6eb);border-radius:99px;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;color:var(--text-color-default-primary, #202227);text-align:center;outline:none;transition:border-color .2s ease}.number-input:focus{border-color:var(--color-accent, #6b5ff5)}.number-input::-webkit-inner-spin-button,.number-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.number-input[type=number]{-moz-appearance:textfield}.unit{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;color:var(--text-color-default-secondary, #626b78)}.picker-suffix{margin-left:-24px;font-size:13px;color:var(--text-color-default-secondary, #626b78)}\n"] }]
283
283
  }], ctorParameters: () => [{ type: i1.ModalController }], propDecorators: { initialDuration: [{
284
284
  type: Input
285
285
  }] } });
286
286
 
287
287
  export { DsMobileDurationSheetComponent };
288
- //# sourceMappingURL=propbinder-mobile-design-ds-mobile-duration-sheet-Dun-o-dR.mjs.map
288
+ //# sourceMappingURL=propbinder-mobile-design-ds-mobile-duration-sheet-BHTlCfU7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propbinder-mobile-design-ds-mobile-duration-sheet-BHTlCfU7.mjs","sources":["../../../projects/mobile-design-lib/src/components/facility-creation-modal/sheets/ds-mobile-duration-sheet.ts"],"sourcesContent":["import { Component, signal, computed, Input, CUSTOM_ELEMENTS_SCHEMA, OnInit, PLATFORM_ID, inject } from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ModalController, IonPicker, IonPickerColumn, IonPickerColumnOption } from '@ionic/angular/standalone';\nimport { DsMobileDropdownComponent } from '../../dropdown';\nimport { DsMobileBottomSheetWrapperComponent } from '../../bottom-sheet/ds-mobile-bottom-sheet-wrapper';\nimport { DsMobileBottomSheetHeaderComponent } from '../../bottom-sheet/ds-mobile-bottom-sheet-header';\n\n@Component({\n selector: 'ds-mobile-duration-sheet',\n standalone: true,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n CommonModule,\n FormsModule,\n DsMobileBottomSheetWrapperComponent,\n DsMobileBottomSheetHeaderComponent,\n DsMobileDropdownComponent,\n IonPicker,\n IonPickerColumn,\n IonPickerColumnOption,\n ],\n template: `\n <ds-mobile-bottom-sheet-wrapper>\n <ds-mobile-bottom-sheet-header\n title=\"Varighed\"\n leftButtonLabel=\"Annuller\"\n rightButtonLabel=\"Gem\"\n [rightButtonDisabled]=\"!isValid()\"\n (leftButtonClick)=\"dismiss()\"\n (rightButtonClick)=\"confirmSelection()\">\n </ds-mobile-bottom-sheet-header>\n\n <div class=\"sheet-content\">\n <div class=\"chip-grid\">\n @for (option of options; track option.value) {\n <button\n type=\"button\"\n class=\"chip\"\n [id]=\"option.value === 'Vælg selv' ? 'vaelg-selv-chip' : null\"\n [class.active]=\"selectedDuration() === option.value\"\n (click)=\"selectDuration(option.value)\">\n @if (option.value === 'Vælg selv' && selectedDuration() === 'Vælg selv' && customLabel()) {\n {{ customLabel() }}\n } @else {\n {{ option.label }}\n }\n </button>\n }\n </div>\n\n @if (showInlineInputs()) {\n <div class=\"custom-inputs\">\n <input\n type=\"number\"\n class=\"number-input\"\n min=\"0\"\n [ngModel]=\"customHours()\"\n (ngModelChange)=\"customHours.set(+$event)\"\n (blur)=\"normalize()\"\n />\n <span class=\"unit\">timer</span>\n <input\n type=\"number\"\n class=\"number-input\"\n min=\"0\"\n max=\"59\"\n [ngModel]=\"customMinutes()\"\n (ngModelChange)=\"customMinutes.set(+$event)\"\n (blur)=\"normalize()\"\n />\n <span class=\"unit\">min</span>\n </div>\n }\n\n @if (!isDesktop()) {\n <ds-mobile-dropdown\n trigger=\"vaelg-selv-chip\"\n [isOpen]=\"pickerOpen()\"\n maxWidth=\"240px\"\n position=\"above\"\n (closed)=\"onPickerDismiss()\">\n <ng-template #customContent>\n <ion-picker style=\"--background: transparent; --fade-background-rgb: transparent; --highlight-background: rgba(0, 0, 0, 0.05); --highlight-border-radius: 9999px;\">\n <ion-picker-column\n [value]=\"customHours()\"\n style=\"--padding-start: 4px; --padding-end: 4px;\"\n (ionChange)=\"customHours.set(+($event.detail.value ?? customHours()))\">\n <div slot=\"suffix\" class=\"picker-suffix\">t</div>\n @for (h of hours; track h) {\n <ion-picker-column-option [value]=\"h\">{{ h }}</ion-picker-column-option>\n }\n </ion-picker-column>\n <ion-picker-column\n [value]=\"customMinutes()\"\n style=\"--padding-start: 4px; --padding-end: 4px;\"\n (ionChange)=\"customMinutes.set(+($event.detail.value ?? customMinutes()))\">\n <div slot=\"suffix\" class=\"picker-suffix\">min</div>\n @for (m of minuteOptions; track m) {\n <ion-picker-column-option [value]=\"m\">{{ m }}</ion-picker-column-option>\n }\n </ion-picker-column>\n </ion-picker>\n </ng-template>\n </ds-mobile-dropdown>\n }\n </div>\n </ds-mobile-bottom-sheet-wrapper>\n `,\n styles: [`\n .sheet-content {\n padding: 16px;\n }\n\n .chip-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n }\n\n .chip {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 40px;\n padding: 0 16px;\n border-radius: 99px;\n border: none;\n background: var(--color-background-neutral-secondary, #f6f7f8);\n font-family: 'Brockmann', sans-serif;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.56px;\n color: var(--text-color-default-primary, #202227);\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition: background 0.15s ease, color 0.15s ease;\n }\n\n .chip:hover:not(.active) {\n background: var(--color-background-neutral-secondary-hover, #ebebeb);\n }\n\n .chip:active {\n opacity: 0.7;\n }\n\n .chip:focus-visible {\n outline: 2px solid var(--color-brand-primary, #5d5fef);\n outline-offset: 2px;\n }\n\n .chip.active {\n background: var(--color-accent, #6b5ff5);\n color: white;\n }\n\n .custom-inputs {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 12px;\n animation: fadeSlideIn 0.15s ease;\n }\n\n @keyframes fadeSlideIn {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n .number-input {\n width: 64px;\n height: 40px;\n padding: 0 10px;\n border: 1px solid var(--border-color-default, #e3e6eb);\n border-radius: 99px;\n background: transparent;\n font-family: 'Brockmann', sans-serif;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n color: var(--text-color-default-primary, #202227);\n text-align: center;\n outline: none;\n transition: border-color 0.2s ease;\n }\n\n .number-input:focus {\n border-color: var(--color-accent, #6b5ff5);\n }\n\n .number-input::-webkit-inner-spin-button,\n .number-input::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n .number-input[type=number] {\n -moz-appearance: textfield;\n }\n\n .unit {\n font-family: 'Brockmann', sans-serif;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n color: var(--text-color-default-secondary, #626b78);\n }\n\n .picker-suffix {\n margin-left: -24px;\n font-size: 13px;\n color: var(--text-color-default-secondary, #626b78);\n }\n `],\n})\nexport class DsMobileDurationSheetComponent implements OnInit {\n private platformId = inject(PLATFORM_ID);\n\n @Input() initialDuration?: string;\n\n isDesktop = signal(false);\n selectedDuration = signal('1 time');\n pickerOpen = signal(false);\n customHours = signal(1);\n customMinutes = signal(0);\n\n options = [\n { value: '30 min', label: '30 min' },\n { value: '1 time', label: '1 time' },\n { value: '2 timer', label: '2 timer' },\n { value: 'Hele dagen', label: 'Hele dagen' },\n { value: 'Vælg selv', label: 'Vælg selv' },\n ];\n\n hours = Array.from({ length: 24 }, (_, i) => i);\n minuteOptions = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];\n\n customLabel = computed(() => {\n const h = this.customHours();\n const m = this.customMinutes();\n const parts: string[] = [];\n if (h > 0) parts.push(`${h}t`);\n if (m > 0) parts.push(`${m}min`);\n return parts.join(' ');\n });\n\n showInlineInputs = computed(() =>\n this.selectedDuration() === 'Vælg selv' && this.isDesktop()\n );\n\n isValid = computed(() => {\n if (this.selectedDuration() === 'Vælg selv') {\n return this.customHours() > 0 || this.customMinutes() > 0;\n }\n return true;\n });\n\n constructor(private modalController: ModalController) {}\n\n ngOnInit(): void {\n if (isPlatformBrowser(this.platformId)) {\n this.isDesktop.set(window.innerWidth >= 768);\n }\n\n if (this.initialDuration) {\n const preset = this.options.find((o) => o.value === this.initialDuration);\n if (preset) {\n this.selectedDuration.set(preset.value);\n } else {\n this.selectedDuration.set('Vælg selv');\n this.parseCustomDuration(this.initialDuration);\n }\n }\n }\n\n selectDuration(value: string): void {\n this.selectedDuration.set(value);\n if (value === 'Vælg selv' && !this.isDesktop()) {\n this.pickerOpen.set(true);\n }\n }\n\n normalize(): void {\n const totalMinutes = this.customHours() * 60 + this.customMinutes();\n const clamped = Math.max(0, Math.min(totalMinutes, 23 * 60 + 55));\n this.customHours.set(Math.floor(clamped / 60));\n this.customMinutes.set(clamped % 60);\n }\n\n onPickerDismiss(): void {\n this.normalize();\n this.pickerOpen.set(false);\n }\n\n confirmSelection(): void {\n const value = this.selectedDuration() === 'Vælg selv'\n ? this.customLabel()\n : this.selectedDuration();\n this.modalController.dismiss({ value }, 'select');\n }\n\n dismiss(): void {\n this.modalController.dismiss(null, 'cancel');\n }\n\n private parseCustomDuration(str: string): void {\n const hMatch = str.match(/(\\d+)\\s*t/);\n const mMatch = str.match(/(\\d+)\\s*min/);\n if (hMatch) this.customHours.set(+hMatch[1]);\n if (mMatch) this.customMinutes.set(+mMatch[1]);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -28,40 +28,40 @@ class DsMobileTimeSheetComponent {
28
28
  this.modalController.dismiss(null, 'cancel');
29
29
  }
30
30
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileTimeSheetComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
31
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.23", type: DsMobileTimeSheetComponent, isStandalone: true, selector: "ds-mobile-time-sheet", inputs: { initialStart: "initialStart", initialEnd: "initialEnd" }, ngImport: i0, template: `
32
- <ds-mobile-bottom-sheet-wrapper>
33
- <ds-mobile-bottom-sheet-header
34
- title="I tidsrummet"
35
- leftButtonLabel="Annuller"
36
- rightButtonLabel="Gem"
37
- (leftButtonClick)="dismiss()"
38
- (rightButtonClick)="confirmSelection()">
39
- </ds-mobile-bottom-sheet-header>
40
-
41
- <div class="sheet-content">
42
- <div class="time-row">
43
- <label class="time-pill">
44
- <input
45
- type="time"
46
- class="time-input"
47
- [ngModel]="startTime()"
48
- (ngModelChange)="startTime.set($event)"
49
- />
50
- </label>
51
-
52
- <span class="separator">til</span>
53
-
54
- <label class="time-pill">
55
- <input
56
- type="time"
57
- class="time-input"
58
- [ngModel]="endTime()"
59
- (ngModelChange)="endTime.set($event)"
60
- />
61
- </label>
62
- </div>
63
- </div>
64
- </ds-mobile-bottom-sheet-wrapper>
31
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.23", type: DsMobileTimeSheetComponent, isStandalone: true, selector: "ds-mobile-time-sheet", inputs: { initialStart: "initialStart", initialEnd: "initialEnd" }, ngImport: i0, template: `
32
+ <ds-mobile-bottom-sheet-wrapper>
33
+ <ds-mobile-bottom-sheet-header
34
+ title="I tidsrummet"
35
+ leftButtonLabel="Annuller"
36
+ rightButtonLabel="Gem"
37
+ (leftButtonClick)="dismiss()"
38
+ (rightButtonClick)="confirmSelection()">
39
+ </ds-mobile-bottom-sheet-header>
40
+
41
+ <div class="sheet-content">
42
+ <div class="time-row">
43
+ <label class="time-pill">
44
+ <input
45
+ type="time"
46
+ class="time-input"
47
+ [ngModel]="startTime()"
48
+ (ngModelChange)="startTime.set($event)"
49
+ />
50
+ </label>
51
+
52
+ <span class="separator">til</span>
53
+
54
+ <label class="time-pill">
55
+ <input
56
+ type="time"
57
+ class="time-input"
58
+ [ngModel]="endTime()"
59
+ (ngModelChange)="endTime.set($event)"
60
+ />
61
+ </label>
62
+ </div>
63
+ </div>
64
+ </ds-mobile-bottom-sheet-wrapper>
65
65
  `, isInline: true, styles: [".sheet-content{padding:16px}.time-row{display:flex;align-items:center;gap:8px}.time-pill{display:flex;align-items:center;justify-content:center;flex:1;height:40px;padding:0 16px;border:1px solid var(--border-color-default, #e3e6eb);border-radius:99px;background:transparent;cursor:pointer}.time-input{border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-primary, #202227);outline:none;padding:0;width:100%;text-align:center;-webkit-appearance:none;appearance:none}.time-input::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.separator{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-secondary, #626b78);flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DsMobileBottomSheetWrapperComponent, selector: "ds-mobile-bottom-sheet-wrapper", inputs: ["showDragHandle"] }, { kind: "component", type: DsMobileBottomSheetHeaderComponent, selector: "ds-mobile-bottom-sheet-header", inputs: ["title", "leftButtonLabel", "rightButtonLabel", "rightButtonDisabled", "rightButtonLoading", "showLeftButton", "showRightButton"], outputs: ["leftButtonClick", "rightButtonClick"] }] });
66
66
  }
67
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImport: i0, type: DsMobileTimeSheetComponent, decorators: [{
@@ -70,40 +70,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
70
70
  FormsModule,
71
71
  DsMobileBottomSheetWrapperComponent,
72
72
  DsMobileBottomSheetHeaderComponent,
73
- ], template: `
74
- <ds-mobile-bottom-sheet-wrapper>
75
- <ds-mobile-bottom-sheet-header
76
- title="I tidsrummet"
77
- leftButtonLabel="Annuller"
78
- rightButtonLabel="Gem"
79
- (leftButtonClick)="dismiss()"
80
- (rightButtonClick)="confirmSelection()">
81
- </ds-mobile-bottom-sheet-header>
82
-
83
- <div class="sheet-content">
84
- <div class="time-row">
85
- <label class="time-pill">
86
- <input
87
- type="time"
88
- class="time-input"
89
- [ngModel]="startTime()"
90
- (ngModelChange)="startTime.set($event)"
91
- />
92
- </label>
93
-
94
- <span class="separator">til</span>
95
-
96
- <label class="time-pill">
97
- <input
98
- type="time"
99
- class="time-input"
100
- [ngModel]="endTime()"
101
- (ngModelChange)="endTime.set($event)"
102
- />
103
- </label>
104
- </div>
105
- </div>
106
- </ds-mobile-bottom-sheet-wrapper>
73
+ ], template: `
74
+ <ds-mobile-bottom-sheet-wrapper>
75
+ <ds-mobile-bottom-sheet-header
76
+ title="I tidsrummet"
77
+ leftButtonLabel="Annuller"
78
+ rightButtonLabel="Gem"
79
+ (leftButtonClick)="dismiss()"
80
+ (rightButtonClick)="confirmSelection()">
81
+ </ds-mobile-bottom-sheet-header>
82
+
83
+ <div class="sheet-content">
84
+ <div class="time-row">
85
+ <label class="time-pill">
86
+ <input
87
+ type="time"
88
+ class="time-input"
89
+ [ngModel]="startTime()"
90
+ (ngModelChange)="startTime.set($event)"
91
+ />
92
+ </label>
93
+
94
+ <span class="separator">til</span>
95
+
96
+ <label class="time-pill">
97
+ <input
98
+ type="time"
99
+ class="time-input"
100
+ [ngModel]="endTime()"
101
+ (ngModelChange)="endTime.set($event)"
102
+ />
103
+ </label>
104
+ </div>
105
+ </div>
106
+ </ds-mobile-bottom-sheet-wrapper>
107
107
  `, styles: [".sheet-content{padding:16px}.time-row{display:flex;align-items:center;gap:8px}.time-pill{display:flex;align-items:center;justify-content:center;flex:1;height:40px;padding:0 16px;border:1px solid var(--border-color-default, #e3e6eb);border-radius:99px;background:transparent;cursor:pointer}.time-input{border:none;background:transparent;font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-primary, #202227);outline:none;padding:0;width:100%;text-align:center;-webkit-appearance:none;appearance:none}.time-input::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none}.separator{font-family:Brockmann,sans-serif;font-size:var(--font-size-sm, 14px);font-weight:500;line-height:18px;letter-spacing:-.56px;color:var(--text-color-default-secondary, #626b78);flex-shrink:0}\n"] }]
108
108
  }], ctorParameters: () => [{ type: i1.ModalController }], propDecorators: { initialStart: [{
109
109
  type: Input
@@ -112,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.23", ngImpo
112
112
  }] } });
113
113
 
114
114
  export { DsMobileTimeSheetComponent };
115
- //# sourceMappingURL=propbinder-mobile-design-ds-mobile-time-sheet-B9Ny4wM7.mjs.map
115
+ //# sourceMappingURL=propbinder-mobile-design-ds-mobile-time-sheet-CrUB7zl-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propbinder-mobile-design-ds-mobile-time-sheet-CrUB7zl-.mjs","sources":["../../../projects/mobile-design-lib/src/components/facility-creation-modal/sheets/ds-mobile-time-sheet.ts"],"sourcesContent":["import { Component, signal, Input, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ModalController } from '@ionic/angular/standalone';\nimport { DsMobileBottomSheetWrapperComponent } from '../../bottom-sheet/ds-mobile-bottom-sheet-wrapper';\nimport { DsMobileBottomSheetHeaderComponent } from '../../bottom-sheet/ds-mobile-bottom-sheet-header';\n\n@Component({\n selector: 'ds-mobile-time-sheet',\n standalone: true,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n FormsModule,\n DsMobileBottomSheetWrapperComponent,\n DsMobileBottomSheetHeaderComponent,\n ],\n template: `\n <ds-mobile-bottom-sheet-wrapper>\n <ds-mobile-bottom-sheet-header\n title=\"I tidsrummet\"\n leftButtonLabel=\"Annuller\"\n rightButtonLabel=\"Gem\"\n (leftButtonClick)=\"dismiss()\"\n (rightButtonClick)=\"confirmSelection()\">\n </ds-mobile-bottom-sheet-header>\n\n <div class=\"sheet-content\">\n <div class=\"time-row\">\n <label class=\"time-pill\">\n <input\n type=\"time\"\n class=\"time-input\"\n [ngModel]=\"startTime()\"\n (ngModelChange)=\"startTime.set($event)\"\n />\n </label>\n\n <span class=\"separator\">til</span>\n\n <label class=\"time-pill\">\n <input\n type=\"time\"\n class=\"time-input\"\n [ngModel]=\"endTime()\"\n (ngModelChange)=\"endTime.set($event)\"\n />\n </label>\n </div>\n </div>\n </ds-mobile-bottom-sheet-wrapper>\n `,\n styles: [`\n .sheet-content {\n padding: 16px;\n }\n\n .time-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .time-pill {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n height: 40px;\n padding: 0 16px;\n border: 1px solid var(--border-color-default, #e3e6eb);\n border-radius: 99px;\n background: transparent;\n cursor: pointer;\n }\n\n .time-input {\n border: none;\n background: transparent;\n font-family: 'Brockmann', sans-serif;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.56px;\n color: var(--text-color-default-primary, #202227);\n outline: none;\n padding: 0;\n width: 100%;\n text-align: center;\n -webkit-appearance: none;\n appearance: none;\n }\n\n /* Hide the native clock icon in WebKit browsers */\n .time-input::-webkit-calendar-picker-indicator {\n display: none;\n -webkit-appearance: none;\n }\n\n .separator {\n font-family: 'Brockmann', sans-serif;\n font-size: var(--font-size-sm, 14px);\n font-weight: 500;\n line-height: 18px;\n letter-spacing: -0.56px;\n color: var(--text-color-default-secondary, #626b78);\n flex-shrink: 0;\n }\n `],\n})\nexport class DsMobileTimeSheetComponent {\n @Input() initialStart?: string;\n @Input() initialEnd?: string;\n\n startTime = signal('09:00');\n endTime = signal('17:30');\n\n constructor(private modalController: ModalController) {}\n\n ngOnInit(): void {\n if (this.initialStart) this.startTime.set(this.initialStart);\n if (this.initialEnd) this.endTime.set(this.initialEnd);\n }\n\n confirmSelection(): void {\n const value = `${this.startTime()}-${this.endTime()}`;\n this.modalController.dismiss({ value }, 'select');\n }\n\n dismiss(): void {\n this.modalController.dismiss(null, 'cancel');\n }\n}\n"],"names":[],"mappings":"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"}