@vibes.diy/use-vibes-base 0.14.1 → 0.14.2

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.
@@ -1,19 +1,72 @@
1
- import React, { useState } from 'react';
1
+ import React, { useState, useEffect, useId } from 'react';
2
2
  import { VibesButton } from '../VibesButton/VibesButton.js';
3
3
  import { generateFreshDataUrl, generateRemixUrl } from '../../utils/appSlug.js';
4
4
  export function VibesPanel({ style, className } = {}) {
5
- const [isExpanded, setIsExpanded] = useState(false);
5
+ const emailId = useId();
6
+ const [mode, setMode] = useState('default');
7
+ const [email, setEmail] = useState('');
8
+ const [inviteStatus, setInviteStatus] = useState('idle');
9
+ const [inviteMessage, setInviteMessage] = useState('');
6
10
  const handleMutateClick = () => {
7
- if (!isExpanded) {
8
- setIsExpanded(true);
11
+ if (mode === 'default') {
12
+ setMode('mutate');
9
13
  }
10
14
  };
15
+ const handleInviteClick = () => {
16
+ if (mode === 'default') {
17
+ setMode('invite');
18
+ setEmail('');
19
+ setInviteStatus('idle');
20
+ setInviteMessage('');
21
+ }
22
+ };
23
+ const handleBackClick = () => {
24
+ setMode('default');
25
+ };
11
26
  const handleFreshDataClick = () => {
12
27
  window.open(generateFreshDataUrl(), '_top');
13
28
  };
14
29
  const handleChangeCodeClick = () => {
15
30
  window.open(generateRemixUrl(), '_top');
16
31
  };
32
+ const handleLogoutClick = () => {
33
+ document.dispatchEvent(new CustomEvent('vibes-sync-disable'));
34
+ setTimeout(() => {
35
+ window.location.reload();
36
+ }, 100);
37
+ };
38
+ const handleInviteSubmit = (e) => {
39
+ e.preventDefault();
40
+ if (!email.trim())
41
+ return;
42
+ setInviteStatus('sending');
43
+ setInviteMessage('');
44
+ document.dispatchEvent(new CustomEvent('vibes-share-request', {
45
+ detail: {
46
+ email: email.trim(),
47
+ role: 'member',
48
+ right: 'read',
49
+ },
50
+ }));
51
+ };
52
+ useEffect(() => {
53
+ const handleShareSuccess = (event) => {
54
+ const customEvent = event;
55
+ setInviteStatus('success');
56
+ setInviteMessage(customEvent.detail?.message || `Invitation sent to ${customEvent.detail?.email}!`);
57
+ };
58
+ const handleShareError = (event) => {
59
+ const customEvent = event;
60
+ setInviteStatus('error');
61
+ setInviteMessage(customEvent.detail?.error?.message || 'Failed to send invitation. Please try again.');
62
+ };
63
+ document.addEventListener('vibes-share-success', handleShareSuccess);
64
+ document.addEventListener('vibes-share-error', handleShareError);
65
+ return () => {
66
+ document.removeEventListener('vibes-share-success', handleShareSuccess);
67
+ document.removeEventListener('vibes-share-error', handleShareError);
68
+ };
69
+ }, []);
17
70
  const containerStyle = {
18
71
  padding: '12px',
19
72
  display: 'flex',
@@ -30,6 +83,36 @@ export function VibesPanel({ style, className } = {}) {
30
83
  alignItems: 'center',
31
84
  gap: '12px',
32
85
  width: '250px',
33
- } }, isExpanded ? (React.createElement(React.Fragment, null, React.createElement(VibesButton, { variant: "primary", onClick: handleFreshDataClick }, "Fresh Data"), React.createElement(VibesButton, { variant: "secondary", onClick: handleChangeCodeClick }, "Change the Code"), React.createElement(VibesButton, { variant: "tertiary", onClick: () => setIsExpanded(false) }, "\u2190 Back"))) : (React.createElement(React.Fragment, null, React.createElement(VibesButton, { variant: "primary" }, "Logout"), React.createElement(VibesButton, { variant: "secondary", onClick: handleMutateClick }, "\uD83E\uDDDF Mutate"), React.createElement(VibesButton, { variant: "tertiary" }, "Invite"))))));
86
+ } }, mode === 'mutate' ? (React.createElement(React.Fragment, null, React.createElement(VibesButton, { variant: "primary", onClick: handleFreshDataClick }, "Fresh Data"), React.createElement(VibesButton, { variant: "secondary", onClick: handleChangeCodeClick }, "Change the Code"), React.createElement(VibesButton, { variant: "tertiary", onClick: handleBackClick }, "\u2190 Back"))) : mode === 'invite' ? (React.createElement(React.Fragment, null, inviteStatus === 'idle' ? (React.createElement("form", { onSubmit: handleInviteSubmit, style: { width: '100%', display: 'flex', flexDirection: 'column', gap: '12px' } }, React.createElement("label", { htmlFor: emailId, style: { alignSelf: 'flex-start', fontWeight: 600 } }, "Invite by email"), React.createElement("input", { id: emailId, type: "email", placeholder: "friend@example.com", value: email, onChange: (e) => setEmail(e.target.value), style: {
87
+ width: '100%',
88
+ padding: '1rem',
89
+ background: '#fff',
90
+ color: '#1a1a1a',
91
+ border: '3px solid #1a1a1a',
92
+ borderRadius: '12px',
93
+ fontSize: '1rem',
94
+ fontWeight: 500,
95
+ letterSpacing: '0.02em',
96
+ boxShadow: '4px 5px 0px 0px #666',
97
+ transition: 'all 0.15s ease',
98
+ outline: 'none',
99
+ boxSizing: 'border-box',
100
+ }, autoComplete: "email", required: true }), React.createElement(VibesButton, { variant: "primary", type: "submit", disabled: !email.trim() }, "Send Invite"))) : (React.createElement("div", { id: "invite-status", role: "status", "aria-live": "polite", style: {
101
+ padding: '0.75rem 1rem',
102
+ background: '#fff',
103
+ color: '#1a1a1a',
104
+ border: '3px solid #1a1a1a',
105
+ borderRadius: '12px',
106
+ fontSize: '0.875rem',
107
+ fontWeight: 500,
108
+ textAlign: 'center',
109
+ letterSpacing: '0.02em',
110
+ boxShadow: inviteStatus === 'sending'
111
+ ? '4px 5px 0px 0px #666'
112
+ : inviteStatus === 'error'
113
+ ? '4px 5px 0px 0px #DA291C'
114
+ : '4px 5px 0px 0px #51cf66',
115
+ transition: 'all 0.15s ease',
116
+ } }, inviteStatus === 'sending' ? 'Inviting...' : inviteMessage)), React.createElement(VibesButton, { variant: "tertiary", onClick: handleBackClick }, "\u2190 Back"))) : (React.createElement(React.Fragment, null, React.createElement(VibesButton, { variant: "primary", onClick: handleLogoutClick }, "Logout"), React.createElement(VibesButton, { variant: "secondary", onClick: handleMutateClick }, "\uD83E\uDDDF Mutate"), React.createElement(VibesButton, { variant: "tertiary", onClick: handleInviteClick }, "Invite"))))));
34
117
  }
