@flamingo-stack/openframe-frontend-core 0.0.394-snapshot.20260709183206 → 0.0.394
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/dist/{chunk-ZB5HSWX4.js → chunk-2J6AOHJI.js} +2 -2
- package/dist/{chunk-Y4I4462K.cjs → chunk-4FT3KQD3.cjs} +15 -15
- package/dist/{chunk-Y4I4462K.cjs.map → chunk-4FT3KQD3.cjs.map} +1 -1
- package/dist/{chunk-NN73KMIK.js → chunk-5J3LR56Z.js} +2 -2
- package/dist/{chunk-WHJEU7V7.js → chunk-A7IGCQUD.js} +4 -4
- package/dist/{chunk-PFF6Q6N5.js → chunk-AGTM2H7T.js} +2 -2
- package/dist/{chunk-PJ2YFSMY.js → chunk-AQJ5S6RS.js} +2 -2
- package/dist/{chunk-T6FEE3R2.cjs → chunk-CJMM2WZP.cjs} +5 -5
- package/dist/{chunk-T6FEE3R2.cjs.map → chunk-CJMM2WZP.cjs.map} +1 -1
- package/dist/{chunk-5U72NXGG.cjs → chunk-DFCPMBYN.cjs} +9 -9
- package/dist/{chunk-5U72NXGG.cjs.map → chunk-DFCPMBYN.cjs.map} +1 -1
- package/dist/{chunk-J2UDV3FH.cjs → chunk-DRSAMA27.cjs} +62 -62
- package/dist/{chunk-J2UDV3FH.cjs.map → chunk-DRSAMA27.cjs.map} +1 -1
- package/dist/{chunk-TWLPG5IQ.js → chunk-DXIDOGF4.js} +2 -2
- package/dist/{chunk-3VJPMRNT.cjs → chunk-FIOOW474.cjs} +7 -7
- package/dist/{chunk-3VJPMRNT.cjs.map → chunk-FIOOW474.cjs.map} +1 -1
- package/dist/{chunk-YJE3HL6Q.js → chunk-FVFPGGDA.js} +4 -4
- package/dist/{chunk-TTEAYVLT.js → chunk-G6CNEEZ3.js} +2 -2
- package/dist/{chunk-NJPMHDFG.js → chunk-GAD4OYKN.js} +2 -2
- package/dist/{chunk-BEPZ5YAN.cjs → chunk-HXDBJR4A.cjs} +59 -59
- package/dist/{chunk-BEPZ5YAN.cjs.map → chunk-HXDBJR4A.cjs.map} +1 -1
- package/dist/{chunk-OSOKWP5R.cjs → chunk-IEKEUSPV.cjs} +31 -31
- package/dist/{chunk-OSOKWP5R.cjs.map → chunk-IEKEUSPV.cjs.map} +1 -1
- package/dist/{chunk-RNWLVI3V.cjs → chunk-LP3FQTCB.cjs} +26 -26
- package/dist/{chunk-RNWLVI3V.cjs.map → chunk-LP3FQTCB.cjs.map} +1 -1
- package/dist/{chunk-4YVUL4T7.cjs → chunk-N6SH4ZYN.cjs} +12 -12
- package/dist/{chunk-4YVUL4T7.cjs.map → chunk-N6SH4ZYN.cjs.map} +1 -1
- package/dist/{chunk-RWBTSF2E.js → chunk-NYBMBTBL.js} +5181 -5295
- package/dist/chunk-NYBMBTBL.js.map +1 -0
- package/dist/{chunk-M7WTWBCY.cjs → chunk-PVMISZQT.cjs} +37 -37
- package/dist/{chunk-M7WTWBCY.cjs.map → chunk-PVMISZQT.cjs.map} +1 -1
- package/dist/{chunk-PNMX75W4.cjs → chunk-R6PS3AXI.cjs} +1057 -1171
- package/dist/chunk-R6PS3AXI.cjs.map +1 -0
- package/dist/{chunk-45Z6B6CO.js → chunk-SSZL4QYX.js} +4 -4
- package/dist/{chunk-MPN3MV5H.js → chunk-WAKXAMRC.js} +4 -4
- package/dist/{chunk-ZCKVP4SU.cjs → chunk-YIJGUS7V.cjs} +26 -26
- package/dist/{chunk-ZCKVP4SU.cjs.map → chunk-YIJGUS7V.cjs.map} +1 -1
- package/dist/components/carousel.d.ts +19 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -6
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.d.ts +0 -1
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +1 -5
- package/dist/components/features/video-bites-strip.d.ts +26 -15
- package/dist/components/features/video-bites-strip.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +120 -124
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +9 -13
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -5
- package/dist/types/blog.d.ts +10 -9
- package/dist/types/blog.d.ts.map +1 -1
- package/dist/types/case-study.d.ts +5 -2
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/types/customer-interview.d.ts +5 -2
- package/dist/types/customer-interview.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/components/.carousel.md +50 -0
- package/src/components/carousel.tsx +262 -0
- package/src/components/features/index.ts +0 -3
- package/src/components/features/video-bites-strip.tsx +375 -53
- package/src/types/blog.ts +10 -9
- package/src/types/case-study.ts +5 -2
- package/src/types/customer-interview.ts +5 -2
- package/src/types/index.ts +0 -1
- package/dist/chunk-PNMX75W4.cjs.map +0 -1
- package/dist/chunk-RWBTSF2E.js.map +0 -1
- package/dist/components/features/cards-strip.d.ts +0 -114
- package/dist/components/features/cards-strip.d.ts.map +0 -1
- package/dist/types/entity-platform.d.ts +0 -22
- package/dist/types/entity-platform.d.ts.map +0 -1
- package/src/components/features/cards-strip.tsx +0 -587
- package/src/stories/CardsStrip.stories.tsx +0 -101
- package/src/types/entity-platform.ts +0 -21
- /package/dist/{chunk-ZB5HSWX4.js.map → chunk-2J6AOHJI.js.map} +0 -0
- /package/dist/{chunk-NN73KMIK.js.map → chunk-5J3LR56Z.js.map} +0 -0
- /package/dist/{chunk-WHJEU7V7.js.map → chunk-A7IGCQUD.js.map} +0 -0
- /package/dist/{chunk-PFF6Q6N5.js.map → chunk-AGTM2H7T.js.map} +0 -0
- /package/dist/{chunk-PJ2YFSMY.js.map → chunk-AQJ5S6RS.js.map} +0 -0
- /package/dist/{chunk-TWLPG5IQ.js.map → chunk-DXIDOGF4.js.map} +0 -0
- /package/dist/{chunk-YJE3HL6Q.js.map → chunk-FVFPGGDA.js.map} +0 -0
- /package/dist/{chunk-TTEAYVLT.js.map → chunk-G6CNEEZ3.js.map} +0 -0
- /package/dist/{chunk-NJPMHDFG.js.map → chunk-GAD4OYKN.js.map} +0 -0
- /package/dist/{chunk-45Z6B6CO.js.map → chunk-SSZL4QYX.js.map} +0 -0
- /package/dist/{chunk-MPN3MV5H.js.map → chunk-WAKXAMRC.js.map} +0 -0
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* <CardsStrip> — THE horizontal card-strip engine (single source of truth).
|
|
3
|
-
*
|
|
4
|
-
* Extracted verbatim from <VideoBitesStrip> so every strip surface shares ONE
|
|
5
|
-
* marquee/chevron/seam/measure implementation ("unify means delete
|
|
6
|
-
* variations"). Two input modes, one engine:
|
|
7
|
-
*
|
|
8
|
-
* MODE A — render-prop (`items` + `itemKey` + `renderCard`): full control.
|
|
9
|
-
* The card receives the strip context (controlled activation, clone flag,
|
|
10
|
-
* shared player-mount gate) and owns its own clone a11y. Used by
|
|
11
|
-
* <VideoBitesStrip>. The engine adds NO cell wrapper in this mode — the
|
|
12
|
-
* card's root is the track's direct child (`scrollByCard` measures
|
|
13
|
-
* `track.firstElementChild.offsetWidth`, and the `flex items-stretch gap-4`
|
|
14
|
-
* sizing contract depends on it).
|
|
15
|
-
*
|
|
16
|
-
* MODE B — children (organic): ANY card components as plain JSX children.
|
|
17
|
-
* Each child is auto-wrapped in a managed cell (fixed width, hover/keyboard
|
|
18
|
-
* marquee-pause, clone `aria-hidden` + `inert`, row-height stretch).
|
|
19
|
-
* Adding a new card type requires ZERO strip code. Contract:
|
|
20
|
-
* (a) pass an ARRAY of children (`{rows.map(...)}`) — `Children.toArray`
|
|
21
|
-
* does NOT flatten through a single <Fragment> child (it would become
|
|
22
|
-
* one giant cell; a dev-only warning fires);
|
|
23
|
-
* (b) when `autoScroll` is on, children must be ref-free / unique-DOM-id-
|
|
24
|
-
* free / mount-effect-free — the clone copy mounts the same element a
|
|
25
|
-
* second time (double-fired effects, duplicate ids, last-mounted ref).
|
|
26
|
-
*
|
|
27
|
-
* Activation invariant: hover/focus activation is wired in exactly ONE place —
|
|
28
|
-
* the managed cell (children mode) OR the card itself (render-prop mode,
|
|
29
|
-
* e.g. <VideoBiteCard>) — never both.
|
|
30
|
-
*
|
|
31
|
-
* Marquee state model (explicit — do not "simplify" into one timer):
|
|
32
|
-
* the rAF advances only when the pause-reason set {cardHovered, offViewport,
|
|
33
|
-
* tabHidden, reducedMotion} is empty AND `now > max(chevronSuppressUntil,
|
|
34
|
-
* userScrollSuppressUntil)`. cardHovered means the pointer is over a CARD
|
|
35
|
-
* (incl. its overlay) — leaving the card resumes the marquee immediately.
|
|
36
|
-
* Chevron clicks and manual wheel/touch each set their own suppress-until
|
|
37
|
-
* timestamp; any card-level leave-grace is a separate concern that never
|
|
38
|
-
* touches marquee state.
|
|
39
|
-
*/
|
|
40
|
-
import React from 'react';
|
|
41
|
-
/** Per-card strip context passed to `renderCard` (and used internally by the
|
|
42
|
-
* children-mode managed cell). */
|
|
43
|
-
export interface CardStripRenderCtx {
|
|
44
|
-
/** Item index (copy-independent — the clone copy repeats the same indices). */
|
|
45
|
-
index: number;
|
|
46
|
-
/** `${itemKey}__${copyIndex}__${index}` — unique per rendered card, even for
|
|
47
|
-
* duplicate items (the trailing index disambiguates). */
|
|
48
|
-
cardKey: string;
|
|
49
|
-
isClone: boolean;
|
|
50
|
-
isTouch: boolean;
|
|
51
|
-
/** Engine's (max-width: 767px) media query. */
|
|
52
|
-
isMobile: boolean;
|
|
53
|
-
/** activeKey === cardKey (controlled hover/focus activation). */
|
|
54
|
-
active: boolean;
|
|
55
|
-
onActivate: (key: string) => void;
|
|
56
|
-
onDeactivate: (key: string) => void;
|
|
57
|
-
/** Shared-by-index 500px near-viewport gate (opt-in — only meaningful when
|
|
58
|
-
* the card registers via `rootRef`). */
|
|
59
|
-
mounted: boolean;
|
|
60
|
-
/** Registers the card root with the mount-gate IntersectionObserver.
|
|
61
|
-
* May return a cleanup (React 19 ref contract). */
|
|
62
|
-
rootRef: (el: HTMLDivElement | null) => (() => void) | undefined;
|
|
63
|
-
}
|
|
64
|
-
interface CardsStripEngineProps {
|
|
65
|
-
/** Section heading. Omit `title` (or set `showTitle={false}`) to hide. */
|
|
66
|
-
title?: string;
|
|
67
|
-
showTitle?: boolean;
|
|
68
|
-
/** Custom node rendered between the heading and the strip. */
|
|
69
|
-
headerSlot?: React.ReactNode;
|
|
70
|
-
/** Marquee auto-scroll. Auto-disabled on no-overflow and
|
|
71
|
-
* prefers-reduced-motion. Pass `autoScroll={false}` for chevron-style
|
|
72
|
-
* entity strips — the default stays `true` for bites-contract parity. */
|
|
73
|
-
autoScroll?: boolean;
|
|
74
|
-
/** Marquee speed in px/s. Default 60 — marquee libraries (e.g. GSAP marquee)
|
|
75
|
-
* default around 100px/s; 60 keeps drift lively while cards stay easy to
|
|
76
|
-
* hover-target. 60px/s ≈ 1px per 60Hz frame, the smoothest integer step. */
|
|
77
|
-
autoScrollSpeed?: number;
|
|
78
|
-
/** Pause the marquee while a CARD is hovered (resumes as soon as the
|
|
79
|
-
* pointer leaves the card — strip whitespace/heading never pauses). */
|
|
80
|
-
pauseOnHover?: boolean;
|
|
81
|
-
/** Floating prev/next buttons. Hidden automatically when nothing overflows. */
|
|
82
|
-
showChevrons?: boolean;
|
|
83
|
-
/** Chevron aria-labels. */
|
|
84
|
-
prevLabel?: string;
|
|
85
|
-
nextLabel?: string;
|
|
86
|
-
/** Merged into the engine's wrapper ref (e.g. `useVideoWarmup().ref`). */
|
|
87
|
-
rootRef?: (el: HTMLDivElement | null) => void;
|
|
88
|
-
className?: string;
|
|
89
|
-
}
|
|
90
|
-
/** MODE A — render-prop (advanced): full ctx control, no cell wrapper. */
|
|
91
|
-
interface RenderCardMode<T> {
|
|
92
|
-
items: ReadonlyArray<T>;
|
|
93
|
-
itemKey: (item: T, index: number) => string;
|
|
94
|
-
renderCard: (item: T, ctx: CardStripRenderCtx) => React.ReactNode;
|
|
95
|
-
children?: never;
|
|
96
|
-
cardWidthDesktop?: never;
|
|
97
|
-
cardWidthMobile?: never;
|
|
98
|
-
}
|
|
99
|
-
/** MODE B — children (organic): ANY card components, zero registration. */
|
|
100
|
-
interface ChildrenMode {
|
|
101
|
-
children: React.ReactNode;
|
|
102
|
-
/** Managed cell width in px per breakpoint (Figma: 400 desktop). */
|
|
103
|
-
cardWidthDesktop?: number;
|
|
104
|
-
cardWidthMobile?: number;
|
|
105
|
-
items?: never;
|
|
106
|
-
itemKey?: never;
|
|
107
|
-
renderCard?: never;
|
|
108
|
-
}
|
|
109
|
-
export type CardsStripProps<T = unknown> = CardsStripEngineProps & (RenderCardMode<T> | ChildrenMode);
|
|
110
|
-
/** Single source for the strip cell width cap (shared with <VideoBiteCard>). */
|
|
111
|
-
export declare const STRIP_CELL_MAX_WIDTH = "90vw";
|
|
112
|
-
export declare function CardsStrip<T = unknown>(props: CardsStripProps<T>): React.ReactElement | null;
|
|
113
|
-
export {};
|
|
114
|
-
//# sourceMappingURL=cards-strip.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cards-strip.d.ts","sourceRoot":"","sources":["../../../src/components/features/cards-strip.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAWjF;mCACmC;AACnC,MAAM,WAAW,kBAAkB;IACjC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd;8DAC0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;6CACyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB;wDACoD;IACpD,OAAO,EAAE,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAClE;AAED,UAAU,qBAAqB;IAC7B,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;8EAE0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;iFAE6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;4EACwE;IACxE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,0EAA0E;AAC1E,UAAU,cAAc,CAAC,CAAC;IACxB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,kBAAkB,KAAK,KAAK,CAAC,SAAS,CAAC;IAClE,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,gBAAgB,CAAC,EAAE,KAAK,CAAC;IACzB,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB;AAED,2EAA2E;AAC3E,UAAU,YAAY;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,OAAO,IAAI,qBAAqB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAYtG,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAQ3C,wBAAgB,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CAmb5F"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hydrated `entity_platforms` junction row — THE shape the hub's
|
|
3
|
-
* attachPlatformsToRows puts on every `<entity>_platforms[]` array
|
|
4
|
-
* (rows arrive featured-first with the platform record's fields spread on
|
|
5
|
-
* via PLATFORM_EMBED). One definition; the per-entity types
|
|
6
|
-
* (case_study_platforms / blog_post_platforms / customer_interview_platforms)
|
|
7
|
-
* all reference it so the shape can never drift per entity.
|
|
8
|
-
*/
|
|
9
|
-
export interface EntityPlatformAssoc {
|
|
10
|
-
platform_id: string;
|
|
11
|
-
is_featured: boolean;
|
|
12
|
-
featured_order?: number | null;
|
|
13
|
-
/** Platform name — spread from the platform record. Feeds platform-aware
|
|
14
|
-
* URL composition (composeContentUrlFromPlatforms) without casts. */
|
|
15
|
-
name?: string;
|
|
16
|
-
display_name?: string;
|
|
17
|
-
/** Alias some admin fetches add (e.g. getCaseStudyForAdmin). */
|
|
18
|
-
platform_name?: string;
|
|
19
|
-
id?: string;
|
|
20
|
-
created_at?: string;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=entity-platform.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entity-platform.d.ts","sourceRoot":"","sources":["../../src/types/entity-platform.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B;0EACsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB"}
|