@rcarls/rc-carousel 0.1.0 → 0.7.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/CHANGELOG.md ADDED
@@ -0,0 +1,148 @@
1
+ # @rcarls/rc-carousel
2
+
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 54d9ead: Localize every component's built-in text. Button names, role
8
+ descriptions, announcements, and default labels now resolve per key from
9
+ the element's `messages` property, then from text registered with
10
+ `registerMessages(locale, catalog)` in `@rcarls/rc-common`, then from the
11
+ English defaults. The locale is the element's own `lang`, else
12
+ `<html lang>`; an ancestor's `lang` is ignored, because it usually marks
13
+ content rather than the interface. Components re-render when that locale
14
+ changes or new text is registered. `RcMessageCatalog` types the catalog,
15
+ and each package adds its scope to it.
16
+
17
+ Numbers a component formats as text follow the same locale:
18
+ `rc-progress`'s default percentage and `rc-splitter`'s `aria-valuetext`
19
+ use `Intl.NumberFormat`. `TypeaheadController` matches prefixes with an
20
+ `Intl.Collator`, so case and accents are ignored the way the locale
21
+ ignores them, and takes a `locale` option. `ItemsCollectionController`'s
22
+ `setCreateOption(text, label?)` takes the option's visible text from its
23
+ caller.
24
+
25
+ `rc-transfer-list`'s direction arrows are now decorative: screen readers
26
+ read only the action name, and the arrows turn over in RTL.
27
+
28
+ **Breaking:** chrome-text properties are replaced by `messages`. Migrate:
29
+
30
+ - `rc-search-bar` `clear-label` / `clearLabel` → `messages.clear`
31
+ - `rc-adaptive-menu` `overflow-label` / `overflowLabel` → `messages.overflow`
32
+ - `rc-chip-group` `show-all-label` / `showAllLabel` and `show-less-label` /
33
+ `showLessLabel` → `messages.showAll` and `messages.showLess`
34
+ - `rc-select` and `rc-combobox` `dialog-confirm-label` /
35
+ `dialogConfirmLabel` and `dialog-cancel-label` / `dialogCancelLabel` →
36
+ `messages.done` and `messages.cancel`
37
+ - `rc-editor-toolbar` `label` → `messages.toolbar`
38
+
39
+ Per-instance names stay attributes, but now default to `undefined` and fall
40
+ back to a message: `label` on `rc-adaptive-menu`, `rc-chip-group`,
41
+ `rc-menubar`, and `rc-splitter`; `available-label` and `selected-label`
42
+ on `rc-transfer-list`; `low-label` and `high-label` on `rc-range-slider`.
43
+ Read the resolved name from the rendered `aria-label` instead of the
44
+ property.
45
+
46
+ ### Patch Changes
47
+
48
+ - 5c006de: Ship component CSS minified. Package builds now run the CSS in Lit `css` styles
49
+ and light-DOM structural styles through Lightning CSS, removing comments and
50
+ whitespace while keeping source maps that resolve to each template. Rendered
51
+ styles are unchanged.
52
+
53
+ `@rcarls/rc-common` adds `cssText`, an identity tag that marks a plain CSS
54
+ string for minification. `rc-chip`, `rc-disclosure`, and `rc-accordion` now
55
+ depend on `@rcarls/rc-common` for it.
56
+
57
+ - 011f3c6: Keep combobox chips clear of their trailing toggle, reset native selects inside
58
+ `rc-field`, keep controlled carousel accessibility state synchronized, and align
59
+ Material chips, menus, lists, disclosures, nested editors, and bottom-sheet
60
+ motion with their MD3 defaults.
61
+ - a6553ff: Batch layout sampling into a shared animation-frame read phase so mounting a
62
+ large component route no longer alternates forced layout reads with component
63
+ writes. Closed anchored popups now skip placement work until they open, while
64
+ scroller boundaries, carousel positioning, flow state, and opted-in initial
65
+ scroll observation settle before the next paint.
66
+
67
+ Add `RafScheduler.schedulePhased()`, live `AnchorController.disabled` getters,
68
+ and the `ScrollObserverController.initialEvaluation` timing option.
69
+
70
+ - b764a3c: Observe interface locale changes through containing shadow roots and the host's own document.
71
+ An explicit empty `lang` now means an unknown locale rather than falling back to `<html lang>`.
72
+ Typeahead compares complete grapheme prefixes, including decomposed accents and collation
73
+ expansions. Default interpolating messages format numeric positions in the interface locale
74
+ while translation callbacks continue to receive numbers and can accept an optional locale.
75
+ Default messages isolate consumer text whose direction is unknown. Textarea content direction
76
+ uses the native LTR fallback for neutral `dir="auto"` content, recognizes Arabic Letter Mark and
77
+ isolate controls, and reruns plugins when the native textarea's `lang` or `dir` changes.
78
+ - 98628f7: Resolve the writing direction when a mouse drag starts, before the drag
79
+ axis is chosen, so a carousel whose writing mode changed since its last
80
+ scroll drags along its new inline axis on the first try. Touch and pen
81
+ input keep native scrolling.
82
+ - ca309b6: Scroll, snap, and drag the track along the inline axis in logical terms, so
83
+ navigation, swipe settling, and mouse dragging work in RTL and in vertical
84
+ writing modes. Previously every slide index mapped to the wrong scroll
85
+ position in RTL, where the track's scroll offset runs negative. The
86
+ built-in previous and next chevrons also mirror in RTL.
87
+ - Updated dependencies [e3dfa59]
88
+ - Updated dependencies [50d5610]
89
+ - Updated dependencies [9ee769c]
90
+ - Updated dependencies [1179f24]
91
+ - Updated dependencies [595fe37]
92
+ - Updated dependencies [38cd00c]
93
+ - Updated dependencies [5c006de]
94
+ - Updated dependencies [a6553ff]
95
+ - Updated dependencies [2205478]
96
+ - Updated dependencies [4341311]
97
+ - Updated dependencies [899bb5e]
98
+ - Updated dependencies [25fcfe0]
99
+ - Updated dependencies [51f6403]
100
+ - Updated dependencies [9caca6b]
101
+ - Updated dependencies [b764a3c]
102
+ - Updated dependencies [54d9ead]
103
+ - Updated dependencies [b9175e9]
104
+ - Updated dependencies [c8b762b]
105
+ - Updated dependencies [55e1e7f]
106
+ - Updated dependencies [f1ca82d]
107
+ - Updated dependencies [b87f27b]
108
+ - Updated dependencies [32ebead]
109
+ - Updated dependencies [bfefedd]
110
+ - Updated dependencies [c130173]
111
+ - Updated dependencies [11680b6]
112
+ - Updated dependencies [223d36c]
113
+ - Updated dependencies [7b91a44]
114
+ - Updated dependencies [aa04ead]
115
+ - Updated dependencies [ac65b5b]
116
+ - Updated dependencies [afcfef8]
117
+ - Updated dependencies [11ef1ad]
118
+ - @rcarls/rc-common@0.7.0
119
+
120
+ ## 0.6.0
121
+
122
+ ### Minor Changes
123
+
124
+ - b639e04: Add coordinated list and list-item layout tokens so container queries can
125
+ stack unchanged content regions while preserving shared subgrid alignment.
126
+
127
+ Breaking for the pre-1.0 carousel API: remove the redundant
128
+ `variant="hero|multi-browse"` attribute and property. The variant only
129
+ changed slide geometry, which is already controlled by
130
+ `--rc-carousel-slide-size`. Remove `variant="hero"` without replacement;
131
+ replace `variant="multi-browse"` with
132
+ `--rc-carousel-slide-size: min(75%, 300px)`.
133
+
134
+ - 40f9776: Add an APG carousel built on native CSS scroll snap, with optional navigation,
135
+ pagination, mouse dragging, looping, and consumer-controlled slide sizing.
136
+ Preserve controlled active-index behavior after rejected swipes, keep visual
137
+ loop clones inert and out of forms, and degrade safely without intersection
138
+ observation.
139
+
140
+ ### Patch Changes
141
+
142
+ - e0de31d: Avoid scheduling a redundant carousel update during the initial Lit lifecycle
143
+ while retaining initial pagination and dynamic slide synchronization.
144
+ - 7adbd76: Keep development diagnostics concise and prevent expected test fixtures from emitting noisy warnings.
145
+ - Updated dependencies [6683eb9]
146
+ - Updated dependencies [ee7ba6c]
147
+ - Updated dependencies [30eb232]
148
+ - @rcarls/rc-common@0.6.0
package/README.md CHANGED
@@ -36,3 +36,11 @@ for the complete API, accessibility notes, and live demo.
36
36
  Import `@rcarls/rc-carousel` to use the classes without registering them, or
