@vibes.diy/base 14.3.3 → 14.3.5
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/components/AdminModeControl.d.ts +7 -0
- package/components/AdminModeControl.js +9 -0
- package/components/AdminModeControl.js.map +1 -0
- package/components/EditorTabStrip.d.ts +3 -2
- package/components/EditorTabStrip.js +8 -15
- package/components/EditorTabStrip.js.map +1 -1
- package/components/MadeHereView.js.map +1 -1
- package/components/MemberAccessView.d.ts +37 -0
- package/components/MemberAccessView.js +94 -0
- package/components/MemberAccessView.js.map +1 -0
- package/components/MemberInvitationView.d.ts +11 -0
- package/components/MemberInvitationView.js +16 -0
- package/components/MemberInvitationView.js.map +1 -0
- package/components/PublishBanner.d.ts +16 -0
- package/components/PublishBanner.js +126 -0
- package/components/PublishBanner.js.map +1 -0
- package/components/ShareLinkView.d.ts +11 -0
- package/components/ShareLinkView.js +61 -0
- package/components/ShareLinkView.js.map +1 -0
- package/components/SharePanelView.d.ts +5 -1
- package/components/SharePanelView.js +17 -62
- package/components/SharePanelView.js.map +1 -1
- package/components/UnifiedVibeCard.d.ts +0 -1
- package/components/UnifiedVibeCard.js +49 -138
- package/components/UnifiedVibeCard.js.map +1 -1
- package/components/UnifiedVibeCardSettings.styles.d.ts +3 -0
- package/components/UnifiedVibeCardSettings.styles.js +95 -0
- package/components/UnifiedVibeCardSettings.styles.js.map +1 -0
- package/components/UnifiedVibeCardShare.styles.d.ts +3 -0
- package/components/UnifiedVibeCardShare.styles.js +72 -0
- package/components/UnifiedVibeCardShare.styles.js.map +1 -0
- package/components/ViewerAccessSummary.d.ts +28 -0
- package/components/ViewerAccessSummary.js +105 -0
- package/components/ViewerAccessSummary.js.map +1 -0
- package/components/ViewerStandingView.d.ts +4 -26
- package/components/ViewerStandingView.js +6 -104
- package/components/ViewerStandingView.js.map +1 -1
- package/components/editor-tabs.d.ts +28 -0
- package/components/editor-tabs.js +15 -0
- package/components/editor-tabs.js.map +1 -0
- package/components/homeBrandFont.d.ts +1 -1
- package/components/homeBrandFont.js +1 -1
- package/components/homeBrandFont.js.map +1 -1
- package/components/index.d.ts +7 -1
- package/components/index.js +7 -1
- package/components/index.js.map +1 -1
- package/hooks/useCardFloat.d.ts +6 -0
- package/hooks/useCardFloat.js +191 -0
- package/hooks/useCardFloat.js.map +1 -0
- package/hooks/useHomeMotionPress.d.ts +17 -0
- package/hooks/useHomeMotionPress.js +93 -0
- package/hooks/useHomeMotionPress.js.map +1 -0
- package/motion/card-motion-source.d.ts +23 -0
- package/motion/card-motion-source.js +50 -0
- package/motion/card-motion-source.js.map +1 -0
- package/package.json +4 -4
- package/components/PromiseStrip.d.ts +0 -13
- package/components/PromiseStrip.js +0 -17
- package/components/PromiseStrip.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewerAccessSummary.js","sourceRoot":"","sources":["../../jsr/components/ViewerAccessSummary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export interface
|
|
5
|
-
readonly viewerMode?: "author" | "member" | "visitor";
|
|
6
|
-
readonly memberReadOnly?: boolean;
|
|
7
|
-
readonly adminMode?: boolean;
|
|
8
|
-
readonly versionLocked?: boolean;
|
|
9
|
-
readonly publishState?: "draft" | "published" | "old";
|
|
10
|
-
readonly publishAccess?: "public" | "private";
|
|
11
|
-
readonly myGrant?: ViewerStandingGrant;
|
|
12
|
-
}
|
|
13
|
-
export interface ViewerStandingCopy {
|
|
14
|
-
readonly tier: ViewerStandingTier;
|
|
15
|
-
readonly label: string;
|
|
16
|
-
readonly body: string;
|
|
17
|
-
readonly note?: string;
|
|
18
|
-
readonly roleLine?: string;
|
|
19
|
-
}
|
|
20
|
-
export declare function viewerStandingCopy(state: ViewerStandingState): ViewerStandingCopy;
|
|
21
|
-
export declare function ViewerStandingGlyph({ tier, size }: {
|
|
22
|
-
readonly tier: ViewerStandingTier;
|
|
23
|
-
readonly size?: number;
|
|
24
|
-
}): React.JSX.Element;
|
|
25
|
-
export interface ViewerStandingActions {
|
|
2
|
+
import { type ViewerAccessSummaryActions, type ViewerStandingState } from "./ViewerAccessSummary.js";
|
|
3
|
+
export { ViewerStandingGlyph, viewerStandingCopy, type ViewerStandingCopy, type ViewerStandingGrant, type ViewerStandingState, type ViewerStandingTier, } from "./ViewerAccessSummary.js";
|
|
4
|
+
export interface ViewerStandingActions extends ViewerAccessSummaryActions {
|
|
26
5
|
readonly onToggleAdmin?: () => void;
|
|
27
|
-
readonly onUnlock?: () => void;
|
|
28
6
|
}
|
|
29
|
-
export declare function ViewerStandingView(
|
|
7
|
+
export declare function ViewerStandingView({ onToggleAdmin, ...state }: ViewerStandingState & ViewerStandingActions): React.JSX.Element;
|
|
@@ -1,108 +1,10 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return {
|
|
7
|
-
tier: "admin",
|
|
8
|
-
label: "Admin mode",
|
|
9
|
-
body: "Admin mode is on — this vibe’s access rules are bypassed for you, so you see and can write every document, including data the app would normally hide.",
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
if (viewerMode === "author") {
|
|
13
|
-
const note = publishAccess === "private"
|
|
14
|
-
? "It’s shared privately: only you and its members can open it."
|
|
15
|
-
: publishAccess === "public"
|
|
16
|
-
? "It’s shared publicly: anyone with the link can open it."
|
|
17
|
-
: undefined;
|
|
18
|
-
if (versionLocked) {
|
|
19
|
-
return {
|
|
20
|
-
tier: "owner",
|
|
21
|
-
label: "Owner",
|
|
22
|
-
body: "You are an owner of this vibe, and a version is pinned as the live release. Your changes won’t appear live until you unpin it.",
|
|
23
|
-
note,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
if (publishState === "draft") {
|
|
27
|
-
return {
|
|
28
|
-
tier: "owner",
|
|
29
|
-
label: "Owner",
|
|
30
|
-
body: "You are an owner of this vibe, and a draft is on screen — your latest changes aren’t live yet. Update the published app to put them live.",
|
|
31
|
-
note,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
if (publishState === "old") {
|
|
35
|
-
return {
|
|
36
|
-
tier: "owner",
|
|
37
|
-
label: "Owner",
|
|
38
|
-
body: "You are an owner of this vibe, and you’re looking at an older version — it isn’t what visitors get. Editing from here starts a new version.",
|
|
39
|
-
note,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
tier: "owner",
|
|
44
|
-
label: "Owner",
|
|
45
|
-
body: "You are an owner of this vibe, and no version is pinned, so your changes will appear live as you make them.",
|
|
46
|
-
note,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
if (viewerMode === "member") {
|
|
50
|
-
if (memberReadOnly) {
|
|
51
|
-
return {
|
|
52
|
-
tier: "readonly",
|
|
53
|
-
label: "Read-only",
|
|
54
|
-
body: "You are a read-only member of this vibe. You can look at this vibe’s data, but not change it.",
|
|
55
|
-
roleLine,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
tier: "neutral",
|
|
60
|
-
label: "Member",
|
|
61
|
-
body: "You are a member of this vibe — your edits will become a new remix you can propose back to the group.",
|
|
62
|
-
roleLine,
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
tier: "neutral",
|
|
67
|
-
label: "Visitor",
|
|
68
|
-
body: "You are viewing someone else’s vibe. Anything you edit starts your own remix — the original stays exactly as it is.",
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
export function ViewerStandingGlyph({ tier, size = 16 }) {
|
|
72
|
-
const isAdmin = tier === "admin";
|
|
73
|
-
const isShield = tier !== "readonly";
|
|
74
|
-
const common = {
|
|
75
|
-
width: size,
|
|
76
|
-
height: size,
|
|
77
|
-
viewBox: "0 0 24 24",
|
|
78
|
-
stroke: "currentColor",
|
|
79
|
-
strokeWidth: 2,
|
|
80
|
-
strokeLinecap: "round",
|
|
81
|
-
strokeLinejoin: "round",
|
|
82
|
-
"aria-hidden": true,
|
|
83
|
-
};
|
|
84
|
-
return (React.createElement("span", { style: { display: "inline-flex", flexShrink: 0, ...(isAdmin ? { color: "#d97706" } : {}) } }, isShield ? (React.createElement("svg", { ...common, fill: isAdmin ? "currentColor" : "none" },
|
|
85
|
-
React.createElement("path", { d: "M12 3l7 3v5c0 4.5-3 7.5-7 9-4-1.5-7-4.5-7-9V6l7-3z" }))) : (React.createElement("svg", { ...common, fill: "none" },
|
|
86
|
-
React.createElement("rect", { x: "5", y: "11", width: "14", height: "9", rx: "2" }),
|
|
87
|
-
React.createElement("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" })))));
|
|
88
|
-
}
|
|
89
|
-
export function ViewerStandingView(props) {
|
|
90
|
-
const { onToggleAdmin, onUnlock, ...state } = props;
|
|
91
|
-
const copy = viewerStandingCopy(state);
|
|
92
|
-
const isAuthor = state.viewerMode === "author";
|
|
93
|
-
const showUnlock = isAuthor && state.versionLocked === true && !!onUnlock;
|
|
2
|
+
import { AdminModeControl } from "./AdminModeControl.js";
|
|
3
|
+
import { ViewerAccessSummary } from "./ViewerAccessSummary.js";
|
|
4
|
+
export { ViewerStandingGlyph, viewerStandingCopy, } from "./ViewerAccessSummary.js";
|
|
5
|
+
export function ViewerStandingView({ onToggleAdmin, ...state }) {
|
|
94
6
|
return (React.createElement("div", { className: "flex flex-col gap-3 p-4 text-sm", "data-testid": "viewer-standing" },
|
|
95
|
-
React.createElement(
|
|
96
|
-
|
|
97
|
-
React.createElement(ViewerStandingGlyph, { tier: copy.tier, size: 20 })),
|
|
98
|
-
React.createElement("span", { className: "font-medium text-neutral-900 dark:text-neutral-100" }, copy.label)),
|
|
99
|
-
React.createElement("p", { className: "text-neutral-700 dark:text-neutral-300" }, copy.body),
|
|
100
|
-
showUnlock && (React.createElement("div", null,
|
|
101
|
-
React.createElement("button", { type: "button", "data-testid": "viewer-standing-unlock", onClick: onUnlock, className: "rounded-md bg-neutral-900 px-3 py-1.5 text-sm font-semibold text-white dark:bg-neutral-100 dark:text-neutral-900" }, "Unlock"))),
|
|
102
|
-
copy.note && React.createElement("p", { className: "text-neutral-500 dark:text-neutral-400" }, copy.note),
|
|
103
|
-
copy.roleLine && React.createElement("p", { className: "text-neutral-500 dark:text-neutral-400" }, copy.roleLine),
|
|
104
|
-
isAuthor && onToggleAdmin && (React.createElement("label", { className: "flex items-center gap-2 text-neutral-700 dark:text-neutral-300" },
|
|
105
|
-
React.createElement("input", { type: "checkbox", checked: state.adminMode === true, onChange: () => void onToggleAdmin(), className: "rounded border-gray-300 dark:border-gray-600" }),
|
|
106
|
-
React.createElement("span", null, "Admin mode")))));
|
|
7
|
+
React.createElement(ViewerAccessSummary, { ...state }),
|
|
8
|
+
React.createElement(AdminModeControl, { isOwner: state.viewerMode === "author", adminMode: state.adminMode === true, onToggle: onToggleAdmin })));
|
|
107
9
|
}
|
|
108
10
|
//# sourceMappingURL=ViewerStandingView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerStandingView.js","sourceRoot":"","sources":["../../jsr/components/ViewerStandingView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewerStandingView.js","sourceRoot":"","sources":["../../jsr/components/ViewerStandingView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAA6D,MAAM,0BAA0B,CAAC;AAI1H,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GAKnB,MAAM,0BAA0B,CAAC;AAOlC,MAAM,UAAU,kBAAkB,CAAC,EAAE,aAAa,EAAE,GAAG,KAAK,EAA+C;IACzG,OAAO,CACL,6BAAK,SAAS,EAAC,iCAAiC,iBAAa,iBAAiB;QAC5E,oBAAC,mBAAmB,OAAK,KAAK,GAAI;QAClC,oBAAC,gBAAgB,IAAC,OAAO,EAAE,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,aAAa,GAAI,CACtH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const EDITOR_TAB_DEFINITIONS: readonly [{
|
|
2
|
+
readonly key: "standing";
|
|
3
|
+
readonly label: "Your access";
|
|
4
|
+
}, {
|
|
5
|
+
readonly key: "edit-chat";
|
|
6
|
+
readonly label: "Chat";
|
|
7
|
+
}, {
|
|
8
|
+
readonly key: "style";
|
|
9
|
+
readonly label: "Style";
|
|
10
|
+
}, {
|
|
11
|
+
readonly key: "code";
|
|
12
|
+
readonly label: "Code";
|
|
13
|
+
}, {
|
|
14
|
+
readonly key: "files";
|
|
15
|
+
readonly label: "Files";
|
|
16
|
+
}, {
|
|
17
|
+
readonly key: "data";
|
|
18
|
+
readonly label: "Data";
|
|
19
|
+
}, {
|
|
20
|
+
readonly key: "settings";
|
|
21
|
+
readonly label: "Settings";
|
|
22
|
+
}, {
|
|
23
|
+
readonly key: "faq";
|
|
24
|
+
readonly label: "FAQ";
|
|
25
|
+
}];
|
|
26
|
+
export type EditorTabKey = (typeof EDITOR_TAB_DEFINITIONS)[number]["key"];
|
|
27
|
+
export declare const EDITOR_TABS: readonly EditorTabKey[];
|
|
28
|
+
export declare function isEditorTabKey(value: unknown): value is EditorTabKey;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const EDITOR_TAB_DEFINITIONS = [
|
|
2
|
+
{ key: "standing", label: "Your access" },
|
|
3
|
+
{ key: "edit-chat", label: "Chat" },
|
|
4
|
+
{ key: "style", label: "Style" },
|
|
5
|
+
{ key: "code", label: "Code" },
|
|
6
|
+
{ key: "files", label: "Files" },
|
|
7
|
+
{ key: "data", label: "Data" },
|
|
8
|
+
{ key: "settings", label: "Settings" },
|
|
9
|
+
{ key: "faq", label: "FAQ" },
|
|
10
|
+
];
|
|
11
|
+
export const EDITOR_TABS = EDITOR_TAB_DEFINITIONS.map(({ key }) => key);
|
|
12
|
+
export function isEditorTabKey(value) {
|
|
13
|
+
return EDITOR_TAB_DEFINITIONS.some(({ key }) => key === value);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=editor-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-tabs.js","sourceRoot":"","sources":["../../jsr/components/editor-tabs.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE;IACzC,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;IACnC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAC9B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAC9B,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;IACtC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;CACpB,CAAC;AAIX,MAAM,CAAC,MAAM,WAAW,GAA4B,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AAEjG,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const HOME_BRAND_FONT = "'
|
|
1
|
+
export declare const HOME_BRAND_FONT = "'Alte Haas Grotesk', Inter, sans-serif";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const HOME_BRAND_FONT = "'
|
|
1
|
+
export const HOME_BRAND_FONT = "'Alte Haas Grotesk', Inter, sans-serif";
|
|
2
2
|
//# sourceMappingURL=homeBrandFont.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"homeBrandFont.js","sourceRoot":"","sources":["../../jsr/components/homeBrandFont.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"homeBrandFont.js","sourceRoot":"","sources":["../../jsr/components/homeBrandFont.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,eAAe,GAAG,wCAAwC,CAAC"}
|
package/components/index.d.ts
CHANGED
|
@@ -21,7 +21,6 @@ export * from "./OnboardingOverlay.js";
|
|
|
21
21
|
export * from "./HandleLookupView.js";
|
|
22
22
|
export * from "./UnifiedVibeCard.js";
|
|
23
23
|
export * from "./SeedDataOffer.js";
|
|
24
|
-
export * from "./PromiseStrip.js";
|
|
25
24
|
export * from "./EditorTabStrip.js";
|
|
26
25
|
export * from "./StyleControls.js";
|
|
27
26
|
export * from "./LayoutControls.js";
|
|
@@ -44,3 +43,10 @@ export * from "./BuildCard.js";
|
|
|
44
43
|
export * from "./CodingIndicator.js";
|
|
45
44
|
export * from "./NotificationDetailView.js";
|
|
46
45
|
export * from "./ChatMessageRow.js";
|
|
46
|
+
export * from "./MemberAccessView.js";
|
|
47
|
+
export * from "./MemberInvitationView.js";
|
|
48
|
+
export * from "./ViewerAccessSummary.js";
|
|
49
|
+
export * from "./AdminModeControl.js";
|
|
50
|
+
export * from "./editor-tabs.js";
|
|
51
|
+
export * from "./ShareLinkView.js";
|
|
52
|
+
export * from "./PublishBanner.js";
|
package/components/index.js
CHANGED
|
@@ -21,7 +21,6 @@ export * from "./OnboardingOverlay.js";
|
|
|
21
21
|
export * from "./HandleLookupView.js";
|
|
22
22
|
export * from "./UnifiedVibeCard.js";
|
|
23
23
|
export * from "./SeedDataOffer.js";
|
|
24
|
-
export * from "./PromiseStrip.js";
|
|
25
24
|
export * from "./EditorTabStrip.js";
|
|
26
25
|
export * from "./StyleControls.js";
|
|
27
26
|
export * from "./LayoutControls.js";
|
|
@@ -44,4 +43,11 @@ export * from "./BuildCard.js";
|
|
|
44
43
|
export * from "./CodingIndicator.js";
|
|
45
44
|
export * from "./NotificationDetailView.js";
|
|
46
45
|
export * from "./ChatMessageRow.js";
|
|
46
|
+
export * from "./MemberAccessView.js";
|
|
47
|
+
export * from "./MemberInvitationView.js";
|
|
48
|
+
export * from "./ViewerAccessSummary.js";
|
|
49
|
+
export * from "./AdminModeControl.js";
|
|
50
|
+
export * from "./editor-tabs.js";
|
|
51
|
+
export * from "./ShareLinkView.js";
|
|
52
|
+
export * from "./PublishBanner.js";
|
|
47
53
|
//# sourceMappingURL=index.js.map
|
package/components/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../jsr/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../jsr/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { RefObject } from "react";
|
|
2
|
+
export declare const CardMotionContext: import("react").Context<import("../motion/card-motion-source.js").CardMotionSource>;
|
|
3
|
+
export declare function useCardFloat(ref: RefObject<HTMLDivElement | null>, open: boolean, controlsRef?: RefObject<HTMLDivElement | null>): {
|
|
4
|
+
toggle: () => void;
|
|
5
|
+
status: string;
|
|
6
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { createContext, useContext, useEffect, useRef, useState } from "react";
|
|
2
|
+
import { browserCardMotion } from "../motion/card-motion-source.js";
|
|
3
|
+
export const CardMotionContext = createContext(browserCardMotion);
|
|
4
|
+
const clamp = (value) => Math.max(-1, Math.min(1, value));
|
|
5
|
+
const delta = (value, baseline) => ((value - baseline + 540) % 360) - 180;
|
|
6
|
+
export function useCardFloat(ref, open, controlsRef) {
|
|
7
|
+
const source = useContext(CardMotionContext);
|
|
8
|
+
const [allowed, setAllowed] = useState(false);
|
|
9
|
+
const [off, setOff] = useState(false);
|
|
10
|
+
const [reduced, setReduced] = useState(false);
|
|
11
|
+
const [status, setStatus] = useState("");
|
|
12
|
+
const request = useRef(0);
|
|
13
|
+
const pending = useRef(false);
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const preference = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
16
|
+
const update = () => setReduced(preference.matches);
|
|
17
|
+
update();
|
|
18
|
+
preference.addEventListener("change", update);
|
|
19
|
+
return () => preference.removeEventListener("change", update);
|
|
20
|
+
}, []);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
let live = true;
|
|
23
|
+
if (open && !reduced && !off) {
|
|
24
|
+
void source.canStartAutomatically().then((automatic) => {
|
|
25
|
+
if (live && automatic)
|
|
26
|
+
setAllowed(true);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
live = false;
|
|
31
|
+
};
|
|
32
|
+
}, [source, open, reduced, off]);
|
|
33
|
+
useEffect(() => () => {
|
|
34
|
+
request.current += 1;
|
|
35
|
+
}, []);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const root = ref.current;
|
|
38
|
+
if (root === null)
|
|
39
|
+
return;
|
|
40
|
+
const controls = controlsRef?.current;
|
|
41
|
+
const surfaces = controls ? [root, controls] : [root];
|
|
42
|
+
const neutral = () => {
|
|
43
|
+
surfaces.forEach((surface) => {
|
|
44
|
+
surface.style.removeProperty("--vibe-float-x");
|
|
45
|
+
surface.style.removeProperty("--vibe-float-y");
|
|
46
|
+
});
|
|
47
|
+
root.removeAttribute("data-vibe-floating");
|
|
48
|
+
controls?.removeAttribute("data-vibe-floating-controls");
|
|
49
|
+
};
|
|
50
|
+
neutral();
|
|
51
|
+
if (!open || !allowed || off || reduced)
|
|
52
|
+
return;
|
|
53
|
+
let baseline;
|
|
54
|
+
let target = { x: 0, y: 0 };
|
|
55
|
+
let current = { x: 0, y: 0 };
|
|
56
|
+
let frame = 0;
|
|
57
|
+
let pointerHeld = false;
|
|
58
|
+
let touchHeld = false;
|
|
59
|
+
let scrollUntil = 0;
|
|
60
|
+
let resumeTimer;
|
|
61
|
+
const editing = () => {
|
|
62
|
+
const active = document.activeElement;
|
|
63
|
+
return active !== null && root.contains(active) && active.matches("input,textarea,select,[contenteditable=true]");
|
|
64
|
+
};
|
|
65
|
+
function schedule() {
|
|
66
|
+
if (frame === 0 && !document.hidden)
|
|
67
|
+
frame = requestAnimationFrame(paint);
|
|
68
|
+
}
|
|
69
|
+
function paint() {
|
|
70
|
+
frame = 0;
|
|
71
|
+
if (pointerHeld || touchHeld || editing() || performance.now() < scrollUntil)
|
|
72
|
+
return;
|
|
73
|
+
current = { x: current.x + (target.x - current.x) * 0.12, y: current.y + (target.y - current.y) * 0.12 };
|
|
74
|
+
surfaces.forEach((surface) => {
|
|
75
|
+
surface.style.setProperty("--vibe-float-x", String(current.x));
|
|
76
|
+
surface.style.setProperty("--vibe-float-y", String(current.y));
|
|
77
|
+
});
|
|
78
|
+
if (Math.abs(target.x - current.x) + Math.abs(target.y - current.y) > 0.001)
|
|
79
|
+
schedule();
|
|
80
|
+
}
|
|
81
|
+
const unsubscribe = source.subscribe((reading) => {
|
|
82
|
+
if (document.hidden)
|
|
83
|
+
return;
|
|
84
|
+
if (baseline === undefined || baseline.angle !== reading.angle) {
|
|
85
|
+
baseline = reading;
|
|
86
|
+
target = { x: 0, y: 0 };
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const angle = (reading.angle * Math.PI) / 180;
|
|
90
|
+
const dx = delta(reading.gamma, baseline.gamma);
|
|
91
|
+
const dy = delta(reading.beta, baseline.beta);
|
|
92
|
+
target = {
|
|
93
|
+
x: clamp((dx * Math.cos(angle) + dy * Math.sin(angle)) / 20),
|
|
94
|
+
y: clamp((dy * Math.cos(angle) - dx * Math.sin(angle)) / 20),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
root.setAttribute("data-vibe-floating", "true");
|
|
98
|
+
controls?.setAttribute("data-vibe-floating-controls", "true");
|
|
99
|
+
schedule();
|
|
100
|
+
});
|
|
101
|
+
const hold = () => {
|
|
102
|
+
pointerHeld = true;
|
|
103
|
+
};
|
|
104
|
+
const release = () => {
|
|
105
|
+
pointerHeld = false;
|
|
106
|
+
schedule();
|
|
107
|
+
};
|
|
108
|
+
const holdTouch = () => {
|
|
109
|
+
touchHeld = true;
|
|
110
|
+
};
|
|
111
|
+
const releaseTouch = (event) => {
|
|
112
|
+
touchHeld = event.touches.length > 0;
|
|
113
|
+
schedule();
|
|
114
|
+
};
|
|
115
|
+
const reset = () => {
|
|
116
|
+
baseline = undefined;
|
|
117
|
+
target = { x: 0, y: 0 };
|
|
118
|
+
current = { x: 0, y: 0 };
|
|
119
|
+
pointerHeld = false;
|
|
120
|
+
touchHeld = false;
|
|
121
|
+
cancelAnimationFrame(frame);
|
|
122
|
+
frame = 0;
|
|
123
|
+
neutral();
|
|
124
|
+
};
|
|
125
|
+
const scroll = () => {
|
|
126
|
+
scrollUntil = performance.now() + 160;
|
|
127
|
+
clearTimeout(resumeTimer);
|
|
128
|
+
resumeTimer = setTimeout(schedule, 160);
|
|
129
|
+
};
|
|
130
|
+
surfaces.forEach((surface) => {
|
|
131
|
+
surface.addEventListener("pointerdown", hold, true);
|
|
132
|
+
surface.addEventListener("touchstart", holdTouch, { passive: true });
|
|
133
|
+
});
|
|
134
|
+
root.addEventListener("scroll", scroll, true);
|
|
135
|
+
root.addEventListener("focusout", schedule);
|
|
136
|
+
window.addEventListener("pointerup", release);
|
|
137
|
+
window.addEventListener("pointercancel", release);
|
|
138
|
+
window.addEventListener("touchend", releaseTouch);
|
|
139
|
+
window.addEventListener("touchcancel", releaseTouch);
|
|
140
|
+
window.addEventListener("blur", reset);
|
|
141
|
+
document.addEventListener("visibilitychange", reset);
|
|
142
|
+
return () => {
|
|
143
|
+
unsubscribe();
|
|
144
|
+
cancelAnimationFrame(frame);
|
|
145
|
+
clearTimeout(resumeTimer);
|
|
146
|
+
neutral();
|
|
147
|
+
surfaces.forEach((surface) => {
|
|
148
|
+
surface.removeEventListener("pointerdown", hold, true);
|
|
149
|
+
surface.removeEventListener("touchstart", holdTouch);
|
|
150
|
+
});
|
|
151
|
+
root.removeEventListener("scroll", scroll, true);
|
|
152
|
+
root.removeEventListener("focusout", schedule);
|
|
153
|
+
window.removeEventListener("pointerup", release);
|
|
154
|
+
window.removeEventListener("pointercancel", release);
|
|
155
|
+
window.removeEventListener("touchend", releaseTouch);
|
|
156
|
+
window.removeEventListener("touchcancel", releaseTouch);
|
|
157
|
+
window.removeEventListener("blur", reset);
|
|
158
|
+
document.removeEventListener("visibilitychange", reset);
|
|
159
|
+
};
|
|
160
|
+
}, [ref, open, allowed, off, reduced, source, controlsRef]);
|
|
161
|
+
function toggle() {
|
|
162
|
+
if (reduced) {
|
|
163
|
+
setStatus("Float follows your reduced-motion setting.");
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (pending.current)
|
|
167
|
+
return;
|
|
168
|
+
if (allowed && !off) {
|
|
169
|
+
setOff(true);
|
|
170
|
+
setStatus("Float off.");
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
const token = ++request.current;
|
|
174
|
+
pending.current = true;
|
|
175
|
+
void source.requestPermission().then((granted) => {
|
|
176
|
+
if (request.current !== token)
|
|
177
|
+
return;
|
|
178
|
+
pending.current = false;
|
|
179
|
+
setAllowed(granted);
|
|
180
|
+
setOff(false);
|
|
181
|
+
setStatus(granted ? "Float enabled when tilt readings are available." : "Motion access is unavailable. Float stays still.");
|
|
182
|
+
}, () => {
|
|
183
|
+
if (request.current !== token)
|
|
184
|
+
return;
|
|
185
|
+
pending.current = false;
|
|
186
|
+
setStatus("Motion access is unavailable. Float stays still.");
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return { toggle, status };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=useCardFloat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCardFloat.js","sourceRoot":"","sources":["../../jsr/hooks/useCardFloat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MouseEvent, PointerEvent, KeyboardEvent, TouchEvent } from "react";
|
|
2
|
+
interface HomeMotionPressOptions {
|
|
3
|
+
readonly onHome: () => void;
|
|
4
|
+
readonly onLongPress?: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function useHomeMotionPress({ onHome, onLongPress }: HomeMotionPressOptions): {
|
|
7
|
+
onClick: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
8
|
+
onPointerDown: (event: PointerEvent<HTMLButtonElement>) => void;
|
|
9
|
+
onPointerMove: (event: PointerEvent<HTMLButtonElement>) => void;
|
|
10
|
+
onPointerUp: (event: PointerEvent<HTMLButtonElement>) => void;
|
|
11
|
+
onPointerCancel: () => void;
|
|
12
|
+
onPointerLeave: () => void;
|
|
13
|
+
onKeyDown: (event: KeyboardEvent<HTMLButtonElement>) => void;
|
|
14
|
+
onTouchStart: (event: TouchEvent<HTMLButtonElement>) => void;
|
|
15
|
+
onContextMenu: (event: MouseEvent<HTMLButtonElement>) => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
const HOLD_MS = 500;
|
|
3
|
+
const MOVE_TOLERANCE_PX = 10;
|
|
4
|
+
export function useHomeMotionPress({ onHome, onLongPress }) {
|
|
5
|
+
const press = useRef(undefined);
|
|
6
|
+
const suppressClick = useRef(false);
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
function cancelOtherPointer(event) {
|
|
9
|
+
if (press.current !== undefined && event.pointerId !== press.current.pointerId)
|
|
10
|
+
press.current = undefined;
|
|
11
|
+
}
|
|
12
|
+
function cancel() {
|
|
13
|
+
press.current = undefined;
|
|
14
|
+
suppressClick.current = false;
|
|
15
|
+
}
|
|
16
|
+
window.addEventListener("pointerdown", cancelOtherPointer, true);
|
|
17
|
+
window.addEventListener("blur", cancel);
|
|
18
|
+
return () => {
|
|
19
|
+
window.removeEventListener("pointerdown", cancelOtherPointer, true);
|
|
20
|
+
window.removeEventListener("blur", cancel);
|
|
21
|
+
};
|
|
22
|
+
}, []);
|
|
23
|
+
function cancelPress() {
|
|
24
|
+
press.current = undefined;
|
|
25
|
+
}
|
|
26
|
+
function onPointerDown(event) {
|
|
27
|
+
suppressClick.current = false;
|
|
28
|
+
press.current = undefined;
|
|
29
|
+
if (onLongPress === undefined || event.isPrimary === false || event.button !== 0)
|
|
30
|
+
return;
|
|
31
|
+
press.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, started: Date.now() };
|
|
32
|
+
}
|
|
33
|
+
function onPointerMove(event) {
|
|
34
|
+
const origin = press.current;
|
|
35
|
+
if (origin === undefined)
|
|
36
|
+
return;
|
|
37
|
+
if (event.pointerId !== origin.pointerId ||
|
|
38
|
+
Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > MOVE_TOLERANCE_PX) {
|
|
39
|
+
cancelPress();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function onPointerUp(event) {
|
|
43
|
+
const origin = press.current;
|
|
44
|
+
cancelPress();
|
|
45
|
+
if (origin === undefined || event.pointerId !== origin.pointerId || onLongPress === undefined)
|
|
46
|
+
return;
|
|
47
|
+
if (Math.hypot(event.clientX - origin.x, event.clientY - origin.y) > MOVE_TOLERANCE_PX)
|
|
48
|
+
return;
|
|
49
|
+
if (Date.now() - origin.started < HOLD_MS)
|
|
50
|
+
return;
|
|
51
|
+
suppressClick.current = true;
|
|
52
|
+
onLongPress();
|
|
53
|
+
}
|
|
54
|
+
function onClick(event) {
|
|
55
|
+
const suppress = suppressClick.current;
|
|
56
|
+
suppressClick.current = false;
|
|
57
|
+
if (suppress === true && event.detail !== 0) {
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
event.stopPropagation();
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
onHome();
|
|
63
|
+
}
|
|
64
|
+
function onKeyDown(event) {
|
|
65
|
+
suppressClick.current = false;
|
|
66
|
+
cancelPress();
|
|
67
|
+
if (event.altKey === true && event.key === "Enter" && onLongPress !== undefined) {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
if (event.repeat === false)
|
|
70
|
+
onLongPress();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function onTouchStart(event) {
|
|
74
|
+
if (event.touches.length > 1)
|
|
75
|
+
cancelPress();
|
|
76
|
+
}
|
|
77
|
+
function onContextMenu(event) {
|
|
78
|
+
if (press.current !== undefined || suppressClick.current === true)
|
|
79
|
+
event.preventDefault();
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
onClick,
|
|
83
|
+
onPointerDown,
|
|
84
|
+
onPointerMove,
|
|
85
|
+
onPointerUp,
|
|
86
|
+
onPointerCancel: cancelPress,
|
|
87
|
+
onPointerLeave: cancelPress,
|
|
88
|
+
onKeyDown,
|
|
89
|
+
onTouchStart,
|
|
90
|
+
onContextMenu,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=useHomeMotionPress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHomeMotionPress.js","sourceRoot":"","sources":["../../jsr/hooks/useHomeMotionPress.ts"],"names":[],"mappings":"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"}
|