@semantic-components/carousel 0.4.0 → 0.62.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 +10 -4
- package/eslint.config.mjs +48 -0
- package/ng-package.json +7 -0
- package/package.json +8 -23
- package/project.json +28 -0
- package/src/index.ts +1 -0
- package/src/lib/components/carousel/README.md +342 -0
- package/src/lib/components/carousel/carousel-item.ts +27 -0
- package/src/lib/components/carousel/carousel-next.ts +46 -0
- package/src/lib/components/carousel/carousel-previous.ts +46 -0
- package/src/lib/components/carousel/carousel-track.ts +25 -0
- package/src/lib/components/carousel/carousel-viewport.ts +34 -0
- package/src/lib/components/carousel/carousel.ts +104 -0
- package/src/lib/components/carousel/index.ts +12 -0
- package/src/lib/components/index.ts +1 -0
- package/tsconfig.json +28 -0
- package/tsconfig.lib.json +12 -0
- package/tsconfig.lib.prod.json +7 -0
- package/fesm2022/semantic-components-carousel.mjs +0 -210
- package/fesm2022/semantic-components-carousel.mjs.map +0 -1
- package/index.d.ts +0 -76
package/README.md
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
# carousel
|
|
1
|
+
# @semantic-components/carousel
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Carousel components built on top of Embla Carousel for the Semantic Components library.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Contents
|
|
6
6
|
|
|
7
|
-
|
|
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
|
+
];
|
package/ng-package.json
ADDED
package/package.json
CHANGED
|
@@ -1,36 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semantic-components/carousel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"author": "Khalil LAGRIDA",
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"peerDependencies": {
|
|
11
|
-
"@angular/core": ">=19.0.0",
|
|
12
|
-
"@semantic-components/utils": "0.46.0",
|
|
13
|
-
"embla-carousel": "^8.6.0",
|
|
14
|
-
"@semantic-components/ui": "0.57.0"
|
|
15
|
-
},
|
|
16
10
|
"repository": {
|
|
17
11
|
"type": "git",
|
|
18
|
-
"url": "https://github.com/
|
|
12
|
+
"url": "https://github.com/gridatek/semantic-components",
|
|
19
13
|
"directory": "libs/carousel"
|
|
20
14
|
},
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"./package.json": {
|
|
26
|
-
"default": "./package.json"
|
|
27
|
-
},
|
|
28
|
-
".": {
|
|
29
|
-
"types": "./index.d.ts",
|
|
30
|
-
"default": "./fesm2022/semantic-components-carousel.mjs"
|
|
31
|
-
}
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"@angular/core": ">=21.1.0",
|
|
17
|
+
"@semantic-components/ui": "0.62.0",
|
|
18
|
+
"embla-carousel": ">=8.6.0"
|
|
32
19
|
},
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
}
|
|
20
|
+
"sideEffects": false
|
|
21
|
+
}
|
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
|
+
}
|
|
@@ -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 };
|