37
37
  import `@rcarls/rc-carousel/define` to register `<rc-carousel>` and
38
38
  `<rc-carousel-item>`.
39
+
40
+ ## Localization
41
+
42
+ Built-in text follows the element's own `lang`, else `<html lang>`, and never an
43
+ ancestor's `lang`, which usually marks content. Override it per element with the
44
+ `messages` property, or for every instance with `registerMessages()` from
45
+ `@rcarls/rc-common` under `rc-carousel`. Keys: `carousel`, `slide`, `position`, `previous`, `next`, `picker`, `goToSlide`. See the
46
+ [rc-common Localization section](https://github.com/richardcarls/rc-webcomponents/tree/develop/packages/rc-common#localization).
@@ -125,6 +125,33 @@
125
125
  "default": "''",
126
126
  "description": "\"N of M\" position assigned by the parent `rc-carousel`. Internal\nintegration point, not a public API — see the `@attr` note above."
127
127
  },
128
+ {
129
+ "kind": "field",
130
+ "name": "roleDescription",
131
+ "type": {
132
+ "text": "string"
133
+ },
134
+ "default": "'slide'",
135
+ "description": "`aria-roledescription` assigned by the parent `rc-carousel` in its\nlocale. Internal integration point, not a public API."
136
+ },
137
+ {
138
+ "kind": "field",
139
+ "name": "_writtenLabel",
140
+ "type": {
141
+ "text": "string | null"
142
+ },
143
+ "privacy": "private",
144
+ "default": "null"
145
+ },
146
+ {
147
+ "kind": "field",
148
+ "name": "_writtenRoleDescription",
149
+ "type": {
150
+ "text": "string | null"
151
+ },
152
+ "privacy": "private",
153
+ "default": "null"
154
+ },
128
155
  {
129
156
  "kind": "method",
130
157
  "name": "_syncDefaultLabel",
@@ -135,6 +162,16 @@
135
162
  }
