@semantic-components/carousel 0.3.0 → 0.61.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.
package/README.md CHANGED
@@ -1,7 +1,13 @@
1
- # carousel
1
+ # @semantic-components/carousel
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ Carousel components built on top of Embla Carousel for the Semantic Components library.
4
4
 
5
- ## Running unit tests
5
+ ## Contents
6
6
 
7
- Run `nx test carousel` to execute the unit tests.
7
+ - **Components**: Carousel, viewport, track, item, next/previous navigation
8
+
9
+ ## Usage
10
+
11
+ ```ts
12
+ import { ScCarousel, ScCarouselViewport, ScCarouselTrack, ScCarouselItem, ScCarouselNext, ScCarouselPrevious } from '@semantic-components/carousel';
13
+ ```
@@ -0,0 +1,48 @@
1
+ import nx from '@nx/eslint-plugin';
2
+ import baseConfig from '../../eslint.config.mjs';
3
+
4
+ export default [
5
+ ...baseConfig,
6
+ {
7
+ files: ['**/*.json'],
8
+ rules: {
9
+ '@nx/dependency-checks': [
10
+ 'error',
11
+ {
12
+ ignoredFiles: ['{projectRoot}/eslint.config.{js,cjs,mjs,ts,cts,mts}'],
13
+ },
14
+ ],
15
+ },
16
+ languageOptions: {
17
+ parser: await import('jsonc-eslint-parser'),
18
+ },
19
+ },
20
+ ...nx.configs['flat/angular'],
21
+ ...nx.configs['flat/angular-template'],
22
+ {
23
+ files: ['**/*.ts'],
24
+ rules: {
25
+ '@angular-eslint/directive-selector': [
26
+ 'error',
27
+ {
28
+ type: 'attribute',
29
+ prefix: 'sc',
30
+ style: 'camelCase',
31
+ },
32
+ ],
33
+ '@angular-eslint/component-selector': [
34
+ 'error',
35
+ {
36
+ type: 'element',
37
+ prefix: 'sc',
38
+ style: 'kebab-case',
39
+ },
40
+ ],
41
+ },
42
+ },
43
+ {
44
+ files: ['**/*.html'],
45
+ // Override or add rules here
46
+ rules: {},
47
+ },
48
+ ];
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "../../dist/libs/carousel",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,36 +1,10 @@
1
1
  {
2
2
  "name": "@semantic-components/carousel",
3
- "version": "0.3.0",
4
- "private": false,
5
- "publishConfig": {
6
- "access": "public"
7
- },
8
- "author": "Khalil LAGRIDA",
9
- "license": "MIT",
3
+ "version": "0.61.0",
10
4
  "peerDependencies": {
11
- "@angular/core": ">=19.0.0",
12
- "@semantic-components/utils": "0.45.0",
13
- "embla-carousel": "^8.6.0",
14
- "@semantic-components/ui": "0.56.0"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "https://github.com/khalilou88/semantic-components",
19
- "directory": "libs/carousel"
20
- },
21
- "sideEffects": false,
22
- "module": "fesm2022/semantic-components-carousel.mjs",
23
- "typings": "index.d.ts",
24
- "exports": {
25
- "./package.json": {
26
- "default": "./package.json"
27
- },
28
- ".": {
29
- "types": "./index.d.ts",
30
- "default": "./fesm2022/semantic-components-carousel.mjs"
31
- }
5
+ "@angular/core": ">=21.1.0",
6
+ "@semantic-components/ui": "0.61.0",
7
+ "embla-carousel": ">=8.6.0"
32
8
  },
33
- "dependencies": {
34
- "tslib": "^2.3.0"
35
- }
36
- }
9
+ "sideEffects": false
10
+ }
package/project.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "carousel",
3
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
4
+ "sourceRoot": "libs/carousel/src",
5
+ "prefix": "sc",
6
+ "projectType": "library",
7
+ "tags": [],
8
+ "targets": {
9
+ "build": {
10
+ "executor": "@nx/angular:ng-packagr-lite",
11
+ "outputs": ["{workspaceRoot}/dist/{projectRoot}"],
12
+ "options": {
13
+ "project": "libs/carousel/ng-package.json",
14
+ "tsConfig": "libs/carousel/tsconfig.lib.json"
15
+ },
16
+ "configurations": {
17
+ "production": {
18
+ "tsConfig": "libs/carousel/tsconfig.lib.prod.json"
19
+ },
20
+ "development": {}
21
+ },
22
+ "defaultConfiguration": "production"
23
+ },
24
+ "lint": {
25
+ "executor": "@nx/eslint:lint"
26
+ }
27
+ }
28
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib/components';
@@ -0,0 +1,342 @@
1
+ # Carousel
2
+
3
+ A carousel component built with Embla Carousel, featuring smooth animations, touch/swipe gestures, and plugin support.
4
+
5
+ ## Usage
6
+
7
+ ```html
8
+ <div sc-carousel class="w-full max-w-xs">
9
+ <div sc-carousel-viewport>
10
+ <div sc-carousel-track>
11
+ <div sc-carousel-item>Slide 1</div>
12
+ <div sc-carousel-item>Slide 2</div>
13
+ <div sc-carousel-item>Slide 3</div>
14
+ </div>
15
+ </div>
16
+ <button sc-carousel-previous>
17
+ <svg si-chevron-left-icon></svg>
18
+ <span class="sr-only">Previous slide</span>
19
+ </button>
20
+ <button sc-carousel-next>
21
+ <svg si-chevron-right-icon></svg>
22
+ <span class="sr-only">Next slide</span>
23
+ </button>
24
+ </div>
25
+ ```
26
+
27
+ ## Architecture
28
+
29
+ The carousel uses a three-layer structure inspired by Embla Carousel's architecture:
30
+
31
+ 1. **ScCarousel** - The outer container that manages state, API, and keyboard navigation
32
+ 2. **ScCarouselViewport** - The overflow container (`overflow-hidden`) that Embla binds to
33
+ 3. **ScCarouselTrack** - The flex container that slides within the viewport
34
+ 4. **ScCarouselItem** - Individual slides on the track
35
+
36
+ ```
37
+ ┌─ ScCarousel (relative positioning, manages state)
38
+ │ ├─ ScCarouselViewport (overflow-hidden, viewport for Embla)
39
+ │ │ └─ ScCarouselTrack (flex container, the sliding track)
40
+ │ │ ├─ ScCarouselItem (slide 1)
41
+ │ │ ├─ ScCarouselItem (slide 2)
42
+ │ │ └─ ScCarouselItem (slide 3)
43
+ │ ├─ ScCarouselPrevious (navigation button)
44
+ │ └─ ScCarouselNext (navigation button)
45
+ ```
46
+
47
+ ## Components
48
+
49
+ ### ScCarousel
50
+
51
+ Main carousel container that manages state and keyboard navigation.
52
+
53
+ **Selector:** `div[sc-carousel]`
54
+
55
+ **Inputs:**
56
+
57
+ | Input | Type | Default | Description |
58
+ | ------------- | ---------------------------- | -------------- | ------------------------------ |
59
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Scroll direction |
60
+ | `options` | `ScCarouselOptions` | `{}` | Embla carousel options |
61
+ | `plugins` | `ScCarouselPlugin[]` | `[]` | Embla plugins (e.g., autoplay) |
62
+ | `class` | `string` | `''` | Additional CSS classes |
63
+
64
+ ### ScCarouselViewport
65
+
66
+ The overflow container (viewport) that Embla binds to. This provides the visible window for the carousel.
67
+
68
+ **Selector:** `div[sc-carousel-viewport]`
69
+
70
+ **Inputs:**
71
+
72
+ | Input | Type | Default | Description |
73
+ | ------- | -------- | ------- | ---------------------- |
74
+ | `class` | `string` | `''` | Additional CSS classes |
75
+
76
+ ### ScCarouselTrack
77
+
78
+ The flex container (track) that moves within the viewport and holds carousel items. This is the element that slides left/right or up/down.
79
+
80
+ **Selector:** `div[sc-carousel-track]`
81
+
82
+ **Inputs:**
83
+
84
+ | Input | Type | Default | Description |
85
+ | ------- | -------- | ------- | ---------------------- |
86
+ | `class` | `string` | `''` | Additional CSS classes |
87
+
88
+ ### ScCarouselItem
89
+
90
+ Individual carousel slide.
91
+
92
+ **Selector:** `div[sc-carousel-item]`
93
+
94
+ **Inputs:**
95
+
96
+ | Input | Type | Default | Description |
97
+ | ------- | -------- | ------- | ---------------------- |
98
+ | `class` | `string` | `''` | Additional CSS classes |
99
+
100
+ ### ScCarouselPrevious
101
+
102
+ Previous slide navigation button. Content must be provided by the user (icon + screen reader text).
103
+
104
+ **Selector:** `button[sc-carousel-previous]`
105
+
106
+ **Inputs:**
107
+
108
+ | Input | Type | Default | Description |
109
+ | ------- | -------- | ------- | ---------------------- |
110
+ | `class` | `string` | `''` | Additional CSS classes |
111
+
112
+ **Example:**
113
+
114
+ ```html
115
+ <button sc-carousel-previous>
116
+ <svg si-chevron-left-icon></svg>
117
+ <span class="sr-only">Previous slide</span>
118
+ </button>
119
+ ```
120
+
121
+ ### ScCarouselNext
122
+
123
+ Next slide navigation button. Content must be provided by the user (icon + screen reader text).
124
+
125
+ **Selector:** `button[sc-carousel-next]`
126
+
127
+ **Inputs:**
128
+
129
+ | Input | Type | Default | Description |
130
+ | ------- | -------- | ------- | ---------------------- |
131
+ | `class` | `string` | `''` | Additional CSS classes |
132
+
133
+ **Example:**
134
+
135
+ ```html
136
+ <button sc-carousel-next>
137
+ <svg si-chevron-right-icon></svg>
138
+ <span class="sr-only">Next slide</span>
139
+ </button>
140
+ ```
141
+
142
+ ## Examples
143
+
144
+ ### Default
145
+
146
+ ```html
147
+ <div sc-carousel class="w-full max-w-xs">
148
+ <div sc-carousel-viewport>
149
+ <div sc-carousel-track>
150
+ @for (i of [1, 2, 3, 4, 5]; track i) {
151
+ <div sc-carousel-item>
152
+ <div class="p-1">
153
+ <div class="flex aspect-square items-center justify-center rounded-lg border">{{ i }}</div>
154
+ </div>
155
+ </div>
156
+ }
157
+ </div>
158
+ </div>
159
+ <button sc-carousel-previous>
160
+ <svg si-chevron-left-icon></svg>
161
+ <span class="sr-only">Previous slide</span>
162
+ </button>
163
+ <button sc-carousel-next>
164
+ <svg si-chevron-right-icon></svg>
165
+ <span class="sr-only">Next slide</span>
166
+ </button>
167
+ </div>
168
+ ```
169
+
170
+ ### With Loop
171
+
172
+ ```typescript
173
+ import { Component } from '@angular/core';
174
+
175
+ @Component({
176
+ template: `
177
+ <div sc-carousel [options]="{ loop: true }" class="w-full max-w-xs">
178
+ <div sc-carousel-viewport>
179
+ <div sc-carousel-track>
180
+ @for (i of [1, 2, 3, 4, 5]; track i) {
181
+ <div sc-carousel-item>{{ i }}</div>
182
+ }
183
+ </div>
184
+ </div>
185
+ <button sc-carousel-previous>
186
+ <svg si-chevron-left-icon></svg>
187
+ <span class="sr-only">Previous slide</span>
188
+ </button>
189
+ <button sc-carousel-next>
190
+ <svg si-chevron-right-icon></svg>
191
+ <span class="sr-only">Next slide</span>
192
+ </button>
193
+ </div>
194
+ `,
195
+ })
196
+ export class MyComponent {}
197
+ ```
198
+
199
+ ### With Autoplay
200
+
201
+ ```typescript
202
+ import { Component } from '@angular/core';
203
+ import Autoplay from 'embla-carousel-autoplay';
204
+
205
+ @Component({
206
+ template: `
207
+ <div sc-carousel [plugins]="plugins" class="w-full max-w-xs">
208
+ <div sc-carousel-viewport>
209
+ <div sc-carousel-track>
210
+ @for (i of items; track i) {
211
+ <div sc-carousel-item>{{ i }}</div>
212
+ }
213
+ </div>
214
+ </div>
215
+ <button sc-carousel-previous>
216
+ <svg si-chevron-left-icon></svg>
217
+ <span class="sr-only">Previous slide</span>
218
+ </button>
219
+ <button sc-carousel-next>
220
+ <svg si-chevron-right-icon></svg>
221
+ <span class="sr-only">Next slide</span>
222
+ </button>
223
+ </div>
224
+ `,
225
+ })
226
+ export class MyComponent {
227
+ plugins = [Autoplay({ delay: 2000, stopOnInteraction: true })];
228
+ items = [1, 2, 3, 4, 5];
229
+ }
230
+ ```
231
+
232
+ ### Partial Items (Multiple Visible)
233
+
234
+ ```html
235
+ <div sc-carousel [options]="{ align: 'start' }" class="w-full max-w-lg">
236
+ <div sc-carousel-viewport>
237
+ <div sc-carousel-track>
238
+ @for (i of items; track i) {
239
+ <div sc-carousel-item class="basis-1/3">
240
+ <!-- Shows 3 items at a time -->
241
+ </div>
242
+ }
243
+ </div>
244
+ </div>
245
+ </div>
246
+ ```
247
+
248
+ ### Vertical Orientation
249
+
250
+ ```html
251
+ <div sc-carousel orientation="vertical" [options]="{ align: 'start' }" class="w-full max-w-xs">
252
+ <div sc-carousel-viewport>
253
+ <div sc-carousel-track class="-mt-1 h-[270px]">
254
+ @for (i of items; track i) {
255
+ <div sc-carousel-item class="basis-1/2 pt-1">
256
+ <div class="p-1">
257
+ <div class="flex items-center justify-center rounded-lg border bg-card p-6">
258
+ <span class="text-3xl font-semibold">{{ i }}</span>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ }
263
+ </div>
264
+ </div>
265
+ <button sc-carousel-previous>
266
+ <svg si-chevron-left-icon></svg>
267
+ <span class="sr-only">Previous slide</span>
268
+ </button>
269
+ <button sc-carousel-next>
270
+ <svg si-chevron-right-icon></svg>
271
+ <span class="sr-only">Next slide</span>
272
+ </button>
273
+ </div>
274
+ ```
275
+
276
+ ## Features
277
+
278
+ - **Embla Carousel**: Powered by Embla for smooth, physics-based animations
279
+ - **Touch/Swipe**: Native touch and mouse drag support
280
+ - **Horizontal/Vertical**: Supports both orientations
281
+ - **Keyboard Navigation**: Arrow keys for navigation
282
+ - **Plugin System**: Extend with plugins (autoplay, auto-scroll, etc.)
283
+ - **Flexible Options**: Loop, alignment, slide spacing, and more
284
+ - **Responsive**: Flexible sizing with basis classes
285
+ - **Navigation Buttons**: Prev/next with auto-disable at boundaries
286
+ - **Accessible**: ARIA roles and roledescription
287
+
288
+ ## Keyboard Navigation
289
+
290
+ - `ArrowLeft`: Navigate to previous slide
291
+ - `ArrowRight`: Navigate to next slide
292
+
293
+ ## Accessibility
294
+
295
+ - `role="region"` with `aria-roledescription="carousel"` on container
296
+ - `role="group"` with `aria-roledescription="slide"` on items
297
+ - Screen reader text on navigation buttons
298
+ - Disabled state for navigation at boundaries
299
+
300
+ ## Carousel Options
301
+
302
+ The `options` input accepts all [Embla Carousel options](https://www.embla-carousel.com/api/options/):
303
+
304
+ - `align`: `'start' | 'center' | 'end'` - Slide alignment
305
+ - `loop`: `boolean` - Enable infinite loop
306
+ - `skipSnaps`: `boolean` - Skip slides that can't be scrolled to
307
+ - `dragFree`: `boolean` - Enable free scroll without snap points
308
+ - `slidesToScroll`: `number | 'auto'` - Number of slides to scroll
309
+ - `containScroll`: `'trimSnaps' | 'keepSnaps'` - Contain scroll behavior
310
+ - And many more...
311
+
312
+ ## Plugins
313
+
314
+ The carousel supports all Embla plugins via the `plugins` input:
315
+
316
+ ### Autoplay
317
+
318
+ ```bash
319
+ npm install embla-carousel-autoplay
320
+ ```
321
+
322
+ ```typescript
323
+ import Autoplay from 'embla-carousel-autoplay';
324
+
325
+ export class MyComponent {
326
+ plugins = [
327
+ Autoplay({
328
+ delay: 3000,
329
+ stopOnInteraction: true,
330
+ stopOnMouseEnter: true,
331
+ }),
332
+ ];
333
+ }
334
+ ```
335
+
336
+ ### Other Available Plugins
337
+
338
+ - **embla-carousel-auto-scroll**: Automatic scrolling
339
+ - **embla-carousel-class-names**: Dynamic class names on slides
340
+ - **embla-carousel-fade**: Fade transition effect
341
+
342
+ See [Embla Carousel Plugins](https://www.embla-carousel.com/plugins/) for more.
@@ -0,0 +1,27 @@
1
+ import { computed, Directive, inject, input } from '@angular/core';
2
+ import { cn } from '@semantic-components/ui';
3
+ import { ScCarousel } from './carousel';
4
+
5
+ @Directive({
6
+ selector: 'div[sc-carousel-item]',
7
+ host: {
8
+ 'data-slot': 'carousel-item',
9
+ role: 'group',
10
+ 'aria-roledescription': 'slide',
11
+ '[class]': 'class()',
12
+ },
13
+ })
14
+ export class ScCarouselItem {
15
+ private readonly carousel = inject(ScCarousel);
16
+
17
+ readonly classInput = input<string>('', { alias: 'class' });
18
+
19
+ protected readonly class = computed(() => {
20
+ const isHorizontal = this.carousel.orientation() === 'horizontal';
21
+ return cn(
22
+ 'min-w-0 shrink-0 grow-0 basis-full',
23
+ isHorizontal ? 'pl-4' : 'pt-4',
24
+ this.classInput(),
25
+ );
26
+ });
27
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ computed,
5
+ inject,
6
+ input,
7
+ ViewEncapsulation,
8
+ } from '@angular/core';
9
+ import { buttonVariants, cn, ScButtonVariants } from '@semantic-components/ui';
10
+ import { ScCarousel } from './carousel';
11
+
12
+ @Component({
13
+ selector: 'button[sc-carousel-next]',
14
+ template: `
15
+ <ng-content />
16
+ `,
17
+ host: {
18
+ 'data-slot': 'carousel-next',
19
+ type: 'button',
20
+ '[class]': 'class()',
21
+ '[disabled]': '!carousel.canScrollNext()',
22
+ '(click)': 'carousel.scrollNext()',
23
+ },
24
+ encapsulation: ViewEncapsulation.None,
25
+ changeDetection: ChangeDetectionStrategy.OnPush,
26
+ })
27
+ export class ScCarouselNext {
28
+ readonly carousel = inject(ScCarousel);
29
+
30
+ readonly classInput = input<string>('', { alias: 'class' });
31
+
32
+ readonly variant = input<ScButtonVariants['variant']>('outline');
33
+ readonly size = input<ScButtonVariants['size']>('icon-sm');
34
+
35
+ protected readonly class = computed(() => {
36
+ const isHorizontal = this.carousel.orientation() === 'horizontal';
37
+ return cn(
38
+ buttonVariants({ variant: this.variant(), size: this.size() }),
39
+ 'rounded-full absolute touch-manipulation',
40
+ isHorizontal
41
+ ? 'top-1/2 -right-12 -translate-y-1/2'
42
+ : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90',
43
+ this.classInput(),
44
+ );
45
+ });
46
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ computed,
5
+ inject,
6
+ input,
7
+ ViewEncapsulation,
8
+ } from '@angular/core';
9
+ import { buttonVariants, cn, ScButtonVariants } from '@semantic-components/ui';
10
+ import { ScCarousel } from './carousel';
11
+
12
+ @Component({
13
+ selector: 'button[sc-carousel-previous]',
14
+ template: `
15
+ <ng-content />
16
+ `,
17
+ host: {
18
+ 'data-slot': 'carousel-previous',
19
+ type: 'button',
20
+ '[class]': 'class()',
21
+ '[disabled]': '!carousel.canScrollPrev()',
22
+ '(click)': 'carousel.scrollPrev()',
23
+ },
24
+ encapsulation: ViewEncapsulation.None,
25
+ changeDetection: ChangeDetectionStrategy.OnPush,
26
+ })
27
+ export class ScCarouselPrevious {
28
+ readonly carousel = inject(ScCarousel);
29
+
30
+ readonly classInput = input<string>('', { alias: 'class' });
31
+
32
+ readonly variant = input<ScButtonVariants['variant']>('outline');
33
+ readonly size = input<ScButtonVariants['size']>('icon-sm');
34
+
35
+ protected readonly class = computed(() => {
36
+ const isHorizontal = this.carousel.orientation() === 'horizontal';
37
+ return cn(
38
+ buttonVariants({ variant: this.variant(), size: this.size() }),
39
+ 'rounded-full absolute touch-manipulation',
40
+ isHorizontal
41
+ ? 'top-1/2 -left-12 -translate-y-1/2'
42
+ : '-top-12 left-1/2 -translate-x-1/2 rotate-90',
43
+ this.classInput(),
44
+ );
45
+ });
46
+ }
@@ -0,0 +1,25 @@
1
+ import { computed, Directive, inject, input } from '@angular/core';
2
+ import { cn } from '@semantic-components/ui';
3
+ import { ScCarousel } from './carousel';
4
+
5
+ @Directive({
6
+ selector: 'div[sc-carousel-track]',
7
+ host: {
8
+ 'data-slot': 'carousel-track',
9
+ '[class]': 'class()',
10
+ },
11
+ })
12
+ export class ScCarouselTrack {
13
+ private readonly carousel = inject(ScCarousel);
14
+
15
+ readonly classInput = input<string>('', { alias: 'class' });
16
+
17
+ protected readonly class = computed(() => {
18
+ const isHorizontal = this.carousel.orientation() === 'horizontal';
19
+ return cn(
20
+ 'flex',
21
+ isHorizontal ? '-ml-4' : '-mt-4 flex-col',
22
+ this.classInput(),
23
+ );
24
+ });
25
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ computed,
3
+ Component,
4
+ ElementRef,
5
+ inject,
6
+ input,
7
+ ViewEncapsulation,
8
+ ChangeDetectionStrategy,
9
+ } from '@angular/core';
10
+ import { cn } from '@semantic-components/ui';
11
+
12
+ @Component({
13
+ selector: 'div[sc-carousel-viewport]',
14
+ template: `
15
+ <ng-content />
16
+ `,
17
+ host: {
18
+ 'data-slot': 'carousel-viewport',
19
+ '[class]': 'class()',
20
+ },
21
+ encapsulation: ViewEncapsulation.None,
22
+ changeDetection: ChangeDetectionStrategy.OnPush,
23
+ })
24
+ export class ScCarouselViewport {
25
+ private readonly elementRef = inject(ElementRef<HTMLElement>);
26
+
27
+ readonly classInput = input<string>('', { alias: 'class' });
28
+
29
+ readonly viewportElement = computed(() => this.elementRef.nativeElement);
30
+
31
+ protected readonly class = computed(() =>
32
+ cn('overflow-hidden', this.classInput()),
33
+ );
34
+ }
@@ -0,0 +1,104 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ computed,
5
+ contentChild,
6
+ input,
7
+ signal,
8
+ ViewEncapsulation,
9
+ DestroyRef,
10
+ inject,
11
+ afterNextRender,
12
+ } from '@angular/core';
13
+ import EmblaCarousel, {
14
+ type EmblaCarouselType,
15
+ EmblaOptionsType,
16
+ EmblaPluginType,
17
+ } from 'embla-carousel';
18
+ import { cn } from '@semantic-components/ui';
19
+ import { ScCarouselViewport } from './carousel-viewport';
20
+
21
+ export type ScCarouselOrientation = 'horizontal' | 'vertical';
22
+ export type ScCarouselApi = EmblaCarouselType;
23
+ export type ScCarouselOptions = EmblaOptionsType;
24
+ export type ScCarouselPlugin = EmblaPluginType;
25
+
26
+ @Component({
27
+ selector: 'div[sc-carousel]',
28
+ template: `
29
+ <ng-content />
30
+ `,
31
+ host: {
32
+ 'data-slot': 'carousel',
33
+ role: 'region',
34
+ 'aria-roledescription': 'carousel',
35
+ '[class]': 'class()',
36
+ '(keydown)': 'onKeyDown($event)',
37
+ },
38
+ encapsulation: ViewEncapsulation.None,
39
+ changeDetection: ChangeDetectionStrategy.OnPush,
40
+ })
41
+ export class ScCarousel {
42
+ private readonly destroyRef = inject(DestroyRef);
43
+
44
+ readonly classInput = input<string>('', { alias: 'class' });
45
+ readonly orientation = input<ScCarouselOrientation>('horizontal');
46
+ readonly options = input<ScCarouselOptions>({});
47
+ readonly plugins = input<ScCarouselPlugin[]>([]);
48
+
49
+ private readonly viewport = contentChild(ScCarouselViewport);
50
+
51
+ readonly canScrollPrev = signal(false);
52
+ readonly canScrollNext = signal(false);
53
+
54
+ private api: ScCarouselApi | null = null;
55
+
56
+ protected readonly class = computed(() => cn('relative', this.classInput()));
57
+
58
+ constructor() {
59
+ afterNextRender(() => {
60
+ const viewportEl = this.viewport()?.viewportElement();
61
+ if (!viewportEl) return;
62
+
63
+ const opts = {
64
+ ...this.options(),
65
+ axis: (this.orientation() === 'horizontal' ? 'x' : 'y') as 'x' | 'y',
66
+ };
67
+
68
+ this.api = EmblaCarousel(viewportEl, opts, this.plugins());
69
+
70
+ this.updateScrollState();
71
+
72
+ this.api.on('select', () => this.updateScrollState());
73
+ this.api.on('reInit', () => this.updateScrollState());
74
+
75
+ this.destroyRef.onDestroy(() => {
76
+ this.api?.destroy();
77
+ });
78
+ });
79
+ }
80
+
81
+ scrollPrev(): void {
82
+ this.api?.scrollPrev();
83
+ }
84
+
85
+ scrollNext(): void {
86
+ this.api?.scrollNext();
87
+ }
88
+
89
+ private updateScrollState(): void {
90
+ if (!this.api) return;
91
+ this.canScrollPrev.set(this.api.canScrollPrev());
92
+ this.canScrollNext.set(this.api.canScrollNext());
93
+ }
94
+
95
+ protected onKeyDown(event: KeyboardEvent): void {
96
+ if (event.key === 'ArrowLeft') {
97
+ event.preventDefault();
98
+ this.scrollPrev();
99
+ } else if (event.key === 'ArrowRight') {
100
+ event.preventDefault();
101
+ this.scrollNext();
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,12 @@
1
+ export { ScCarousel } from './carousel';
2
+ export type {
3
+ ScCarouselOrientation,
4
+ ScCarouselOptions,
5
+ ScCarouselApi,
6
+ ScCarouselPlugin,
7
+ } from './carousel';
8
+ export { ScCarouselViewport } from './carousel-viewport';
9
+ export { ScCarouselTrack } from './carousel-track';
10
+ export { ScCarouselItem } from './carousel-item';
11
+ export { ScCarouselPrevious } from './carousel-previous';
12
+ export { ScCarouselNext } from './carousel-next';
@@ -0,0 +1 @@
1
+ export * from './carousel';
package/tsconfig.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "isolatedModules": true,
5
+ "target": "es2022",
6
+ "moduleResolution": "bundler",
7
+ "strict": true,
8
+ "noImplicitOverride": true,
9
+ "noPropertyAccessFromIndexSignature": true,
10
+ "noImplicitReturns": true,
11
+ "noFallthroughCasesInSwitch": true,
12
+ "emitDecoratorMetadata": false,
13
+ "module": "preserve"
14
+ },
15
+ "angularCompilerOptions": {
16
+ "enableI18nLegacyMessageIdFormat": false,
17
+ "strictInjectionParameters": true,
18
+ "strictInputAccessModifiers": true,
19
+ "strictTemplates": true
20
+ },
21
+ "files": [],
22
+ "include": [],
23
+ "references": [
24
+ {
25
+ "path": "./tsconfig.lib.json"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "../../dist/out-tsc",
5
+ "declaration": true,
6
+ "declarationMap": true,
7
+ "inlineSources": true,
8
+ "types": []
9
+ },
10
+ "include": ["src/**/*.ts"],
11
+ "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"]
12
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "extends": "./tsconfig.lib.json",
3
+ "compilerOptions": {
4
+ "declarationMap": false
5
+ },
6
+ "angularCompilerOptions": {}
7
+ }
@@ -1,210 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ElementRef, input, computed, signal, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component, linkedSignal } from '@angular/core';
3
- import { cn } from '@semantic-components/utils';
4
- import EmblaCarousel from 'embla-carousel';
5
- import { ScButtonBase, buttonVariants } from '@semantic-components/ui';
6
-
7
- class ScCarousel {
8
- host = inject(ElementRef);
9
- classInput = input('', {
10
- alias: 'class',
11
- });
12
- class = computed(() => cn('overflow-hidden', this.classInput()));
13
- orientation = input('horizontal');
14
- optionsInput = input({}, {
15
- alias: 'options',
16
- });
17
- options = computed(() => {
18
- const opts = this.optionsInput();
19
- return {
20
- ...opts,
21
- axis: this.orientation() === 'horizontal' ? 'x' : 'y',
22
- };
23
- });
24
- plugins = input([]);
25
- canScrollPrev = signal(false);
26
- canScrollNext = signal(false);
27
- emblaApi;
28
- get api() {
29
- return this.emblaApi;
30
- }
31
- constructor() {
32
- afterNextRender(() => {
33
- this.emblaApi = EmblaCarousel(this.host.nativeElement, this.options(), this.plugins());
34
- this.emblaApi
35
- .on('select', this.togglePrevNextBtnsState)
36
- .on('init', this.togglePrevNextBtnsState)
37
- .on('reInit', this.togglePrevNextBtnsState);
38
- });
39
- }
40
- togglePrevNextBtnsState = () => {
41
- if (this.emblaApi.canScrollPrev()) {
42
- this.canScrollPrev.set(true);
43
- }
44
- else {
45
- this.canScrollPrev.set(false);
46
- }
47
- if (this.emblaApi.canScrollNext()) {
48
- this.canScrollNext.set(true);
49
- }
50
- else {
51
- this.canScrollNext.set(false);
52
- }
53
- };
54
- handleKeydown(event) {
55
- if (event.key === 'ArrowLeft') {
56
- event.preventDefault();
57
- this.scrollPrev();
58
- }
59
- else if (event.key === 'ArrowRight') {
60
- event.preventDefault();
61
- this.scrollNext();
62
- }
63
- }
64
- scrollPrev() {
65
- this.emblaApi.scrollPrev();
66
- }
67
- scrollNext() {
68
- this.emblaApi.scrollNext();
69
- }
70
- ngOnDestroy() {
71
- this.emblaApi.destroy();
72
- }
73
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarousel, deps: [], target: i0.ɵɵFactoryTarget.Component });
74
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarousel, isStandalone: true, selector: "div[sc-carousel]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: "optionsInput", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "region", "aria-roledescription": "carousel" }, listeners: { "keydown": "handleKeydown($event)" }, properties: { "class": "class()" } }, ngImport: i0, template: `
75
- <ng-content />
76
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarousel, decorators: [{
79
- type: Component,
80
- args: [{ selector: 'div[sc-carousel]', imports: [], template: `
81
- <ng-content />
82
- `, host: {
83
- role: 'region',
84
- 'aria-roledescription': 'carousel',
85
- '[class]': 'class()',
86
- '(keydown)': 'handleKeydown($event)',
87
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
88
- }], ctorParameters: () => [] });
89
-
90
- class ScCarouselContainer {
91
- classInput = input('', {
92
- alias: 'class',
93
- });
94
- class = computed(() => cn('relative', this.classInput()));
95
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarouselContainer, isStandalone: true, selector: "div[sc-carousel-container]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
97
- <ng-content />
98
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
99
- }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselContainer, decorators: [{
101
- type: Component,
102
- args: [{ selector: 'div[sc-carousel-container]', imports: [], template: `
103
- <ng-content />
104
- `, host: {
105
- '[class]': 'class()',
106
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
107
- }] });
108
-
109
- class ScCarouselItems {
110
- scCarousel = inject(ScCarousel);
111
- classInput = input('', {
112
- alias: 'class',
113
- });
114
- class = computed(() => cn('flex', this.scCarousel.orientation() === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', this.classInput()));
115
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselItems, deps: [], target: i0.ɵɵFactoryTarget.Component });
116
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarouselItems, isStandalone: true, selector: "div[sc-carousel-items]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "class()" } }, ngImport: i0, template: `
117
- <ng-content />
118
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
119
- }
120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselItems, decorators: [{
121
- type: Component,
122
- args: [{ selector: 'div[sc-carousel-items]', imports: [], template: `
123
- <ng-content />
124
- `, host: {
125
- '[class]': 'class()',
126
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
127
- }] });
128
-
129
- class ScCarouselItem {
130
- scCarousel = inject(ScCarousel);
131
- classInput = input('', {
132
- alias: 'class',
133
- });
134
- class = computed(() => cn('min-w-0 shrink-0 grow-0 basis-full', this.scCarousel.orientation() === 'horizontal' ? 'pl-4' : 'pt-4', this.classInput()));
135
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
136
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarouselItem, isStandalone: true, selector: "div[sc-carousel-item]", inputs: { classInput: { classPropertyName: "classInput", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "group", "aria-roledescription": "slide" }, properties: { "class": "class()" } }, ngImport: i0, template: `
137
- <ng-content />
138
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
139
- }
140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselItem, decorators: [{
141
- type: Component,
142
- args: [{ selector: 'div[sc-carousel-item]', imports: [], template: `
143
- <ng-content />
144
- `, host: {
145
- role: 'group',
146
- 'aria-roledescription': 'slide',
147
- '[class]': 'class()',
148
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
149
- }] });
150
-
151
- class ScCarouselPrevious extends ScButtonBase {
152
- scCarousel = inject(ScCarousel);
153
- variantInput = input('outline');
154
- sizeInput = input('icon');
155
- class = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), 'absolute h-8 w-8 rounded-full', this.scCarousel.orientation() === 'horizontal'
156
- ? '-left-12 top-1/2 -translate-y-1/2'
157
- : '-top-12 left-1/2 -translate-x-1/2 rotate-90', this.classInput()));
158
- disabled = linkedSignal(() => {
159
- return !this.scCarousel.canScrollPrev();
160
- });
161
- scrollPrev() {
162
- this.scCarousel.api.scrollPrev();
163
- }
164
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselPrevious, deps: null, target: i0.ɵɵFactoryTarget.Component });
165
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarouselPrevious, isStandalone: true, selector: "button[sc-carousel-previous]", inputs: { variantInput: { classPropertyName: "variantInput", publicName: "variantInput", isSignal: true, isRequired: false, transformFunction: null }, sizeInput: { classPropertyName: "sizeInput", publicName: "sizeInput", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "scrollPrev()" } }, usesInheritance: true, ngImport: i0, template: `
166
- <ng-content />
167
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
168
- }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselPrevious, decorators: [{
170
- type: Component,
171
- args: [{ selector: 'button[sc-carousel-previous]', imports: [], template: `
172
- <ng-content />
173
- `, host: {
174
- '(click)': 'scrollPrev()',
175
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
176
- }] });
177
-
178
- class ScCarouselNext extends ScButtonBase {
179
- scCarousel = inject(ScCarousel);
180
- variantInput = input('outline');
181
- sizeInput = input('icon');
182
- class = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), 'absolute h-8 w-8 rounded-full', this.scCarousel.orientation() === 'horizontal'
183
- ? '-right-12 top-1/2 -translate-y-1/2'
184
- : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90', this.classInput()));
185
- disabled = linkedSignal(() => {
186
- return !this.scCarousel.canScrollNext();
187
- });
188
- scrollNext() {
189
- this.scCarousel.api.scrollNext();
190
- }
191
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselNext, deps: null, target: i0.ɵɵFactoryTarget.Component });
192
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.4", type: ScCarouselNext, isStandalone: true, selector: "button[sc-carousel-next]", inputs: { variantInput: { classPropertyName: "variantInput", publicName: "variantInput", isSignal: true, isRequired: false, transformFunction: null }, sizeInput: { classPropertyName: "sizeInput", publicName: "sizeInput", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "scrollNext()" } }, usesInheritance: true, ngImport: i0, template: `
193
- <ng-content />
194
- `, isInline: true, styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
195
- }
196
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: ScCarouselNext, decorators: [{
197
- type: Component,
198
- args: [{ selector: 'button[sc-carousel-next]', imports: [], template: `
199
- <ng-content />
200
- `, host: {
201
- '(click)': 'scrollNext()',
202
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]
203
- }] });
204
-
205
- /**
206
- * Generated bundle index. Do not edit.
207
- */
208
-
209
- export { ScCarousel, ScCarouselContainer, ScCarouselItem, ScCarouselItems, ScCarouselNext, ScCarouselPrevious };
210
- //# sourceMappingURL=semantic-components-carousel.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"semantic-components-carousel.mjs","sources":["../tmp-esm2022/lib/carousel/carousel.js","../tmp-esm2022/lib/carousel/carousel-container.js","../tmp-esm2022/lib/carousel/carousel-items.js","../tmp-esm2022/lib/carousel/carousel-item.js","../tmp-esm2022/lib/carousel/carousel-previous.js","../tmp-esm2022/lib/carousel/carousel-next.js","../tmp-esm2022/semantic-components-carousel.js"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, ViewEncapsulation, afterNextRender, computed, inject, input, signal, } from '@angular/core';\nimport { cn } from '@semantic-components/utils';\nimport EmblaCarousel from 'embla-carousel';\nimport * as i0 from \"@angular/core\";\nexport class ScCarousel {\n host = inject(ElementRef);\n classInput = input('', {\n alias: 'class',\n });\n class = computed(() => cn('overflow-hidden', this.classInput()));\n orientation = input('horizontal');\n optionsInput = input({}, {\n alias: 'options',\n });\n options = computed(() => {\n const opts = this.optionsInput();\n return {\n ...opts,\n axis: this.orientation() === 'horizontal' ? 'x' : 'y',\n };\n });\n plugins = input([]);\n canScrollPrev = signal(false);\n canScrollNext = signal(false);\n emblaApi;\n get api() {\n return this.emblaApi;\n }\n constructor() {\n afterNextRender(() => {\n this.emblaApi = EmblaCarousel(this.host.nativeElement, this.options(), this.plugins());\n this.emblaApi\n .on('select', this.togglePrevNextBtnsState)\n .on('init', this.togglePrevNextBtnsState)\n .on('reInit', this.togglePrevNextBtnsState);\n });\n }\n togglePrevNextBtnsState = () => {\n if (this.emblaApi.canScrollPrev()) {\n this.canScrollPrev.set(true);\n }\n else {\n this.canScrollPrev.set(false);\n }\n if (this.emblaApi.canScrollNext()) {\n this.canScrollNext.set(true);\n }\n else {\n this.canScrollNext.set(false);\n }\n };\n handleKeydown(event) {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.scrollPrev();\n }\n else if (event.key === 'ArrowRight') {\n event.preventDefault();\n this.scrollNext();\n }\n }\n scrollPrev() {\n this.emblaApi.scrollPrev();\n }\n scrollNext() {\n this.emblaApi.scrollNext();\n }\n ngOnDestroy() {\n this.emblaApi.destroy();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarousel, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarousel, isStandalone: true, selector: \"div[sc-carousel]\", inputs: { classInput: { classPropertyName: \"classInput\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: \"orientation\", publicName: \"orientation\", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: \"optionsInput\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: \"plugins\", publicName: \"plugins\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"role\": \"region\", \"aria-roledescription\": \"carousel\" }, listeners: { \"keydown\": \"handleKeydown($event)\" }, properties: { \"class\": \"class()\" } }, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarousel, decorators: [{\n type: Component,\n args: [{ selector: 'div[sc-carousel]', imports: [], template: `\n <ng-content />\n `, host: {\n role: 'region',\n 'aria-roledescription': 'carousel',\n '[class]': 'class()',\n '(keydown)': 'handleKeydown($event)',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhcm91c2VsL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUVWLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRCxPQUFPLGFBSU4sTUFBTSxnQkFBZ0IsQ0FBQzs7QUFrQnhCLE1BQU0sT0FBTyxVQUFVO0lBQ0osSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVsQyxVQUFVLEdBQUcsS0FBSyxDQUFTLEVBQUUsRUFBRTtRQUN0QyxLQUFLLEVBQUUsT0FBTztLQUNmLENBQUMsQ0FBQztJQUVnQixLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTNFLFdBQVcsR0FBRyxLQUFLLENBQTRCLFlBQVksQ0FBQyxDQUFDO0lBRTdELFlBQVksR0FBRyxLQUFLLENBQzNCLEVBQUUsRUFDRjtRQUNFLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQ0YsQ0FBQztJQUVPLE9BQU8sR0FBRyxRQUFRLENBQW1CLEdBQUcsRUFBRTtRQUNqRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakMsT0FBTztZQUNMLEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUc7U0FDdEQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRU0sT0FBTyxHQUFHLEtBQUssQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFFdkMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QixhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRS9CLFFBQVEsQ0FBcUI7SUFFckMsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDtRQUNFLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBRXZGLElBQUksQ0FBQyxRQUFRO2lCQUNWLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDO2lCQUMxQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztpQkFDeEMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1QkFBdUIsR0FBRyxHQUFTLEVBQUU7UUFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDdEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO3VHQXBGVSxVQUFVOzJGQUFWLFVBQVUsaXhCQWJYOztHQUVUOzsyRkFXVSxVQUFVO2tCQWhCdEIsU0FBUzsrQkFDRSxrQkFBa0IsV0FDbkIsRUFBRSxZQUNEOztHQUVULFFBQ0s7d0JBQ0osSUFBSSxFQUFFLFFBQVE7d0JBQ2Qsc0JBQXNCLEVBQUUsVUFBVTt3QkFDbEMsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFdBQVcsRUFBRSx1QkFBdUI7cUJBQ3JDLGlCQUVjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBPbkRlc3Ryb3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0BzZW1hbnRpYy1jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCBFbWJsYUNhcm91c2VsLCB7XG4gIEVtYmxhQ2Fyb3VzZWxUeXBlLFxuICBFbWJsYU9wdGlvbnNUeXBlLFxuICBFbWJsYVBsdWdpblR5cGUsXG59IGZyb20gJ2VtYmxhLWNhcm91c2VsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGl2W3NjLWNhcm91c2VsXScsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50IC8+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiAncmVnaW9uJyxcbiAgICAnYXJpYS1yb2xlZGVzY3JpcHRpb24nOiAnY2Fyb3VzZWwnLFxuICAgICdbY2xhc3NdJzogJ2NsYXNzKCknLFxuICAgICcoa2V5ZG93biknOiAnaGFuZGxlS2V5ZG93bigkZXZlbnQpJyxcbiAgfSxcbiAgc3R5bGVzOiBgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2Fyb3VzZWwgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgcmVhZG9ubHkgY2xhc3NJbnB1dCA9IGlucHV0PHN0cmluZz4oJycsIHtcbiAgICBhbGlhczogJ2NsYXNzJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsYXNzID0gY29tcHV0ZWQoKCkgPT4gY24oJ292ZXJmbG93LWhpZGRlbicsIHRoaXMuY2xhc3NJbnB1dCgpKSk7XG5cbiAgcmVhZG9ubHkgb3JpZW50YXRpb24gPSBpbnB1dDwnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnPignaG9yaXpvbnRhbCcpO1xuXG4gIHJlYWRvbmx5IG9wdGlvbnNJbnB1dCA9IGlucHV0PEVtYmxhT3B0aW9uc1R5cGU+KFxuICAgIHt9LFxuICAgIHtcbiAgICAgIGFsaWFzOiAnb3B0aW9ucycsXG4gICAgfSxcbiAgKTtcblxuICByZWFkb25seSBvcHRpb25zID0gY29tcHV0ZWQ8RW1ibGFPcHRpb25zVHlwZT4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnNJbnB1dCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBheGlzOiB0aGlzLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICd4JyA6ICd5JyxcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBwbHVnaW5zID0gaW5wdXQ8RW1ibGFQbHVnaW5UeXBlW10+KFtdKTtcblxuICByZWFkb25seSBjYW5TY3JvbGxQcmV2ID0gc2lnbmFsKGZhbHNlKTtcblxuICByZWFkb25seSBjYW5TY3JvbGxOZXh0ID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcml2YXRlIGVtYmxhQXBpITogRW1ibGFDYXJvdXNlbFR5cGU7XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gdGhpcy5lbWJsYUFwaTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmVtYmxhQXBpID0gRW1ibGFDYXJvdXNlbCh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwgdGhpcy5vcHRpb25zKCksIHRoaXMucGx1Z2lucygpKTtcblxuICAgICAgdGhpcy5lbWJsYUFwaVxuICAgICAgICAub24oJ3NlbGVjdCcsIHRoaXMudG9nZ2xlUHJldk5leHRCdG5zU3RhdGUpXG4gICAgICAgIC5vbignaW5pdCcsIHRoaXMudG9nZ2xlUHJldk5leHRCdG5zU3RhdGUpXG4gICAgICAgIC5vbigncmVJbml0JywgdGhpcy50b2dnbGVQcmV2TmV4dEJ0bnNTdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVQcmV2TmV4dEJ0bnNTdGF0ZSA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAodGhpcy5lbWJsYUFwaS5jYW5TY3JvbGxQcmV2KCkpIHtcbiAgICAgIHRoaXMuY2FuU2Nyb2xsUHJldi5zZXQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuU2Nyb2xsUHJldi5zZXQoZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVtYmxhQXBpLmNhblNjcm9sbE5leHQoKSkge1xuICAgICAgdGhpcy5jYW5TY3JvbGxOZXh0LnNldCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYW5TY3JvbGxOZXh0LnNldChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2Nyb2xsUHJldigpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNjcm9sbE5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFByZXYoKSB7XG4gICAgdGhpcy5lbWJsYUFwaS5zY3JvbGxQcmV2KCk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbE5leHQoKSB7XG4gICAgdGhpcy5lbWJsYUFwaS5zY3JvbGxOZXh0KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtYmxhQXBpLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input, } from '@angular/core';\nimport { cn } from '@semantic-components/utils';\nimport * as i0 from \"@angular/core\";\nexport class ScCarouselContainer {\n classInput = input('', {\n alias: 'class',\n });\n class = computed(() => cn('relative', this.classInput()));\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarouselContainer, isStandalone: true, selector: \"div[sc-carousel-container]\", inputs: { classInput: { classPropertyName: \"classInput\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class\": \"class()\" } }, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselContainer, decorators: [{\n type: Component,\n args: [{ selector: 'div[sc-carousel-container]', imports: [], template: `\n <ng-content />\n `, host: {\n '[class]': 'class()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jYXJvdXNlbC9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLWNvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBZWhELE1BQU0sT0FBTyxtQkFBbUI7SUFDckIsVUFBVSxHQUFHLEtBQUssQ0FBUyxFQUFFLEVBQUU7UUFDdEMsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7SUFFZ0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7dUdBTGxFLG1CQUFtQjsyRkFBbkIsbUJBQW1CLGtSQVZwQjs7R0FFVDs7MkZBUVUsbUJBQW1CO2tCQWIvQixTQUFTOytCQUNFLDRCQUE0QixXQUM3QixFQUFFLFlBQ0Q7O0dBRVQsUUFDSzt3QkFDSixTQUFTLEVBQUUsU0FBUztxQkFDckIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0BzZW1hbnRpYy1jb21wb25lbnRzL3V0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGl2W3NjLWNhcm91c2VsLWNvbnRhaW5lcl0nLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCAvPlxuICBgLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzc10nOiAnY2xhc3MoKScsXG4gIH0sXG4gIHN0eWxlczogYGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Nhcm91c2VsQ29udGFpbmVyIHtcbiAgcmVhZG9ubHkgY2xhc3NJbnB1dCA9IGlucHV0PHN0cmluZz4oJycsIHtcbiAgICBhbGlhczogJ2NsYXNzJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNsYXNzID0gY29tcHV0ZWQoKCkgPT4gY24oJ3JlbGF0aXZlJywgdGhpcy5jbGFzc0lucHV0KCkpKTtcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, } from '@angular/core';\nimport { cn } from '@semantic-components/utils';\nimport { ScCarousel } from './carousel';\nimport * as i0 from \"@angular/core\";\nexport class ScCarouselItems {\n scCarousel = inject(ScCarousel);\n classInput = input('', {\n alias: 'class',\n });\n class = computed(() => cn('flex', this.scCarousel.orientation() === 'horizontal' ? '-ml-4' : '-mt-4 flex-col', this.classInput()));\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselItems, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarouselItems, isStandalone: true, selector: \"div[sc-carousel-items]\", inputs: { classInput: { classPropertyName: \"classInput\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { \"class\": \"class()\" } }, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselItems, decorators: [{\n type: Component,\n args: [{ selector: 'div[sc-carousel-items]', imports: [], template: `\n <ng-content />\n `, host: {\n '[class]': 'class()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtaXRlbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhcm91c2VsL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwtaXRlbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQWV4QyxNQUFNLE9BQU8sZUFBZTtJQUNULFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEMsVUFBVSxHQUFHLEtBQUssQ0FBUyxFQUFFLEVBQUU7UUFDdEMsS0FBSyxFQUFFLE9BQU87S0FDZixDQUFDLENBQUM7SUFFZ0IsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDdkMsRUFBRSxDQUNBLE1BQU0sRUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFDM0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUNsQixDQUNGLENBQUM7dUdBYlMsZUFBZTsyRkFBZixlQUFlLDhRQVZoQjs7R0FFVDs7MkZBUVUsZUFBZTtrQkFiM0IsU0FBUzsrQkFDRSx3QkFBd0IsV0FDekIsRUFBRSxZQUNEOztHQUVULFFBQ0s7d0JBQ0osU0FBUyxFQUFFLFNBQVM7cUJBQ3JCLGlCQUVjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0BzZW1hbnRpYy1jb21wb25lbnRzL3V0aWxzJztcblxuaW1wb3J0IHsgU2NDYXJvdXNlbCB9IGZyb20gJy4vY2Fyb3VzZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkaXZbc2MtY2Fyb3VzZWwtaXRlbXNdJyxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgYCxcbiAgaG9zdDoge1xuICAgICdbY2xhc3NdJzogJ2NsYXNzKCknLFxuICB9LFxuICBzdHlsZXM6IGBgLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXJvdXNlbEl0ZW1zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzY0Nhcm91c2VsID0gaW5qZWN0KFNjQ2Fyb3VzZWwpO1xuXG4gIHJlYWRvbmx5IGNsYXNzSW5wdXQgPSBpbnB1dDxzdHJpbmc+KCcnLCB7XG4gICAgYWxpYXM6ICdjbGFzcycsXG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbGFzcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgY24oXG4gICAgICAnZmxleCcsXG4gICAgICB0aGlzLnNjQ2Fyb3VzZWwub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnID8gJy1tbC00JyA6ICctbXQtNCBmbGV4LWNvbCcsXG4gICAgICB0aGlzLmNsYXNzSW5wdXQoKSxcbiAgICApLFxuICApO1xufVxuIl19","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, } from '@angular/core';\nimport { cn } from '@semantic-components/utils';\nimport { ScCarousel } from './carousel';\nimport * as i0 from \"@angular/core\";\nexport class ScCarouselItem {\n scCarousel = inject(ScCarousel);\n classInput = input('', {\n alias: 'class',\n });\n class = computed(() => cn('min-w-0 shrink-0 grow-0 basis-full', this.scCarousel.orientation() === 'horizontal' ? 'pl-4' : 'pt-4', this.classInput()));\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselItem, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarouselItem, isStandalone: true, selector: \"div[sc-carousel-item]\", inputs: { classInput: { classPropertyName: \"classInput\", publicName: \"class\", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { \"role\": \"group\", \"aria-roledescription\": \"slide\" }, properties: { \"class\": \"class()\" } }, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselItem, decorators: [{\n type: Component,\n args: [{ selector: 'div[sc-carousel-item]', imports: [], template: `\n <ng-content />\n `, host: {\n role: 'group',\n 'aria-roledescription': 'slide',\n '[class]': 'class()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fyb3VzZWwvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFpQnhDLE1BQU0sT0FBTyxjQUFjO0lBQ1IsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV4QyxVQUFVLEdBQUcsS0FBSyxDQUFTLEVBQUUsRUFBRTtRQUN0QyxLQUFLLEVBQUUsT0FBTztLQUNmLENBQUMsQ0FBQztJQUVnQixLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUN2QyxFQUFFLENBQ0Esb0NBQW9DLEVBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFDaEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUNsQixDQUNGLENBQUM7dUdBYlMsY0FBYzsyRkFBZCxjQUFjLCtVQVpmOztHQUVUOzsyRkFVVSxjQUFjO2tCQWYxQixTQUFTOytCQUNFLHVCQUF1QixXQUN4QixFQUFFLFlBQ0Q7O0dBRVQsUUFDSzt3QkFDSixJQUFJLEVBQUUsT0FBTzt3QkFDYixzQkFBc0IsRUFBRSxPQUFPO3dCQUMvQixTQUFTLEVBQUUsU0FBUztxQkFDckIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQHNlbWFudGljLWNvbXBvbmVudHMvdXRpbHMnO1xuXG5pbXBvcnQgeyBTY0Nhcm91c2VsIH0gZnJvbSAnLi9jYXJvdXNlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RpdltzYy1jYXJvdXNlbC1pdGVtXScsXG4gIGltcG9ydHM6IFtdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50IC8+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiAnZ3JvdXAnLFxuICAgICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6ICdzbGlkZScsXG4gICAgJ1tjbGFzc10nOiAnY2xhc3MoKScsXG4gIH0sXG4gIHN0eWxlczogYGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Nhcm91c2VsSXRlbSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2NDYXJvdXNlbCA9IGluamVjdChTY0Nhcm91c2VsKTtcblxuICByZWFkb25seSBjbGFzc0lucHV0ID0gaW5wdXQ8c3RyaW5nPignJywge1xuICAgIGFsaWFzOiAnY2xhc3MnLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2xhc3MgPSBjb21wdXRlZCgoKSA9PlxuICAgIGNuKFxuICAgICAgJ21pbi13LTAgc2hyaW5rLTAgZ3Jvdy0wIGJhc2lzLWZ1bGwnLFxuICAgICAgdGhpcy5zY0Nhcm91c2VsLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJyA/ICdwbC00JyA6ICdwdC00JyxcbiAgICAgIHRoaXMuY2xhc3NJbnB1dCgpLFxuICAgICksXG4gICk7XG59XG4iXX0=","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, linkedSignal, } from '@angular/core';\nimport { ScButtonBase, buttonVariants } from '@semantic-components/ui';\nimport { cn } from '@semantic-components/utils';\nimport { ScCarousel } from './carousel';\nimport * as i0 from \"@angular/core\";\nexport class ScCarouselPrevious extends ScButtonBase {\n scCarousel = inject(ScCarousel);\n variantInput = input('outline');\n sizeInput = input('icon');\n class = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), 'absolute h-8 w-8 rounded-full', this.scCarousel.orientation() === 'horizontal'\n ? '-left-12 top-1/2 -translate-y-1/2'\n : '-top-12 left-1/2 -translate-x-1/2 rotate-90', this.classInput()));\n disabled = linkedSignal(() => {\n return !this.scCarousel.canScrollPrev();\n });\n scrollPrev() {\n this.scCarousel.api.scrollPrev();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselPrevious, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarouselPrevious, isStandalone: true, selector: \"button[sc-carousel-previous]\", inputs: { variantInput: { classPropertyName: \"variantInput\", publicName: \"variantInput\", isSignal: true, isRequired: false, transformFunction: null }, sizeInput: { classPropertyName: \"sizeInput\", publicName: \"sizeInput\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"click\": \"scrollPrev()\" } }, usesInheritance: true, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselPrevious, decorators: [{\n type: Component,\n args: [{ selector: 'button[sc-carousel-previous]', imports: [], template: `\n <ng-content />\n `, host: {\n '(click)': 'scrollPrev()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtcHJldmlvdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhcm91c2VsL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwtcHJldmlvdXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWtCLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFleEMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFlBQVk7SUFDakMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUvQixZQUFZLEdBQUcsS0FBSyxDQUE0QixTQUFTLENBQUMsQ0FBQztJQUUzRCxTQUFTLEdBQUcsS0FBSyxDQUF5QixNQUFNLENBQUMsQ0FBQztJQUV4QyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUNoRCxFQUFFLENBQ0EsY0FBYyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFDOUQsK0JBQStCLEVBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEtBQUssWUFBWTtRQUM1QyxDQUFDLENBQUMsbUNBQW1DO1FBQ3JDLENBQUMsQ0FBQyw2Q0FBNkMsRUFDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUNsQixDQUNGLENBQUM7SUFFMEIsUUFBUSxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUU7UUFDdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFFTyxVQUFVO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25DLENBQUM7dUdBeEJVLGtCQUFrQjsyRkFBbEIsa0JBQWtCLDhiQVZuQjs7R0FFVDs7MkZBUVUsa0JBQWtCO2tCQWI5QixTQUFTOytCQUNFLDhCQUE4QixXQUMvQixFQUFFLFlBQ0Q7O0dBRVQsUUFDSzt3QkFDSixTQUFTLEVBQUUsY0FBYztxQkFDMUIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQnV0dG9uVmFyaWFudHMsIFNjQnV0dG9uQmFzZSwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAc2VtYW50aWMtY29tcG9uZW50cy91aSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJ0BzZW1hbnRpYy1jb21wb25lbnRzL3V0aWxzJztcblxuaW1wb3J0IHsgU2NDYXJvdXNlbCB9IGZyb20gJy4vY2Fyb3VzZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdidXR0b25bc2MtY2Fyb3VzZWwtcHJldmlvdXNdJyxcbiAgaW1wb3J0czogW10sXG4gIHRlbXBsYXRlOiBgXG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgYCxcbiAgaG9zdDoge1xuICAgICcoY2xpY2spJzogJ3Njcm9sbFByZXYoKScsXG4gIH0sXG4gIHN0eWxlczogYGAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0Nhcm91c2VsUHJldmlvdXMgZXh0ZW5kcyBTY0J1dHRvbkJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHNjQ2Fyb3VzZWwgPSBpbmplY3QoU2NDYXJvdXNlbCk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgdmFyaWFudElucHV0ID0gaW5wdXQ8QnV0dG9uVmFyaWFudHNbJ3ZhcmlhbnQnXT4oJ291dGxpbmUnKTtcblxuICBvdmVycmlkZSByZWFkb25seSBzaXplSW5wdXQgPSBpbnB1dDxCdXR0b25WYXJpYW50c1snc2l6ZSddPignaWNvbicpO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBjbGFzcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgY24oXG4gICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IHRoaXMudmFyaWFudCgpLCBzaXplOiB0aGlzLnNpemUoKSB9KSxcbiAgICAgICdhYnNvbHV0ZSBoLTggdy04IHJvdW5kZWQtZnVsbCcsXG4gICAgICB0aGlzLnNjQ2Fyb3VzZWwub3JpZW50YXRpb24oKSA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgID8gJy1sZWZ0LTEyIHRvcC0xLzIgLXRyYW5zbGF0ZS15LTEvMidcbiAgICAgICAgOiAnLXRvcC0xMiBsZWZ0LTEvMiAtdHJhbnNsYXRlLXgtMS8yIHJvdGF0ZS05MCcsXG4gICAgICB0aGlzLmNsYXNzSW5wdXQoKSxcbiAgICApLFxuICApO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBkaXNhYmxlZCA9IGxpbmtlZFNpZ25hbCgoKSA9PiB7XG4gICAgcmV0dXJuICF0aGlzLnNjQ2Fyb3VzZWwuY2FuU2Nyb2xsUHJldigpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgc2Nyb2xsUHJldigpIHtcbiAgICB0aGlzLnNjQ2Fyb3VzZWwuYXBpLnNjcm9sbFByZXYoKTtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input, linkedSignal, } from '@angular/core';\nimport { ScButtonBase, buttonVariants } from '@semantic-components/ui';\nimport { cn } from '@semantic-components/utils';\nimport { ScCarousel } from './carousel';\nimport * as i0 from \"@angular/core\";\nexport class ScCarouselNext extends ScButtonBase {\n scCarousel = inject(ScCarousel);\n variantInput = input('outline');\n sizeInput = input('icon');\n class = computed(() => cn(buttonVariants({ variant: this.variant(), size: this.size() }), 'absolute h-8 w-8 rounded-full', this.scCarousel.orientation() === 'horizontal'\n ? '-right-12 top-1/2 -translate-y-1/2'\n : '-bottom-12 left-1/2 -translate-x-1/2 rotate-90', this.classInput()));\n disabled = linkedSignal(() => {\n return !this.scCarousel.canScrollNext();\n });\n scrollNext() {\n this.scCarousel.api.scrollNext();\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselNext, deps: null, target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.0.4\", type: ScCarouselNext, isStandalone: true, selector: \"button[sc-carousel-next]\", inputs: { variantInput: { classPropertyName: \"variantInput\", publicName: \"variantInput\", isSignal: true, isRequired: false, transformFunction: null }, sizeInput: { classPropertyName: \"sizeInput\", publicName: \"sizeInput\", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { \"click\": \"scrollNext()\" } }, usesInheritance: true, ngImport: i0, template: `\n <ng-content />\n `, isInline: true, styles: [\"\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: ScCarouselNext, decorators: [{\n type: Component,\n args: [{ selector: 'button[sc-carousel-next]', imports: [], template: `\n <ng-content />\n `, host: {\n '(click)': 'scrollNext()',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwtbmV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fyb3VzZWwvc3JjL2xpYi9jYXJvdXNlbC9jYXJvdXNlbC1uZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGlCQUFpQixFQUNqQixRQUFRLEVBQ1IsTUFBTSxFQUNOLEtBQUssRUFDTCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFrQixZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkYsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBZXhDLE1BQU0sT0FBTyxjQUFlLFNBQVEsWUFBWTtJQUM3QixVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRS9CLFlBQVksR0FBRyxLQUFLLENBQTRCLFNBQVMsQ0FBQyxDQUFDO0lBRTNELFNBQVMsR0FBRyxLQUFLLENBQXlCLE1BQU0sQ0FBQyxDQUFDO0lBRXhDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2hELEVBQUUsQ0FDQSxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUM5RCwrQkFBK0IsRUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxZQUFZO1FBQzVDLENBQUMsQ0FBQyxvQ0FBb0M7UUFDdEMsQ0FBQyxDQUFDLGdEQUFnRCxFQUNwRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQ0YsQ0FBQztJQUUwQixRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRTtRQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVPLFVBQVU7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQzt1R0F4QlUsY0FBYzsyRkFBZCxjQUFjLDBiQVZmOztHQUVUOzsyRkFRVSxjQUFjO2tCQWIxQixTQUFTOytCQUNFLDBCQUEwQixXQUMzQixFQUFFLFlBQ0Q7O0dBRVQsUUFDSzt3QkFDSixTQUFTLEVBQUUsY0FBYztxQkFDMUIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgbGlua2VkU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQnV0dG9uVmFyaWFudHMsIFNjQnV0dG9uQmFzZSwgYnV0dG9uVmFyaWFudHMgfSBmcm9tICdAc2VtYW50aWMtY29tcG9uZW50cy91aSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJ0BzZW1hbnRpYy1jb21wb25lbnRzL3V0aWxzJztcblxuaW1wb3J0IHsgU2NDYXJvdXNlbCB9IGZyb20gJy4vY2Fyb3VzZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdidXR0b25bc2MtY2Fyb3VzZWwtbmV4dF0nLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudCAvPlxuICBgLFxuICBob3N0OiB7XG4gICAgJyhjbGljayknOiAnc2Nyb2xsTmV4dCgpJyxcbiAgfSxcbiAgc3R5bGVzOiBgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjQ2Fyb3VzZWxOZXh0IGV4dGVuZHMgU2NCdXR0b25CYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzY0Nhcm91c2VsID0gaW5qZWN0KFNjQ2Fyb3VzZWwpO1xuXG4gIG92ZXJyaWRlIHJlYWRvbmx5IHZhcmlhbnRJbnB1dCA9IGlucHV0PEJ1dHRvblZhcmlhbnRzWyd2YXJpYW50J10+KCdvdXRsaW5lJyk7XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkgc2l6ZUlucHV0ID0gaW5wdXQ8QnV0dG9uVmFyaWFudHNbJ3NpemUnXT4oJ2ljb24nKTtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgY2xhc3MgPSBjb21wdXRlZCgoKSA9PlxuICAgIGNuKFxuICAgICAgYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQoKSwgc2l6ZTogdGhpcy5zaXplKCkgfSksXG4gICAgICAnYWJzb2x1dGUgaC04IHctOCByb3VuZGVkLWZ1bGwnLFxuICAgICAgdGhpcy5zY0Nhcm91c2VsLm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/ICctcmlnaHQtMTIgdG9wLTEvMiAtdHJhbnNsYXRlLXktMS8yJ1xuICAgICAgICA6ICctYm90dG9tLTEyIGxlZnQtMS8yIC10cmFuc2xhdGUteC0xLzIgcm90YXRlLTkwJyxcbiAgICAgIHRoaXMuY2xhc3NJbnB1dCgpLFxuICAgICksXG4gICk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlYWRvbmx5IGRpc2FibGVkID0gbGlua2VkU2lnbmFsKCgpID0+IHtcbiAgICByZXR1cm4gIXRoaXMuc2NDYXJvdXNlbC5jYW5TY3JvbGxOZXh0KCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBzY3JvbGxOZXh0KCkge1xuICAgIHRoaXMuc2NDYXJvdXNlbC5hcGkuc2Nyb2xsTmV4dCgpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtYW50aWMtY29tcG9uZW50cy1jYXJvdXNlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvY2Fyb3VzZWwvc3JjL3NlbWFudGljLWNvbXBvbmVudHMtY2Fyb3VzZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
package/index.d.ts DELETED
@@ -1,76 +0,0 @@
1
- import * as embla_carousel from 'embla-carousel';
2
- import { EmblaCarouselType } from 'embla-carousel';
3
- import * as node_modules_embla_carousel_esm_components_Plugins from 'node_modules/embla-carousel/esm/components/Plugins';
4
- import * as node_modules_embla_carousel_esm_components_Options from 'node_modules/embla-carousel/esm/components/Options';
5
- import * as _angular_core from '@angular/core';
6
- import { OnDestroy } from '@angular/core';
7
- import { ScButtonBase } from '@semantic-components/ui';
8
-
9
- declare class ScCarousel implements OnDestroy {
10
- private readonly host;
11
- readonly classInput: _angular_core.InputSignal<string>;
12
- protected readonly class: _angular_core.Signal<string>;
13
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
14
- readonly optionsInput: _angular_core.InputSignal<Partial<node_modules_embla_carousel_esm_components_Options.OptionsType>>;
15
- readonly options: _angular_core.Signal<Partial<node_modules_embla_carousel_esm_components_Options.OptionsType>>;
16
- readonly plugins: _angular_core.InputSignal<embla_carousel.CreatePluginType<node_modules_embla_carousel_esm_components_Plugins.LoosePluginType, {}>[]>;
17
- readonly canScrollPrev: _angular_core.WritableSignal<boolean>;
18
- readonly canScrollNext: _angular_core.WritableSignal<boolean>;
19
- private emblaApi;
20
- get api(): EmblaCarouselType;
21
- constructor();
22
- togglePrevNextBtnsState: () => void;
23
- handleKeydown(event: KeyboardEvent): void;
24
- private scrollPrev;
25
- private scrollNext;
26
- ngOnDestroy(): void;
27
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarousel, never>;
28
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarousel, "div[sc-carousel]", never, { "classInput": { "alias": "class"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "plugins": { "alias": "plugins"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
29
- }
30
-
31
- declare class ScCarouselContainer {
32
- readonly classInput: _angular_core.InputSignal<string>;
33
- protected readonly class: _angular_core.Signal<string>;
34
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarouselContainer, never>;
35
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarouselContainer, "div[sc-carousel-container]", never, { "classInput": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
36
- }
37
-
38
- declare class ScCarouselItems {
39
- private readonly scCarousel;
40
- readonly classInput: _angular_core.InputSignal<string>;
41
- protected readonly class: _angular_core.Signal<string>;
42
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarouselItems, never>;
43
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarouselItems, "div[sc-carousel-items]", never, { "classInput": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
44
- }
45
-
46
- declare class ScCarouselItem {
47
- private readonly scCarousel;
48
- readonly classInput: _angular_core.InputSignal<string>;
49
- protected readonly class: _angular_core.Signal<string>;
50
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarouselItem, never>;
51
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarouselItem, "div[sc-carousel-item]", never, { "classInput": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
52
- }
53
-
54
- declare class ScCarouselPrevious extends ScButtonBase {
55
- private readonly scCarousel;
56
- readonly variantInput: _angular_core.InputSignal<"primary" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined>;
57
- readonly sizeInput: _angular_core.InputSignal<"default" | "sm" | "lg" | "icon" | null | undefined>;
58
- protected readonly class: _angular_core.Signal<string>;
59
- protected readonly disabled: _angular_core.WritableSignal<boolean>;
60
- protected scrollPrev(): void;
61
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarouselPrevious, never>;
62
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarouselPrevious, "button[sc-carousel-previous]", never, { "variantInput": { "alias": "variantInput"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "sizeInput"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
63
- }
64
-
65
- declare class ScCarouselNext extends ScButtonBase {
66
- private readonly scCarousel;
67
- readonly variantInput: _angular_core.InputSignal<"primary" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined>;
68
- readonly sizeInput: _angular_core.InputSignal<"default" | "sm" | "lg" | "icon" | null | undefined>;
69
- protected readonly class: _angular_core.Signal<string>;
70
- protected readonly disabled: _angular_core.WritableSignal<boolean>;
71
- protected scrollNext(): void;
72
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScCarouselNext, never>;
73
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScCarouselNext, "button[sc-carousel-next]", never, { "variantInput": { "alias": "variantInput"; "required": false; "isSignal": true; }; "sizeInput": { "alias": "sizeInput"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
74
- }
75
-
76
- export { ScCarousel, ScCarouselContainer, ScCarouselItem, ScCarouselItems, ScCarouselNext, ScCarouselPrevious };