35
118
  //# sourceMappingURL=VibesPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VibesPanel.js","sourceRoot":"","sources":["../../../jsr/components/VibesPanel/VibesPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAehF,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAoB,EAAE,EAAE;IACrE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IAAA,CACF,CAAC;IAEF,MAAM,oBAAoB,GAAG,GAAG,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,CAAC,CAAC;IAAA,CAC7C,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;IAAA,CACzC,CAAC;IAEF,MAAM,cAAc,GAAwB;QAC1C,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,MAAM;QACX,GAAG,KAAK;KACT,CAAC;IAEF,OAAO,CACL,6BAAK,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,IAC9C,6BACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,QAAQ;YACxB,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,OAAO;SACf,IAEA,UAAU,CAAC,CAAC,CAAC,CAEZ,0CACE,oBAAC,WAAW,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,oBAAoB,iBAE9C,EACd,oBAAC,WAAW,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,qBAAqB,sBAEjD,EACd,oBAAC,WAAW,IAAC,OAAO,EAAC,UAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,kBAErD,CACb,CACJ,CAAC,CAAC,CAAC,CAEF,0CACE,oBAAC,WAAW,IAAC,OAAO,EAAC,SAAS,aAAqB,EACnD,oBAAC,WAAW,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,iBAAiB,0BAE7C,EACd,oBAAC,WAAW,IAAC,OAAO,EAAC,UAAU,aAAqB,CACnD,CACJ,CACG,CACF,CACP,CAAC;AAAA,CACH"}
1
+ {"version":3,"file":"VibesPanel.js","sourceRoot":"","sources":["../../../jsr/components/VibesPanel/VibesPanel.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibes.diy/use-vibes-base",
3
- "version": "0.14.1",
3
+ "version": "0.14.2",
4
4
  "type": "module",
5
5
  "description": "Core components and utilities for use-vibes (internal workspace package)",
6
6
  "exports": {
@@ -15,9 +15,9 @@
15
15
  "@fireproof/core-runtime": "^0.23.14",
16
16
  "@fireproof/core-types-base": "^0.23.14",
17
17
  "@fireproof/core-types-protocols-cloud": "^0.23.14",
18
- "@vibes.diy/prompts": "^0.14.1",
19
- "@vibes.diy/use-vibes-types": "^0.14.1",
20
- "call-ai": "^0.14.1",
18
+ "@vibes.diy/prompts": "^0.14.2",
19
+ "@vibes.diy/use-vibes-types": "^0.14.2",
20
+ "call-ai": "^0.14.2",
21
21
  "react-dom": ">=19.1.0",
22
22
  "use-fireproof": "^0.23.14",
23
23
  "uuid": "^11.1.0"