136
163
  }
137
164
  },
165
+ {
166
+ "kind": "method",
167
+ "name": "_syncRoleDescription",
168
+ "privacy": "private",
169
+ "return": {
170
+ "type": {
171
+ "text": "void"
172
+ }
173
+ }
174
+ },
138
175
  {
139
176
  "kind": "method",
140
177
  "name": "_observeIntersection",
@@ -178,6 +215,13 @@
178
215
  "kind": "javascript-module",
179
216
  "path": "src/rc-carousel.ts",
180
217
  "declarations": [
218
+ {
219
+ "kind": "variable",
220
+ "name": "DEFAULT_CAROUSEL_MESSAGES",
221
+ "type": {
222
+ "text": "Readonly<RCCarouselMessages>"
223
+ }
224
+ },
181
225
  {
182
226
  "kind": "class",
183
227
  "description": "WAI-ARIA APG carousel pattern built on native CSS scroll-snap. One\n`rc-carousel-item` per slide, swiped or paged between; the track's own\nnative scroll-snap settling (not a hand-rolled drag simulation) is the\nprimary interaction, per this monorepo's \"build on native browser\nbehavior\" principle.\n\n`activeIndex` is a controlled/uncontrolled property, mirroring\n`rc-adaptive-menu`'s `open`/`defaultOpen` pair: leave it unset for\nuncontrolled usage (`default-active-index` seeds the initial slide),\nor set it directly to drive the carousel externally — a settle from\nswipe, a keyboard action, or the imperative API all report back through\n`rc-carousel-change` rather than silently self-correcting a controlled\nvalue out from under the consumer.\n\nPrevious/next navigation and a slide picker are both opt-in\n(`navigation`/`pagination`), following the WAI-ARIA APG carousel\npattern's \"grouped\" (non-tab) picker style deliberately: the tabbed\n`role=\"tabpanel\"` variant requires cross-references between light-DOM\nslides and shadow-DOM tab buttons that, in comparable shadow-DOM\ncarousels, has hit real accessibility-tooling failures across the\nshadow boundary (including non-recognition by some screen readers\nentirely). `loop` wraps seamlessly via cloned lead/trail slides rather\nthan a discontinuous jump back to the other end.",
@@ -361,6 +405,37 @@
361
405
  },
362
406
  "privacy": "private"
363
407
  },
408
+ {
409
+ "kind": "field",
410
+ "name": "_initialPosition",
411
+ "privacy": "private",
412
+ "readonly": true,
413
+ "default": "new RafScheduler(this)"
414
+ },
415
+ {
416
+ "kind": "field",
417
+ "name": "_writtenRoleDescription",
418
+ "type": {
419
+ "text": "string | null"
420
+ },
421
+ "privacy": "private",
422
+ "default": "null"
423
+ },
424
+ {
425
+ "kind": "field",
426
+ "name": "_messages",
427
+ "privacy": "private",
428
+ "readonly": true,
429
+ "default": "new MessagesController( this, 'rc-carousel', DEFAULT_CAROUSEL_MESSAGES, { overrides: () => this.messages, }, )"
430
+ },
431
+ {
432
+ "kind": "field",
433
+ "name": "messages",
434
+ "type": {
435
+ "text": "Partial<RCCarouselMessages> | undefined"
436
+ },
437
+ "description": "Built-in text overrides; unset keys fall back to registered text, then English."
438
+ },
364
439
  {
365
440
  "kind": "field",
366
441
  "name": "loop",
@@ -416,12 +491,32 @@
416
491
  },
417
492
  {
418
493
  "kind": "field",
419
- "name": "_dragStartLeft",
494
+ "name": "_dragStartOffset",
420
495
  "type": {
421
496
  "text": "number"
422
497
  },
423
498
  "privacy": "private",
424
- "default": "0"
499
+ "default": "0",
500
+ "description": "Logical inline scroll offset of the track when the current drag began."
501
+ },
502
+ {
503
+ "kind": "field",
504
+ "name": "_flow",
505
+ "type": {
506
+ "text": "Flow"
507
+ },
508
+ "privacy": "private",
509
+ "default": "HORIZONTAL_LTR_FLOW",
510
+ "description": "Track flow, re-resolved at the start of each drag or scroll operation."
511
+ },
512
+ {
513
+ "kind": "field",
514
+ "name": "_dragAxis",
515
+ "type": {
516
+ "text": "'x' | 'y'"
517
+ },
518
+ "privacy": "private",
519
+ "default": "'x'"
425
520
  },
426
521
  {
427
522
  "kind": "field",
@@ -437,8 +532,8 @@
437
532
  "name": "_dragController",
438
533
  "privacy": "protected",
439
534
  "readonly": true,
440
- "default": "new DragGestureController(this, { target: () => this._trackEl ?? null, axis: 'x', activation: 'axis', canStart: (event) => this.mouseDragging && event.pointerType === 'mouse', onStart: () => { this._dragging = true; this._dragStartLeft = this._trackEl?.scrollLeft ?? 0; this._suppressNextClick = true; // Imperative, not reactive-class-driven: this must land before // onMove's very first scrollLeft write below, and a Lit re-render // (triggered by _dragging above) is a whole render pass too late for // that — with scroll-snap-type still active, the browser eagerly // resnaps a plain scrollLeft assignment straight back to the // nearest snap point, same as it would any other programmatic // scroll with no notion this is \"mid-gesture\". if (this._trackEl) { this._trackEl.style.scrollSnapType = 'none'; } }, onMove: (detail) => { if (this._trackEl) { this._trackEl.scrollLeft = this._dragStartLeft - detail.deltaX; } }, onEnd: (detail) => this._endDrag(detail), onCancel: (detail) => this._endDrag(detail), })",
441
- "description": "Drives `scrollLeft` directly from pointer deltas while `mouseDragging`\nis on. `activation: 'axis'` (not `'immediate'`) means a plain click\nnever activates a drag at all — it requires clearing\n`activationDistance` (8px) of movement first — but a *real* drag still\nends in a native `click` on release, on whatever's under the pointer,\nwhich `_suppressNextClick` swallows so dragging across an unrelated\nlink or button inside a slide doesn't activate it (the same edge case\nShoelace's own `sl-carousel` handles for exactly this reason)."
535
+ "default": "new DragGestureController(this, { target: () => this._trackEl ?? null, axis: 'x', activation: 'axis', canStart: (event) => { if (!this.mouseDragging || event.pointerType !== 'mouse') { return false; } // Resolve on pointerdown, before the controller picks the drag axis // from the first moves; the flow then holds for the whole gesture. this._resolveFlow(); return true; }, onStart: () => { this._dragging = true; this._dragStartOffset = this._trackOffset(); this._suppressNextClick = true; // Imperative, not reactive-class-driven: this must land before // onMove's very first scroll offset write below, and a Lit re-render // (triggered by _dragging above) is a whole render pass too late for // that — with scroll-snap-type still active, the browser eagerly // resnaps a plain scroll offset assignment straight back to the // nearest snap point, same as it would any other programmatic // scroll with no notion this is \"mid-gesture\". if (this._trackEl) { this._trackEl.style.scrollSnapType = 'none'; } }, onMove: (detail) => { // Dragging toward the inline end drags content with it, which scrolls // back toward the start, hence the subtraction. Projecting through the // flow makes that hold in RTL and in vertical writing modes. this._setTrackOffset( this._dragStartOffset - logicalDelta({ dx: detail.deltaX, dy: detail.deltaY }, 'inline', this._flow), ); }, onEnd: (detail) => this._endDrag(detail), onCancel: (detail) => this._endDrag(detail), })",
536
+ "description": "Drives the track's scroll offset directly from pointer deltas while `mouseDragging`\nis on. `activation: 'axis'` (not `'immediate'`) means a plain click\nnever activates a drag at all — it requires clearing\n`activationDistance` (8px) of movement first — but a *real* drag still\nends in a native `click` on release, on whatever's under the pointer,\nwhich `_suppressNextClick` swallows so dragging across an unrelated\nlink or button inside a slide doesn't activate it (the same edge case\nShoelace's own `sl-carousel` handles for exactly this reason)."
442
537
  },
443
538
  {
444
539
  "kind": "field",
@@ -633,6 +728,12 @@
633
728
  "text": "{ point: number; index: number; isClone: boolean }[]"
634
729
  }
635
730
  },
731
+ "parameters": [
732
+ {
733
+ "name": "step",
734
+ "default": "this._itemStep()"
735
+ }
736
+ ],
636
737
  "description": "Every scrollable track position in rendered order, including cloned\nlead/trail slides when `loop` is on — `[lastClone, item0, ..., itemN-1,\nfirstClone]`. Each slot reports which real slide index it represents\n(a clone mirrors the real slide it duplicates), so both scrolling to\nan index and reading back a settled scroll position can stay in terms\nof real indices while the clones do the seamless-wrap work."
637
738
  },
638
739
  {
@@ -645,6 +746,81 @@
645
746
  }
646
747
  }
647
748
  },
749
+ {
750
+ "kind": "method",
751
+ "name": "_measureTrack",
752
+ "privacy": "private",
753
+ "return": {
754
+ "type": {
755
+ "text": "TrackMeasurement | null"
756
+ }
757
+ }
758
+ },
759
+ {
760
+ "kind": "method",
761
+ "name": "_applyFlow",
762
+ "privacy": "private",
763
+ "return": {
764
+ "type": {
765
+ "text": "void"
766
+ }
767
+ },
768
+ "parameters": [
769
+ {
770
+ "name": "flow",
771
+ "type": {
772
+ "text": "Flow"
773
+ }
774
+ }
775
+ ]
776
+ },
777
+ {
778
+ "kind": "method",
779
+ "name": "_resolveFlow",
780
+ "privacy": "private",
781
+ "return": {
782
+ "type": {
783
+ "text": "Flow"
784
+ }
785
+ },
786
+ "description": "Re-reads the track's writing mode and direction. Called at the start of\neach scroll operation and on each drag's pointerdown rather than cached\nfor the element's life, since neither a `dir` nor a writing-mode change\non an ancestor fires an event. The drag gesture's physical axis follows,\nso a carousel in vertical text drags vertically."
787
+ },
788
+ {
789
+ "kind": "method",
790
+ "name": "_trackOffset",
791
+ "privacy": "private",
792
+ "return": {
793
+ "type": {
794
+ "text": "number"
795
+ }
796
+ },
797
+ "description": "Scroll distance from the track's logical start, never negative."
798
+ },
799
+ {
800
+ "kind": "method",
801
+ "name": "_setTrackOffset",
802
+ "privacy": "private",
803
+ "return": {
804
+ "type": {
805
+ "text": "void"
806
+ }
807
+ },
808
+ "parameters": [
809
+ {
810
+ "name": "offset",
811
+ "type": {
812
+ "text": "number"
813
+ }
814
+ },
815
+ {
816
+ "name": "behavior",
817
+ "default": "'auto'",
818
+ "type": {
819
+ "text": "ScrollBehavior"
820
+ }
821
+ }
822
+ ]
823
+ },
648
824
  {
649
825
  "kind": "method",
650
826
  "name": "_setActiveIndex",
@@ -693,6 +869,63 @@
693
869
  }
694
870
  ]
695
871
  },
872
+ {
873
+ "kind": "method",
874
+ "name": "_queueInitialPosition",
875
+ "privacy": "private",
876
+ "return": {
877
+ "type": {
878
+ "text": "void"
879
+ }
880
+ }
881
+ },
882
+ {
883
+ "kind": "method",
884
+ "name": "_sampleInitialPosition",
885
+ "privacy": "private",
886
+ "return": {
887
+ "type": {
888
+ "text": "InitialPositionSample | null"
889
+ }
890
+ }
891
+ },
892
+ {
893
+ "kind": "method",
894
+ "name": "_applyInitialPosition",
895
+ "privacy": "private",
896
+ "return": {
897
+ "type": {
898
+ "text": "void"
899
+ }
900
+ },
901
+ "parameters": [
902
+ {
903
+ "name": "sample",
904
+ "type": {
905
+ "text": "InitialPositionSample | null"
906
+ }
907
+ }
908
+ ]
909
+ },
910
+ {
911
+ "kind": "method",
912
+ "name": "_syncActiveItemAccessibility",
913
+ "privacy": "private",
914
+ "return": {
915
+ "type": {
916
+ "text": "void"
917
+ }
918
+ },
919
+ "parameters": [
920
+ {
921
+ "name": "index",
922
+ "type": {
923
+ "text": "number"
924
+ }
925
+ }
926
+ ],
927
+ "description": "Keep the authored active slide available to assistive technology even\nbefore a programmatic scroll produces its next intersection callback.\nIntersectionObserver still takes over during direct manipulation, where\nthe visually dominant slide can change before scroll settling updates the\npublic active index."
928
+ },
696
929
  {
697
930
  "kind": "field",
698
931
  "name": "_onSlotChange",
@@ -718,6 +951,17 @@
718
951
  }
719
952
  }
720
953
  },
954
+ {
955
+ "kind": "method",
956
+ "name": "_syncText",
957
+ "privacy": "private",
958
+ "return": {
959
+ "type": {
960
+ "text": "void"
961
+ }
962
+ },
963
+ "description": "Re-applies text written outside the template, for a new locale or `messages`."
964
+ },
721
965
  {
722
966
  "kind": "method",
723
967
  "name": "_syncItems",
@@ -786,7 +1030,7 @@
786
1030
  }
787
1031
  }
788
1032
  ],
789
- "description": "On release, a fast enough flick pre-nudges `scrollLeft` to the next\nsnap point in the drag direction (a \"decisive swipe\" — mirroring\n`rc-bottom-sheet`'s own velocity-vs-nearest-point settle heuristic,\nadapted from \"jump to the extreme end\" for a 2-point sheet to \"advance\none further point\" for a carousel that can have many). Either way,\nthis hands off to the same debounced settle path a native swipe\nalready goes through — our own `scrollLeft` writes during the drag\nalready fired real `scroll` events, so `_onScroll` just needs to run\nits usual timer to pick up wherever things ended."
1033
+ "description": "On release, a fast enough flick pre-nudges the scroll offset to the next\nsnap point in the drag direction (a \"decisive swipe\" — mirroring\n`rc-bottom-sheet`'s own velocity-vs-nearest-point settle heuristic,\nadapted from \"jump to the extreme end\" for a 2-point sheet to \"advance\none further point\" for a carousel that can have many). Either way,\nthis hands off to the same debounced settle path a native swipe\nalready goes through — our own scroll offset writes during the drag\nalready fired real `scroll` events, so `_onScroll` just needs to run\nits usual timer to pick up wherever things ended."
790
1034
  },
791
1035
  {
792
1036
  "kind": "field",
@@ -923,6 +1167,14 @@
923
1167
  }
924
1168
  ],
925
1169
  "exports": [
1170
+ {
1171
+ "kind": "js",
1172
+ "name": "DEFAULT_CAROUSEL_MESSAGES",
1173
+ "declaration": {
1174
+ "name": "DEFAULT_CAROUSEL_MESSAGES",
1175
+ "module": "src/rc-carousel.ts"
1176
+ }
1177
+ },
926
1178
  {
927
1179
  "kind": "js",
928
1180
  "name": "RCCarousel",