genassist-chat-react 1.0.39 → 1.0.41
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 +3 -0
- package/dist/components/BubbleDock.d.ts +19 -0
- package/dist/components/BubbleDock.js +129 -0
- package/dist/components/DynamicFormMessage.d.ts +8 -2
- package/dist/components/DynamicFormMessage.js +99 -55
- package/dist/components/GenAgentChat.js +427 -247
- package/dist/components/GenAgentConfigPanel.d.ts +2 -0
- package/dist/components/GenAgentConfigPanel.js +4 -2
- package/dist/hooks/useChat.d.ts +4 -1
- package/dist/hooks/useChat.js +81 -39
- package/dist/hooks/useViewportManager.d.ts +2 -0
- package/dist/hooks/useViewportManager.js +14 -1
- package/dist/services/chatService.d.ts +19 -2
- package/dist/services/chatService.js +46 -3
- package/dist/styles/genAgentChatStyles.d.ts +13 -7
- package/dist/styles/genAgentChatStyles.js +127 -43
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.js +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -93,12 +93,15 @@ export default App;
|
|
|
93
93
|
| headerTitle | string | No | 'Chat' | Title displayed in the chat header |
|
|
94
94
|
| placeholder | string | No | 'Type a message...' | Placeholder text for the input |
|
|
95
95
|
| description | string | No | 'Support' | A short agent description text below header title |
|
|
96
|
+
| logoUrl | string | No | - | Custom logo URL shown in the header — the small circular logo beside the title |
|
|
97
|
+
| brandLogoUrl | string | No | - | Full brand logo/wordmark URL. When set, the header shows only this image instead of the small logo + title + description |
|
|
96
98
|
| serverUnavailableMessage | string | No | 'The agent is currently offline, please check back later. Thank you!' | Custom message for when agent is offline (Agent is off or server is down) |
|
|
97
99
|
| serverUnavailableContactUrl | string | No | - | Url to redirect user for contact support |
|
|
98
100
|
| serverUnavailableContactLabel | string | No | Contact support | Label for contact support |
|
|
99
101
|
| useWS | boolean | false | true | 'Enable or disable websocket...' |
|
|
100
102
|
| useAudio | boolean | false | false | 'Enable or disable audio on chat input...' |
|
|
101
103
|
| useFile | boolean | false | false | 'Enable or disable file attachments on chat input...' |
|
|
104
|
+
| quickInput | boolean | No | false | Opt-in. In floating mode, shows a quick-message input beside the launcher bubble during an ongoing conversation while the chat panel is closed |
|
|
102
105
|
| reCaptchaKey | string | false | undefined | 'Use google reCaptchaV3 site-key...' |
|
|
103
106
|
| mode | string | true | flotaing | 'Chat mode, floating or fullscreen' |
|
|
104
107
|
| allowedExtensions | string[] | false | undefined | 'Look for type AllowedExtension and see the supported list of extensions' |
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface BubbleDockProps {
|
|
3
|
+
primaryColor: string;
|
|
4
|
+
position: string;
|
|
5
|
+
offsetX: number;
|
|
6
|
+
offsetY: number;
|
|
7
|
+
windowWidth: number;
|
|
8
|
+
placeholder: string;
|
|
9
|
+
fontFamily: string;
|
|
10
|
+
fontSize: string;
|
|
11
|
+
chatBubbleIcon?: 'message' | 'sparkles' | 'x';
|
|
12
|
+
/** When false, only the launcher bubble is rendered (quick input hidden/dismissed). */
|
|
13
|
+
showQuickInput: boolean;
|
|
14
|
+
onOpen: () => void;
|
|
15
|
+
onSend: (text: string) => void;
|
|
16
|
+
onDismissQuickInput: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const BubbleDock: React.FC<BubbleDockProps>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
import { useRef, useState } from 'react';
|
|
14
|
+
import { ArrowUp, X } from 'lucide-react';
|
|
15
|
+
import { ChatBubble } from './ChatBubble';
|
|
16
|
+
var BUBBLE = 60;
|
|
17
|
+
var GAP = 12;
|
|
18
|
+
var INPUT_H = 52;
|
|
19
|
+
var DEFAULT_W = 240;
|
|
20
|
+
export var BubbleDock = function (_a) {
|
|
21
|
+
var _b, _c;
|
|
22
|
+
var primaryColor = _a.primaryColor, position = _a.position, offsetX = _a.offsetX, offsetY = _a.offsetY, windowWidth = _a.windowWidth, placeholder = _a.placeholder, fontFamily = _a.fontFamily, fontSize = _a.fontSize, chatBubbleIcon = _a.chatBubbleIcon, showQuickInput = _a.showQuickInput, onOpen = _a.onOpen, onSend = _a.onSend, onDismissQuickInput = _a.onDismissQuickInput;
|
|
23
|
+
var _d = useState(''), value = _d[0], setValue = _d[1];
|
|
24
|
+
var _e = useState(false), focused = _e[0], setFocused = _e[1];
|
|
25
|
+
var inputRef = useRef(null);
|
|
26
|
+
var isLeft = position.endsWith('left');
|
|
27
|
+
var isTop = position.startsWith('top');
|
|
28
|
+
var hSide = isLeft ? 'left' : 'right';
|
|
29
|
+
var vSide = isTop ? 'top' : 'bottom';
|
|
30
|
+
// Touch/mobile has no hover, so keep the remove (X) affordance always visible there.
|
|
31
|
+
var isMobile = windowWidth <= 768;
|
|
32
|
+
// Keep everything within the viewport on narrow screens.
|
|
33
|
+
var maxDockW = Math.max(160, windowWidth - offsetX * 2);
|
|
34
|
+
var collapsedW = Math.min(DEFAULT_W, maxDockW - BUBBLE - GAP);
|
|
35
|
+
var coverW = Math.min(collapsedW + BUBBLE + GAP, maxDockW);
|
|
36
|
+
var hasText = value.trim().length > 0;
|
|
37
|
+
var positionStyle = function () { return ({
|
|
38
|
+
position: 'fixed',
|
|
39
|
+
top: isTop ? offsetY : 'auto',
|
|
40
|
+
bottom: isTop ? 'auto' : offsetY,
|
|
41
|
+
left: isLeft ? offsetX : 'auto',
|
|
42
|
+
right: isLeft ? 'auto' : offsetX,
|
|
43
|
+
}); };
|
|
44
|
+
var submit = function () {
|
|
45
|
+
var _a;
|
|
46
|
+
var text = value.trim();
|
|
47
|
+
if (!text)
|
|
48
|
+
return;
|
|
49
|
+
onSend(text);
|
|
50
|
+
setValue('');
|
|
51
|
+
setFocused(false);
|
|
52
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.blur();
|
|
53
|
+
};
|
|
54
|
+
var bubbleStyle = __assign(__assign({}, positionStyle()), { opacity: focused ? 0 : 1, transform: focused ? 'scale(0.85)' : 'scale(1)', pointerEvents: focused ? 'none' : 'auto', transition: 'opacity 200ms ease, transform 200ms ease',
|
|
55
|
+
// `backwards` (not `both`) so the entrance doesn't pin opacity at 1 and block the focus fade-out.
|
|
56
|
+
animation: 'ga-bubble-in 220ms cubic-bezier(0.16, 1, 0.3, 1) backwards' });
|
|
57
|
+
// Pill anchors to the bubble's corner; the outer edge stays fixed while it grows over the bubble on focus.
|
|
58
|
+
var pillStyle = (_b = {
|
|
59
|
+
position: 'fixed'
|
|
60
|
+
},
|
|
61
|
+
_b[vSide] = offsetY + (BUBBLE - INPUT_H) / 2,
|
|
62
|
+
_b[hSide] = focused ? offsetX : offsetX + BUBBLE + GAP,
|
|
63
|
+
_b.width = focused ? coverW : collapsedW,
|
|
64
|
+
_b.height = INPUT_H,
|
|
65
|
+
_b.zIndex = 50,
|
|
66
|
+
_b.display = 'flex',
|
|
67
|
+
_b.alignItems = 'center',
|
|
68
|
+
_b.boxSizing = 'border-box',
|
|
69
|
+
_b.background = '#ffffff',
|
|
70
|
+
_b.border = focused ? '1.5px solid #111111' : '1px solid #e5e7eb',
|
|
71
|
+
_b.borderRadius = 999,
|
|
72
|
+
_b.padding = '0 6px',
|
|
73
|
+
_b.boxShadow = focused ? '0 8px 24px rgba(0, 0, 0, 0.16)' : '0 2px 10px rgba(0, 0, 0, 0.10)',
|
|
74
|
+
_b.transition = 'right 300ms cubic-bezier(0.16, 1, 0.3, 1), left 300ms cubic-bezier(0.16, 1, 0.3, 1), width 300ms cubic-bezier(0.16, 1, 0.3, 1), border-color 200ms ease, box-shadow 200ms ease',
|
|
75
|
+
_b.animation = 'ga-quickinput-in 320ms cubic-bezier(0.16, 1, 0.3, 1) 200ms both',
|
|
76
|
+
_b);
|
|
77
|
+
var dismissStyle = (_c = {
|
|
78
|
+
position: 'absolute',
|
|
79
|
+
top: -8
|
|
80
|
+
},
|
|
81
|
+
_c[isLeft ? 'right' : 'left'] = 10,
|
|
82
|
+
_c.width = 22,
|
|
83
|
+
_c.height = 22,
|
|
84
|
+
_c.borderRadius = '50%',
|
|
85
|
+
_c.background = '#111111',
|
|
86
|
+
_c.color = '#ffffff',
|
|
87
|
+
_c.border = '2px solid #ffffff',
|
|
88
|
+
_c.display = 'flex',
|
|
89
|
+
_c.alignItems = 'center',
|
|
90
|
+
_c.justifyContent = 'center',
|
|
91
|
+
_c.cursor = 'pointer',
|
|
92
|
+
_c.padding = 0,
|
|
93
|
+
_c.zIndex = 51,
|
|
94
|
+
_c);
|
|
95
|
+
var sendStyle = {
|
|
96
|
+
width: 38,
|
|
97
|
+
height: 38,
|
|
98
|
+
borderRadius: '50%',
|
|
99
|
+
flexShrink: 0,
|
|
100
|
+
border: 'none',
|
|
101
|
+
display: 'flex',
|
|
102
|
+
alignItems: 'center',
|
|
103
|
+
justifyContent: 'center',
|
|
104
|
+
cursor: hasText ? 'pointer' : 'default',
|
|
105
|
+
background: hasText ? primaryColor : '#eef0f2',
|
|
106
|
+
transition: 'background-color 180ms ease',
|
|
107
|
+
marginLeft: 6,
|
|
108
|
+
};
|
|
109
|
+
return (_jsxs(_Fragment, { children: [_jsx(ChatBubble, { showChat: false, onClick: onOpen, primaryColor: primaryColor, style: bubbleStyle, chatBubbleIcon: chatBubbleIcon }), showQuickInput && (_jsxs("div", { className: "ga-quick", style: pillStyle, children: [_jsx("button", { type: "button", className: "ga-quick-x", style: isMobile ? __assign(__assign({}, dismissStyle), { opacity: 1, transform: 'scale(1)', pointerEvents: 'auto' }) : dismissStyle, title: "Remove", "aria-label": "Remove quick message", onClick: function (e) {
|
|
110
|
+
e.stopPropagation();
|
|
111
|
+
onDismissQuickInput();
|
|
112
|
+
}, children: _jsx(X, { size: 12, strokeWidth: 3 }) }), _jsx("input", { ref: inputRef, type: "text", value: value, placeholder: placeholder, onChange: function (e) { return setValue(e.target.value); }, onFocus: function () { return setFocused(true); }, onBlur: function () { return setFocused(false); }, onKeyDown: function (e) {
|
|
113
|
+
if (e.key === 'Enter') {
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
submit();
|
|
116
|
+
}
|
|
117
|
+
}, style: {
|
|
118
|
+
flex: 1,
|
|
119
|
+
minWidth: 0,
|
|
120
|
+
border: 'none',
|
|
121
|
+
outline: 'none',
|
|
122
|
+
background: 'transparent',
|
|
123
|
+
fontSize: fontSize,
|
|
124
|
+
fontFamily: fontFamily,
|
|
125
|
+
color: '#111111',
|
|
126
|
+
padding: '0 6px 0 12px',
|
|
127
|
+
} }), _jsx("button", { type: "button", style: sendStyle, title: "Send", "aria-label": "Send message", disabled: !hasText, onMouseDown: function (e) { return e.preventDefault(); }, onClick: submit, children: _jsx(ArrowUp, { size: 18, strokeWidth: 3, color: hasText ? '#ffffff' : '#9aa0aa' }) })] }))] }));
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnViYmxlRG9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0J1YmJsZURvY2sudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFtQjFDLElBQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixJQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDZixJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbkIsSUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXRCLE1BQU0sQ0FBQyxJQUFNLFVBQVUsR0FBOEIsVUFBQyxFQWNyRDs7UUFiQyxZQUFZLGtCQUFBLEVBQ1osUUFBUSxjQUFBLEVBQ1IsT0FBTyxhQUFBLEVBQ1AsT0FBTyxhQUFBLEVBQ1AsV0FBVyxpQkFBQSxFQUNYLFdBQVcsaUJBQUEsRUFDWCxVQUFVLGdCQUFBLEVBQ1YsUUFBUSxjQUFBLEVBQ1IsY0FBYyxvQkFBQSxFQUNkLGNBQWMsb0JBQUEsRUFDZCxNQUFNLFlBQUEsRUFDTixNQUFNLFlBQUEsRUFDTixtQkFBbUIseUJBQUE7SUFFYixJQUFBLEtBQW9CLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBL0IsS0FBSyxRQUFBLEVBQUUsUUFBUSxRQUFnQixDQUFDO0lBQ2pDLElBQUEsS0FBd0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUF0QyxPQUFPLFFBQUEsRUFBRSxVQUFVLFFBQW1CLENBQUM7SUFDOUMsSUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFtQixJQUFJLENBQUMsQ0FBQztJQUVoRCxJQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFD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RUFBaEIsQ0FBZ0IsRUFDL0IsTUFBTSxFQUFFLGNBQU0sT0FBQSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQWpCLENBQWlCLEVBQy9CLFNBQVMsRUFBRSxVQUFDLENBQUM7NEJBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dDQUN0QixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7Z0NBQ25CLE1BQU0sRUFBRSxDQUFDOzRCQUNYLENBQUM7d0JBQ0gsQ0FBQyxFQUNELEtBQUssRUFBRTs0QkFDTCxJQUFJLEVBQUUsQ0FBQzs0QkFDUCxRQUFRLEVBQUUsQ0FBQzs0QkFDWCxNQUFNLEVBQUUsTUFBTTs0QkFDZCxPQUFPLEVBQUUsTUFBTTs0QkFDZixVQUFVLEVBQUUsYUFBYTs0QkFDekIsUUFBUSxVQUFBOzRCQUNSLFVBQVUsWUFBQTs0QkFDVixLQUFLLEVBQUUsU0FBUzs0QkFDaEIsT0FBTyxFQUFFLGNBQWM7eUJBQ3hCLEdBQ0QsRUFFRixpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxTQUFTLEVBQ2hCLEtBQUssRUFBQyxNQUFNLGdCQUNELGNBQWMsRUFDekIsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUNsQixXQUFXLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQWxCLENBQWtCLEVBQ3RDLE9BQU8sRUFBRSxNQUFNLFlBRWYsS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFJLEdBQ3RFLElBQ0wsQ0FDUCxJQUNBLENBQ0osQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQXJyb3dVcCwgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcblxuaW50ZXJmYWNlIEJ1YmJsZURvY2tQcm9wcyB7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nO1xuICBwb3NpdGlvbjogc3RyaW5nO1xuICBvZmZzZXRYOiBudW1iZXI7XG4gIG9mZnNldFk6IG51bWJlcjtcbiAgd2luZG93V2lkdGg6IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgZm9udEZhbWlseTogc3RyaW5nO1xuICBmb250U2l6ZTogc3RyaW5nO1xuICBjaGF0QnViYmxlSWNvbj86ICdtZXNzYWdlJyB8ICdzcGFya2xlcycgfCAneCc7XG4gIC8qKiBXaGVuIGZhbHNlLCBvbmx5IHRoZSBsYXVuY2hlciBidWJibGUgaXMgcmVuZGVyZWQgKHF1aWNrIGlucHV0IGhpZGRlbi9kaXNtaXNzZWQpLiAqL1xuICBzaG93UXVpY2tJbnB1dDogYm9vbGVhbjtcbiAgb25PcGVuOiAoKSA9PiB2b2lkO1xuICBvblNlbmQ6ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uRGlzbWlzc1F1aWNrSW5wdXQ6ICgpID0+IHZvaWQ7XG59XG5cbmNvbnN0IEJVQkJMRSA9IDYwO1xuY29uc3QgR0FQID0gMTI7XG5jb25zdCBJTlBVVF9IID0gNTI7XG5jb25zdCBERUZBVUxUX1cgPSAyNDA7XG5cbmV4cG9ydCBjb25zdCBCdWJibGVEb2NrOiBSZWFjdC5GQzxCdWJibGVEb2NrUHJvcHM+ID0gKHtcbiAgcHJpbWFyeUNvbG9yLFxuICBwb3NpdGlvbixcbiAgb2Zmc2V0WCxcbiAgb2Zmc2V0WSxcbiAgd2luZG93V2lkdGgsXG4gIHBsYWNlaG9sZGVyLFxuICBmb250RmFtaWx5LFxuICBmb250U2l6ZSxcbiAgY2hhdEJ1YmJsZUljb24sXG4gIHNob3dRdWlja0lucHV0LFxuICBvbk9wZW4sXG4gIG9uU2VuZCxcbiAgb25EaXNtaXNzUXVpY2tJbnB1dCxcbn0pID0+IHtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtmb2N1c2VkLCBzZXRGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgaXNMZWZ0ID0gcG9zaXRpb24uZW5kc1dpdGgoJ2xlZnQnKTtcbiAgY29uc3QgaXNUb3AgPSBwb3NpdGlvbi5zdGFydHNXaXRoKCd0b3AnKTtcbiAgY29uc3QgaFNpZGUgPSBpc0xlZnQgPyAnbGVmdCcgOiAncmlnaHQnO1xuICBjb25zdCB2U2lkZSA9IGlzVG9wID8gJ3RvcCcgOiAnYm90dG9tJztcbiAgLy8gVG91Y2gvbW9iaWxlIGhhcyBubyBob3Zlciwgc28ga2VlcCB0aGUgcmVtb3ZlIChYKSBhZmZvcmRhbmNlIGFsd2F5cyB2aXNpYmxlIHRoZXJlLlxuICBjb25zdCBpc01vYmlsZSA9IHdpbmRvd1dpZHRoIDw9IDc2ODtcblxuICAvLyBLZWVwIGV2ZXJ5dGhpbmcgd2l0aGluIHRoZSB2aWV3cG9ydCBvbiBuYXJyb3cgc2NyZWVucy5cbiAgY29uc3QgbWF4RG9ja1cgPSBNYXRoLm1heCgxNjAsIHdpbmRvd1dpZHRoIC0gb2Zmc2V0WCAqIDIpO1xuICBjb25zdCBjb2xsYXBzZWRXID0gTWF0aC5taW4oREVGQVVMVF9XLCBtYXhEb2NrVyAtIEJVQkJMRSAtIEdBUCk7XG4gIGNvbnN0IGNvdmVyVyA9IE1hdGgubWluKGNvbGxhcHNlZFcgKyBCVUJCTEUgKyBHQVAsIG1heERvY2tXKTtcbiAgY29uc3QgaGFzVGV4dCA9IHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IHBvc2l0aW9uU3R5bGUgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiAoe1xuICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgIHRvcDogaXNUb3AgPyBvZmZzZXRZIDogJ2F1dG8nLFxuICAgIGJvdHRvbTogaXNUb3AgPyAnYXV0bycgOiBvZmZzZXRZLFxuICAgIGxlZnQ6IGlzTGVmdCA/IG9mZnNldFggOiAnYXV0bycsXG4gICAgcmlnaHQ6IGlzTGVmdCA/ICdhdXRvJyA6IG9mZnNldFgsXG4gIH0pO1xuXG4gIGNvbnN0IHN1Ym1pdCA9ICgpID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gdmFsdWUudHJpbSgpO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIG9uU2VuZCh0ZXh0KTtcbiAgICBzZXRWYWx1ZSgnJyk7XG4gICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgaW5wdXRSZWYuY3VycmVudD8uYmx1cigpO1xuICB9O1xuXG4gIGNvbnN0IGJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLnBvc2l0aW9uU3R5bGUoKSxcbiAgICBvcGFjaXR5OiBmb2N1c2VkID8gMCA6IDEsXG4gICAgdHJhbnNmb3JtOiBmb2N1c2VkID8gJ3NjYWxlKDAuODUpJyA6ICdzY2FsZSgxKScsXG4gICAgcG9pbnRlckV2ZW50czogZm9jdXNlZCA/ICdub25lJyA6ICdhdXRvJyxcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAyMDBtcyBlYXNlLCB0cmFuc2Zvcm0gMjAwbXMgZWFzZScsXG4gICAgLy8gYGJhY2t3YXJkc2AgKG5vdCBgYm90aGApIHNvIHRoZSBlbnRyYW5jZSBkb2Vzbid0IHBpbiBvcGFjaXR5IGF0IDEgYW5kIGJsb2NrIHRoZSBmb2N1cyBmYWRlLW91dC5cbiAgICBhbmltYXRpb246ICdnYS1idWJibGUtaW4gMjIwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkgYmFja3dhcmRzJyxcbiAgfTtcblxuICAvLyBQaWxsIGFuY2hvcnMgdG8gdGhlIGJ1YmJsZSdzIGNvcm5lcjsgdGhlIG91dGVyIGVkZ2Ugc3RheXMgZml4ZWQgd2hpbGUgaXQgZ3Jvd3Mgb3ZlciB0aGUgYnViYmxlIG9uIGZvY3VzLlxuICBjb25zdCBwaWxsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgW3ZTaWRlXTogb2Zmc2V0WSArIChCVUJCTEUgLSBJTlBVVF9IKSAvIDIsXG4gICAgW2hTaWRlXTogZm9jdXNlZCA/IG9mZnNldFggOiBvZmZzZXRYICsgQlVCQkxFICsgR0FQLFxuICAgIHdpZHRoOiBmb2N1c2VkID8gY292ZXJXIDogY29sbGFwc2VkVyxcbiAgICBoZWlnaHQ6IElOUFVUX0gsXG4gICAgekluZGV4OiA1MCxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gICAgYmFja2dyb3VuZDogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogZm9jdXNlZCA/ICcxLjVweCBzb2xpZCAjMTExMTExJyA6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgYm9yZGVyUmFkaXVzOiA5OTksXG4gICAgcGFkZGluZzogJzAgNnB4JyxcbiAgICBib3hTaGFkb3c6IGZvY3VzZWQgPyAnMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMTYpJyA6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xMCknLFxuICAgIHRyYW5zaXRpb246XG4gICAgICAncmlnaHQgMzAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSksIGxlZnQgMzAwbXMgY3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSksIHdpZHRoIDMwMG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpLCBib3JkZXItY29sb3IgMjAwbXMgZWFzZSwgYm94LXNoYWRvdyAyMDBtcyBlYXNlJyxcbiAgICBhbmltYXRpb246ICdnYS1xdWlja2lucHV0LWluIDMyMG1zIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpIDIwMG1zIGJvdGgnLFxuICB9O1xuXG4gIGNvbnN0IGRpc21pc3NTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IC04LFxuICAgIFtpc0xlZnQgPyAncmlnaHQnIDogJ2xlZnQnXTogMTAsXG4gICAgd2lkdGg6IDIyLFxuICAgIGhlaWdodDogMjIsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICBiYWNrZ3JvdW5kOiAnIzExMTExMScsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXI6ICcycHggc29saWQgI2ZmZmZmZicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIHpJbmRleDogNTEsXG4gIH07XG5cbiAgY29uc3Qgc2VuZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAzOCxcbiAgICBoZWlnaHQ6IDM4LFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgZmxleFNocmluazogMCxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogaGFzVGV4dCA/ICdwb2ludGVyJyA6ICdkZWZhdWx0JyxcbiAgICBiYWNrZ3JvdW5kOiBoYXNUZXh0ID8gcHJpbWFyeUNvbG9yIDogJyNlZWYwZjInLFxuICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDE4MG1zIGVhc2UnLFxuICAgIG1hcmdpbkxlZnQ6IDYsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgc2hvd0NoYXQ9e2ZhbHNlfVxuICAgICAgICBvbkNsaWNrPXtvbk9wZW59XG4gICAgICAgIHByaW1hcnlDb2xvcj17cHJpbWFyeUNvbG9yfVxuICAgICAgICBzdHlsZT17YnViYmxlU3R5bGV9XG4gICAgICAgIGNoYXRCdWJibGVJY29uPXtjaGF0QnViYmxlSWNvbn1cbiAgICAgIC8+XG5cbiAgICAgIHtzaG93UXVpY2tJbnB1dCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ2EtcXVpY2tcIiBzdHlsZT17cGlsbFN0eWxlfT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXF1aWNrLXhcIlxuICAgICAgICAgICAgc3R5bGU9e2lzTW9iaWxlID8geyAuLi5kaXNtaXNzU3R5bGUsIG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJywgcG9pbnRlckV2ZW50czogJ2F1dG8nIH0gOiBkaXNtaXNzU3R5bGV9XG4gICAgICAgICAgICB0aXRsZT1cIlJlbW92ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiUmVtb3ZlIHF1aWNrIG1lc3NhZ2VcIlxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgb25EaXNtaXNzUXVpY2tJbnB1dCgpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8WCBzaXplPXsxMn0gc3Ryb2tlV2lkdGg9ezN9IC8+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWQodHJ1ZSl9XG4gICAgICAgICAgICBvbkJsdXI9eygpID0+IHNldEZvY3VzZWQoZmFsc2UpfVxuICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc3VibWl0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgIG91dGxpbmU6ICdub25lJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgICAgICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgICAgICAgICAgIHBhZGRpbmc6ICcwIDZweCAwIDEycHgnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBzdHlsZT17c2VuZFN0eWxlfVxuICAgICAgICAgICAgdGl0bGU9XCJTZW5kXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZW5kIG1lc3NhZ2VcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFoYXNUZXh0fVxuICAgICAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgICAgICBvbkNsaWNrPXtzdWJtaXR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj17aGFzVGV4dCA/ICcjZmZmZmZmJyA6ICcjOWFhMGFhJ30gLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufTtcbiJdfQ==
|
|
@@ -24,8 +24,14 @@ interface DynamicFormMessageProps {
|
|
|
24
24
|
isSubmitted: boolean;
|
|
25
25
|
primaryColor?: string;
|
|
26
26
|
fontFamily?: string;
|
|
27
|
-
/**
|
|
28
|
-
|
|
27
|
+
/**
|
|
28
|
+
* "card" = inline chat bubble
|
|
29
|
+
* "footer" = compact footer layout
|
|
30
|
+
* "fullscreen" = fills the chat panel; message shown as a heading on top
|
|
31
|
+
*/
|
|
32
|
+
variant?: 'card' | 'footer' | 'fullscreen';
|
|
33
|
+
/** Optional heading above the message (e.g. the agent name) for the fullscreen layout. */
|
|
34
|
+
title?: string;
|
|
29
35
|
}
|
|
30
36
|
declare const DynamicFormMessage: React.FC<DynamicFormMessageProps>;
|
|
31
37
|
export default DynamicFormMessage;
|
|
@@ -12,12 +12,15 @@ var __assign = (this && this.__assign) || function () {
|
|
|
12
12
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
13
|
import { useState } from 'react';
|
|
14
14
|
var DynamicFormMessage = function (_a) {
|
|
15
|
-
var schema = _a.schema, onSubmit = _a.onSubmit, onCancel = _a.onCancel, isSubmitting = _a.isSubmitting, isSubmitted = _a.isSubmitted, _b = _a.primaryColor, primaryColor = _b === void 0 ? '#2563eb' : _b, _c = _a.fontFamily, fontFamily = _c === void 0 ? 'inherit' : _c, _d = _a.variant, variant = _d === void 0 ? 'card' : _d;
|
|
15
|
+
var schema = _a.schema, onSubmit = _a.onSubmit, onCancel = _a.onCancel, isSubmitting = _a.isSubmitting, isSubmitted = _a.isSubmitted, _b = _a.primaryColor, primaryColor = _b === void 0 ? '#2563eb' : _b, _c = _a.fontFamily, fontFamily = _c === void 0 ? 'inherit' : _c, _d = _a.variant, variant = _d === void 0 ? 'card' : _d, title = _a.title;
|
|
16
16
|
var _e = useState({}), formData = _e[0], setFormData = _e[1];
|
|
17
17
|
var _f = useState({}), errors = _f[0], setErrors = _f[1];
|
|
18
|
+
var _g = useState(null), focused = _g[0], setFocused = _g[1];
|
|
18
19
|
var isFooter = variant === 'footer';
|
|
20
|
+
var isFullscreen = variant === 'fullscreen';
|
|
19
21
|
var allFieldsOptional = schema.fields.every(function (f) { return !f.required; });
|
|
20
22
|
var showCancel = !!onCancel && allFieldsOptional && !isSubmitted;
|
|
23
|
+
var disabled = isSubmitted || isSubmitting;
|
|
21
24
|
var handleChange = function (name, value) {
|
|
22
25
|
setFormData(function (prev) {
|
|
23
26
|
var _a;
|
|
@@ -48,82 +51,123 @@ var DynamicFormMessage = function (_a) {
|
|
|
48
51
|
onSubmit(formData);
|
|
49
52
|
};
|
|
50
53
|
// ── Styles (variant-aware) ──
|
|
51
|
-
var
|
|
52
|
-
? { width: '100%' }
|
|
53
|
-
:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
var formStyle = isFullscreen
|
|
55
|
+
? { display: 'flex', flexDirection: 'column', height: '100%', width: '100%', fontFamily: fontFamily }
|
|
56
|
+
: isFooter
|
|
57
|
+
? { width: '100%', fontFamily: fontFamily }
|
|
58
|
+
: {
|
|
59
|
+
backgroundColor: '#ffffff',
|
|
60
|
+
border: '1px solid #e5e7eb',
|
|
61
|
+
borderRadius: '14px',
|
|
62
|
+
padding: '16px',
|
|
63
|
+
maxWidth: '100%',
|
|
64
|
+
fontFamily: fontFamily,
|
|
65
|
+
boxShadow: '0 1px 2px rgba(0,0,0,0.04)',
|
|
66
|
+
};
|
|
67
|
+
var headerStyle = {
|
|
68
|
+
padding: isFullscreen ? '20px 22px 16px' : 0,
|
|
69
|
+
borderBottom: isFullscreen ? '1px solid #eef0f3' : 'none',
|
|
70
|
+
flexShrink: 0,
|
|
66
71
|
};
|
|
67
|
-
var
|
|
68
|
-
|
|
69
|
-
:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
var titleStyle = {
|
|
73
|
+
fontSize: '13px',
|
|
74
|
+
fontWeight: 700,
|
|
75
|
+
color: primaryColor,
|
|
76
|
+
letterSpacing: '0.02em',
|
|
77
|
+
textTransform: 'uppercase',
|
|
78
|
+
marginBottom: '6px',
|
|
79
|
+
};
|
|
80
|
+
var messageStyle = {
|
|
81
|
+
fontSize: isFullscreen ? '18px' : isFooter ? '13px' : '15px',
|
|
82
|
+
lineHeight: 1.4,
|
|
83
|
+
color: isFullscreen ? '#111827' : '#374151',
|
|
84
|
+
marginBottom: isFullscreen ? 0 : isFooter ? '10px' : '14px',
|
|
85
|
+
fontWeight: isFullscreen ? 700 : 500,
|
|
72
86
|
};
|
|
87
|
+
var bodyStyle = isFullscreen
|
|
88
|
+
? { flex: 1, overflowY: 'auto', padding: '18px 22px', display: 'flex', flexDirection: 'column', gap: '18px' }
|
|
89
|
+
: isFooter
|
|
90
|
+
? { maxHeight: '220px', overflowY: 'auto', paddingRight: '4px', display: 'flex', flexDirection: 'column', gap: '12px' }
|
|
91
|
+
: { display: 'flex', flexDirection: 'column', gap: '14px' };
|
|
73
92
|
var labelStyle = {
|
|
74
93
|
display: 'block',
|
|
75
|
-
fontSize:
|
|
94
|
+
fontSize: '13px',
|
|
76
95
|
fontWeight: 600,
|
|
77
|
-
color: '#
|
|
78
|
-
marginBottom: '
|
|
79
|
-
fontFamily: fontFamily,
|
|
96
|
+
color: '#1f2937',
|
|
97
|
+
marginBottom: '6px',
|
|
80
98
|
};
|
|
81
99
|
var descriptionStyle = {
|
|
82
|
-
fontSize: '
|
|
100
|
+
fontSize: '12px',
|
|
83
101
|
color: '#6b7280',
|
|
84
|
-
|
|
85
|
-
|
|
102
|
+
marginTop: '-2px',
|
|
103
|
+
marginBottom: '7px',
|
|
104
|
+
lineHeight: 1.4,
|
|
86
105
|
};
|
|
87
|
-
var
|
|
106
|
+
var baseInputStyle = function (name) { return ({
|
|
88
107
|
width: '100%',
|
|
89
|
-
padding:
|
|
90
|
-
fontSize:
|
|
91
|
-
border:
|
|
92
|
-
borderRadius: '
|
|
108
|
+
padding: '10px 12px',
|
|
109
|
+
fontSize: '14px',
|
|
110
|
+
border: "1.5px solid ".concat(focused === name ? primaryColor : '#e5e7eb'),
|
|
111
|
+
borderRadius: '10px',
|
|
93
112
|
outline: 'none',
|
|
94
113
|
boxSizing: 'border-box',
|
|
95
|
-
backgroundColor:
|
|
114
|
+
backgroundColor: disabled ? '#f3f4f6' : '#ffffff',
|
|
115
|
+
color: '#111827',
|
|
96
116
|
fontFamily: fontFamily,
|
|
97
|
-
|
|
98
|
-
|
|
117
|
+
transition: 'border-color 120ms ease, box-shadow 120ms ease',
|
|
118
|
+
boxShadow: focused === name ? "0 0 0 3px ".concat(hexToSoftRing(primaryColor)) : 'none',
|
|
119
|
+
}); };
|
|
99
120
|
var errorStyle = {
|
|
100
121
|
fontSize: '12px',
|
|
101
122
|
color: '#ef4444',
|
|
102
|
-
marginTop: '
|
|
123
|
+
marginTop: '5px',
|
|
103
124
|
};
|
|
104
|
-
var
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
125
|
+
var footerStyle = __assign({ display: 'flex', gap: '10px', flexShrink: 0 }, (isFullscreen
|
|
126
|
+
? { padding: '16px 22px', borderTop: '1px solid #eef0f3' }
|
|
127
|
+
: { marginTop: isFooter ? '8px' : '14px' }));
|
|
128
|
+
var primaryButtonStyle = {
|
|
129
|
+
flex: 1,
|
|
130
|
+
padding: '11px 16px',
|
|
131
|
+
fontSize: '14px',
|
|
108
132
|
fontWeight: 600,
|
|
109
133
|
color: '#ffffff',
|
|
110
|
-
backgroundColor:
|
|
134
|
+
backgroundColor: disabled ? '#9ca3af' : primaryColor,
|
|
111
135
|
border: 'none',
|
|
112
|
-
borderRadius:
|
|
113
|
-
cursor:
|
|
114
|
-
opacity: isSubmitting ? 0.
|
|
115
|
-
|
|
136
|
+
borderRadius: '10px',
|
|
137
|
+
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
138
|
+
opacity: isSubmitting ? 0.75 : 1,
|
|
139
|
+
fontFamily: fontFamily,
|
|
140
|
+
transition: 'opacity 120ms ease',
|
|
141
|
+
};
|
|
142
|
+
var skipButtonStyle = {
|
|
143
|
+
padding: '11px 16px',
|
|
144
|
+
fontSize: '14px',
|
|
145
|
+
fontWeight: 600,
|
|
146
|
+
color: '#6b7280',
|
|
147
|
+
backgroundColor: 'transparent',
|
|
148
|
+
border: '1.5px solid #e5e7eb',
|
|
149
|
+
borderRadius: '10px',
|
|
150
|
+
cursor: isSubmitting ? 'not-allowed' : 'pointer',
|
|
116
151
|
fontFamily: fontFamily,
|
|
117
152
|
};
|
|
118
|
-
var
|
|
119
|
-
|
|
120
|
-
alignItems: 'center',
|
|
121
|
-
gap: '8px',
|
|
153
|
+
var renderField = function (field) {
|
|
154
|
+
var _a;
|
|
155
|
+
return (_jsxs("div", { children: [_jsxs("label", { style: labelStyle, children: [field.label, field.required && _jsx("span", { style: { color: '#ef4444', marginLeft: '3px' }, children: "*" })] }), field.description && _jsx("div", { style: descriptionStyle, children: field.description }), field.type === 'text' && (_jsx("input", { type: "text", style: baseInputStyle(field.name), placeholder: field.placeholder || '', value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'number' && (_jsx("input", { type: "number", style: baseInputStyle(field.name), placeholder: field.placeholder || '', value: formData[field.name] !== undefined ? String(formData[field.name]) : '', onChange: function (e) { return handleChange(field.name, e.target.value ? Number(e.target.value) : ''); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'date' && (_jsx("input", { type: "date", style: baseInputStyle(field.name), value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled })), field.type === 'select' && (_jsxs("select", { style: __assign(__assign({}, baseInputStyle(field.name)), { appearance: 'auto', cursor: disabled ? 'not-allowed' : 'pointer' }), value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, onFocus: function () { return setFocused(field.name); }, onBlur: function () { return setFocused(null); }, disabled: disabled, children: [_jsx("option", { value: "", children: field.placeholder || 'Select...' }), (_a = field.options) === null || _a === void 0 ? void 0 : _a.map(function (opt) { return (_jsx("option", { value: opt.value, children: opt.label }, opt.value)); })] })), field.type === 'boolean' && (_jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: '10px', cursor: disabled ? 'not-allowed' : 'pointer' }, children: [_jsx("input", { type: "checkbox", checked: formData[field.name] || false, onChange: function (e) { return handleChange(field.name, e.target.checked); }, disabled: disabled, style: { width: '17px', height: '17px', accentColor: primaryColor, cursor: 'inherit' } }), _jsx("span", { style: { fontSize: '14px', color: '#374151' }, children: field.placeholder || 'Yes' })] })), errors[field.name] && _jsx("div", { style: errorStyle, children: errors[field.name] })] }, field.name));
|
|
122
156
|
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
return (_jsxs("div", { style: fieldContainerStyle, children: [_jsxs("label", { style: labelStyle, children: [field.label, field.required && _jsx("span", { style: { color: '#ef4444', marginLeft: '2px' }, children: "*" })] }), field.description && (_jsx("div", { style: descriptionStyle, children: field.description })), field.type === 'text' && (_jsx("input", { type: "text", style: inputStyle, placeholder: field.placeholder || '', value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting })), field.type === 'number' && (_jsx("input", { type: "number", style: inputStyle, placeholder: field.placeholder || '', value: formData[field.name] !== undefined ? String(formData[field.name]) : '', onChange: function (e) { return handleChange(field.name, e.target.value ? Number(e.target.value) : ''); }, disabled: isSubmitted || isSubmitting })), field.type === 'date' && (_jsx("input", { type: "date", style: inputStyle, value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting })), field.type === 'select' && (_jsxs("select", { style: selectStyle, value: formData[field.name] || '', onChange: function (e) { return handleChange(field.name, e.target.value); }, disabled: isSubmitted || isSubmitting, children: [_jsx("option", { value: "", children: field.placeholder || 'Select...' }), (_a = field.options) === null || _a === void 0 ? void 0 : _a.map(function (opt) { return (_jsx("option", { value: opt.value, children: opt.label }, opt.value)); })] })), field.type === 'boolean' && (_jsxs("div", { style: checkboxContainerStyle, children: [_jsx("input", { type: "checkbox", checked: formData[field.name] || false, onChange: function (e) { return handleChange(field.name, e.target.checked); }, disabled: isSubmitted || isSubmitting, style: { width: '16px', height: '16px' } }), _jsx("span", { style: { fontSize: '14px', color: '#374151' }, children: field.placeholder || 'Yes' })] })), errors[field.name] && (_jsx("div", { style: errorStyle, children: errors[field.name] }))] }, field.name));
|
|
126
|
-
}) }), _jsxs("div", { style: { display: 'flex', gap: '8px', marginTop: isFooter ? '2px' : '4px' }, children: [showCancel && (_jsx("button", { type: "button", style: __assign(__assign({}, buttonStyle), { marginTop: 0, backgroundColor: 'transparent', color: '#6b7280', border: '1px solid #d1d5db', cursor: isSubmitting ? 'not-allowed' : 'pointer' }), disabled: isSubmitting, onClick: onCancel, children: "Skip" })), _jsx("button", { type: "submit", style: __assign(__assign({}, buttonStyle), { marginTop: 0 }), disabled: isSubmitted || isSubmitting, children: isSubmitted ? 'Submitted' : isSubmitting ? 'Submitting...' : 'Submit' })] })] }));
|
|
157
|
+
var buttons = (_jsxs("div", { style: footerStyle, children: [showCancel && (_jsx("button", { type: "button", style: skipButtonStyle, disabled: isSubmitting, onClick: onCancel, children: "Skip" })), _jsx("button", { type: "submit", style: primaryButtonStyle, disabled: disabled, children: isSubmitted ? 'Submitted' : isSubmitting ? 'Submitting…' : 'Submit' })] }));
|
|
158
|
+
return (_jsxs("form", { onSubmit: handleSubmit, style: formStyle, children: [(schema.message || (isFullscreen && title)) && (_jsxs("div", { style: headerStyle, children: [isFullscreen && title && _jsx("div", { style: titleStyle, children: title }), schema.message && _jsx("div", { style: messageStyle, children: schema.message })] })), _jsx("div", { style: bodyStyle, children: schema.fields.map(renderField) }), buttons] }));
|
|
127
159
|
};
|
|
160
|
+
/** Translucent version of the primary color for the focus ring (accepts #rgb/#rrggbb). */
|
|
161
|
+
function hexToSoftRing(hex) {
|
|
162
|
+
var m = hex.replace('#', '');
|
|
163
|
+
var full = m.length === 3 ? m.split('').map(function (c) { return c + c; }).join('') : m;
|
|
164
|
+
var int = parseInt(full, 16);
|
|
165
|
+
if (full.length !== 6 || Number.isNaN(int))
|
|
166
|
+
return 'rgba(37,99,235,0.15)';
|
|
167
|
+
var r = (int >> 16) & 255;
|
|
168
|
+
var g = (int >> 8) & 255;
|
|
169
|
+
var b = int & 255;
|
|
170
|
+
return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", 0.15)");
|
|
171
|
+
}
|
|
128
172
|
export default DynamicFormMessage;
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0Zvcm1NZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0Zvcm1NZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFpQixNQUFNLE9BQU8sQ0FBQztBQThCdkQsSUFBTSxrQkFBa0IsR0FBc0MsVUFBQyxFQVM5RDtRQVJDLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLFFBQVEsY0FBQSxFQUNSLFlBQVksa0JBQUEsRUFDWixXQUFXLGlCQUFBLEVBQ1gsb0JBQXdCLEVBQXhCLFlBQVksbUJBQUcsU0FBUyxLQUFBLEVBQ3hCLGtCQUFzQixFQUF0QixVQUFVLG1CQUFHLFNBQVMsS0FBQSxFQUN0QixlQUFnQixFQUFoQixPQUFPLG1CQUFHLE1BQU0sS0FBQTtJQUVWLElBQUEsS0FBMEIsUUFBUSxDQUEwQixFQUFFLENBQUMsRUFBOUQsUUFBUSxRQUFBLEVBQUUsV0FBVyxRQUF5QyxDQUFDO0lBQ2hFLElBQUEsS0FBc0IsUUFBUSxDQUF5QixFQUFFLENBQUMsRUFBekQsTUFBTSxRQUFBLEVBQUUsU0FBUyxRQUF3QyxDQUFDO0lBRWpFLElBQU0sUUFBUSxHQUFHLE9BQU8sS0FBSyxRQUFRLENBQUM7SUFDdEMsSUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUNsRSxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJLGlCQUFpQixJQUFJLENBQUMsV0FBVyxDQUFDO0lBRW5FLElBQU0sWUFBWSxHQUFHLFVBQUMsSUFBWSxFQUFFLEtBQWM7UUFDaEQsV0FBVyxDQUFDLFVBQUMsSUFBSTs7WUFBSyxPQUFBLHVCQUFNLElBQUksZ0JBQUcsSUFBSSxJQUFH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U1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnO1xuICBsYWJlbDogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pjtcbn1cblxuaW50ZXJmYWNlIEZvcm1TY2hlbWEge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGZpZWxkczogRm9ybUZpZWxkW107XG4gIG5vZGVfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNGb3JtTWVzc2FnZVByb3BzIHtcbiAgc2NoZW1hOiBGb3JtU2NoZW1hO1xuICBvblN1Ym1pdDogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICBvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWJtaXR0ZWQ6IGJvb2xlYW47XG4gIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgLyoqIFwiY2FyZFwiID0gaW5saW5lIGNoYXQgYnViYmxlIChkZWZhdWx0KSwgXCJmb290ZXJcIiA9IGNvbXBhY3QgZm9vdGVyIGxheW91dCAqL1xuICB2YXJpYW50PzogJ2NhcmQnIHwgJ2Zvb3Rlcic7XG59XG5cbmNvbnN0IER5bmFtaWNGb3JtTWVzc2FnZTogUmVhY3QuRkM8RHluYW1pY0Zvcm1NZXNzYWdlUHJvcHM+ID0gKHtcbiAgc2NoZW1hLFxuICBvblN1Ym1pdCxcbiAgb25DYW5jZWwsXG4gIGlzU3VibWl0dGluZyxcbiAgaXNTdWJtaXR0ZWQsXG4gIHByaW1hcnlDb2xvciA9ICcjMjU2M2ViJyxcbiAgZm9udEZhbWlseSA9ICdpbmhlcml0JyxcbiAgdmFyaWFudCA9ICdjYXJkJyxcbn0pID0+IHtcbiAgY29uc3QgW2Zvcm1EYXRhLCBzZXRGb3JtRGF0YV0gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICBjb25zdCBbZXJyb3JzLCBzZXRFcnJvcnNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuXG4gIGNvbnN0IGlzRm9vdGVyID0gdmFyaWFudCA9PT0gJ2Zvb3Rlcic7XG4gIGNvbnN0IGFsbEZpZWxkc09wdGlvbmFsID0gc2NoZW1hLmZpZWxkcy5ldmVyeSgoZikgPT4gIWYucmVxdWlyZWQpO1xuICBjb25zdCBzaG93Q2FuY2VsID0gISFvbkNhbmNlbCAmJiBhbGxGaWVsZHNPcHRpb25hbCAmJiAhaXNTdWJtaXR0ZWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHtcbiAgICBzZXRGb3JtRGF0YSgocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSk7XG4gICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgc2V0RXJyb3JzKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSB7IC4uLnByZXYgfTtcbiAgICAgICAgZGVsZXRlIG5leHRbbmFtZV07XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3RXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgc2NoZW1hLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgaWYgKGZpZWxkLnJlcXVpcmVkICYmICFmb3JtRGF0YVtmaWVsZC5uYW1lXSAmJiBmb3JtRGF0YVtmaWVsZC5uYW1lXSAhPT0gMCAmJiBmb3JtRGF0YVtmaWVsZC5uYW1lXSAhPT0gZmFsc2UpIHtcbiAgICAgICAgbmV3RXJyb3JzW2ZpZWxkLm5hbWVdID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKG5ld0Vycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgc2V0RXJyb3JzKG5ld0Vycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25TdWJtaXQoZm9ybURhdGEpO1xuICB9O1xuXG4gIC8vIOKUgOKUgCBTdHlsZXMgKHZhcmlhbnQtYXdhcmUpIOKUgOKUgFxuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGb290ZXJcbiAgICA/IHsgd2lkdGg6ICcxMDAlJyB9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWZhZmInLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICBwYWRkaW5nOiAnMTZweCcsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogaXNGb290ZXIgPyAnMTNweCcgOiAnMTRweCcsXG4gICAgY29sb3I6ICcjMzc0MTUxJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzRm9vdGVyID8gJzhweCcgOiAnMTJweCcsXG4gICAgZm9udFdlaWdodDogNTAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgZmllbGRzV3JhcHBlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGb290ZXJcbiAgICA/IHsgbWF4SGVpZ2h0OiAnMjAwcHgnLCBvdmVyZmxvd1k6ICdhdXRvJywgcGFkZGluZ1JpZ2h0OiAnNHB4JyB9XG4gICAgOiB7fTtcblxuICBjb25zdCBmaWVsZENvbnRhaW5lclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpbkJvdHRvbTogaXNGb290ZXIgPyAnOHB4JyA6ICcxMnB4JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6IGlzRm9vdGVyID8gJzEycHgnIDogJzEzcHgnLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICBjb2xvcjogJyMzNzQxNTEnLFxuICAgIG1hcmdpbkJvdHRvbTogJzJweCcsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBkZXNjcmlwdGlvblN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTFweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBtYXJnaW5Cb3R0b206ICczcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgaW5wdXRTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6IGlzRm9vdGVyID8gJzZweCAxMHB4JyA6ICc4cHggMTJweCcsXG4gICAgZm9udFNpemU6IGlzRm9vdGVyID8gJzEzcHgnIDogJzE0cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZDFkNWRiJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU3VibWl0dGVkID8gJyNmM2Y0ZjYnIDogJyNmZmZmZmYnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0U3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uaW5wdXRTdHlsZSxcbiAgICBhcHBlYXJhbmNlOiAnYXV0bycgYXMgY29uc3QsXG4gIH07XG5cbiAgY29uc3QgZXJyb3JTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIGNvbG9yOiAnI2VmNDQ0NCcsXG4gICAgbWFyZ2luVG9wOiAnMnB4JyxcbiAgfTtcblxuICBjb25zdCBidXR0b25TdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6IGlzRm9vdGVyID8gJzlweCAxNnB4JyA6ICcxMHB4IDE2cHgnLFxuICAgIGZvbnRTaXplOiBpc0Zvb3RlciA/ICcxM3B4JyA6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjZmZmZmZmJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzU3VibWl0dGVkID8gJyM5Y2EzYWYnIDogcHJpbWFyeUNvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogaXNGb290ZXIgPyAnMTBweCcgOiAnOHB4JyxcbiAgICBjdXJzb3I6IGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZyA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC43IDogMSxcbiAgICBtYXJnaW5Ub3A6IGlzRm9vdGVyID8gJzJweCcgOiAnNHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNoZWNrYm94Q29udGFpbmVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fSBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZVN0eWxlfT57c2NoZW1hLm1lc3NhZ2V9PC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e2ZpZWxkc1dyYXBwZXJTdHlsZX0+XG4gICAgICAgIHtzY2hlbWEuZmllbGRzLm1hcCgoZmllbGQpID0+IChcbiAgICAgICAgICA8ZGl2IGtleT17ZmllbGQubmFtZX0gc3R5bGU9e2ZpZWxkQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5cbiAgICAgICAgICAgICAge2ZpZWxkLmxhYmVsfVxuICAgICAgICAgICAgICB7ZmllbGQucmVxdWlyZWQgJiYgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICcjZWY0NDQ0JywgbWFyZ2luTGVmdDogJzJweCcgfX0+Kjwvc3Bhbj59XG4gICAgICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgICAgICB7ZmllbGQuZGVzY3JpcHRpb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtkZXNjcmlwdGlvblN0eWxlfT57ZmllbGQuZGVzY3JpcHRpb259PC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ3RleHQnICYmIChcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ31cbiAgICAgICAgICAgICAgICB2YWx1ZT17KGZvcm1EYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZykgfHwgJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgKFxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aW5wdXRTdHlsZX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQucGxhY2Vob2xkZXIgfHwgJyd9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZm9ybURhdGFbZmllbGQubmFtZV0pIDogJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogJycpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZmllbGQudHlwZSA9PT0gJ2RhdGUnICYmIChcbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nKSB8fCAnJ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtmaWVsZC50eXBlID09PSAnc2VsZWN0JyAmJiAoXG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgdmFsdWU9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0ZWQgfHwgaXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPntmaWVsZC5wbGFjZWhvbGRlciB8fCAnU2VsZWN0Li4uJ308L29wdGlvbj5cbiAgICAgICAgICAgICAgICB7ZmllbGQub3B0aW9ucz8ubWFwKChvcHQpID0+IChcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24ga2V5PXtvcHQudmFsdWV9IHZhbHVlPXtvcHQudmFsdWV9PlxuICAgICAgICAgICAgICAgICAgICB7b3B0LmxhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2ZpZWxkLnR5cGUgPT09ICdib29sZWFuJyAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2NoZWNrYm94Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBib29sZWFuKSB8fCBmYWxzZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTZweCcsIGhlaWdodDogJzE2cHgnIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMzNzQxNTEnIH19PlxuICAgICAgICAgICAgICAgICAge2ZpZWxkLnBsYWNlaG9sZGVyIHx8ICdZZXMnfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7ZXJyb3JzW2ZpZWxkLm5hbWVdICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17ZXJyb3JTdHlsZX0+e2Vycm9yc1tmaWVsZC5uYW1lXX08L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBtYXJnaW5Ub3A6IGlzRm9vdGVyID8gJzJweCcgOiAnNHB4JyB9fT5cbiAgICAgICAge3Nob3dDYW5jZWwgJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLi4uYnV0dG9uU3R5bGUsXG4gICAgICAgICAgICAgIG1hcmdpblRvcDogMCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgI2QxZDVkYicsXG4gICAgICAgICAgICAgIGN1cnNvcjogaXNTdWJtaXR0aW5nID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgb25DbGljaz17b25DYW5jZWx9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2tpcFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgc3R5bGU9e3sgLi4uYnV0dG9uU3R5bGUsIG1hcmdpblRvcDogMCB9fVxuICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRlZCB8fCBpc1N1Ym1pdHRpbmd9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNTdWJtaXR0ZWQgPyAnU3VibWl0dGVkJyA6IGlzU3VibWl0dGluZyA/ICdTdWJtaXR0aW5nLi4uJyA6ICdTdWJtaXQnfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNGb3JtTWVzc2FnZTtcbiJdfQ==
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1pY0Zvcm1NZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvRHluYW1pY0Zvcm1NZXNzYWdlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFpQixNQUFNLE9BQU8sQ0FBQztBQW9DdkQsSUFBTSxrQkFBa0IsR0FBc0MsVUFBQyxFQVU5RDtRQVRDLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLFFBQVEsY0FBQSxFQUNSLFlBQVksa0JBQUEsRUFDWixXQUFXLGlCQUFBLEVBQ1gsb0JBQXdCLEVBQXhCLFlBQVksbUJBQUcsU0FBUyxLQUFBLEVBQ3hCLGtCQUFzQixFQUF0QixVQUFVLG1CQUFHLFNBQVMsS0FBQSxFQUN0QixlQUFnQixFQUFoQixPQUFPLG1CQUFHLE1BQU0sS0FBQSxFQUNoQixLQUFLLFdBQUE7SUFFQyxJQUFBLEtBQTBCLFFBQVEsQ0FBMEIsRUFBRSxDQUFDLEVBQTlELFFBQVEsUUFBQSxFQUFFLFdBQVcsUUFBeUMsQ0FBQztJQUNoRSxJQUFBLEtBQXNCLFFBQVEsQ0FBeUIsRUFBRSxDQUFDLEVBQXpELE1BQU0sUUFBQSxFQUFFLFNBQVMsUUFBd0MsQ0FBQztJQUMzRCxJQUFBLEtBQXdCLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBELE9BQU8sUUFBQSxFQUFFLFVBQVUsUUFBaUMsQ0FBQztJQUU1RCxJQUFNLFFBQVEsR0FBRyxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQ3RDLElBQU0sWUFBWSxHQUFHLE9BQU8sS0FBSyxZQUFZLENBQUM7SUFDOUMsSUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBWCxDQUFXLENBQUMsQ0FBQztJQUNsRSxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsUUFBUSxJQUFJ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O0FBQ3hDLENBQUM7QUFFRCxlQUFlLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCBDU1NQcm9wZXJ0aWVzIH0gZnJvbSAncmVhY3QnO1xuXG5pbnRlcmZhY2UgRm9ybUZpZWxkIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiAndGV4dCcgfCAnbnVtYmVyJyB8ICdzZWxlY3QnIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnO1xuICBsYWJlbDogc3RyaW5nO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pjtcbn1cblxuaW50ZXJmYWNlIEZvcm1TY2hlbWEge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGZpZWxkczogRm9ybUZpZWxkW107XG4gIG5vZGVfaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNGb3JtTWVzc2FnZVByb3BzIHtcbiAgc2NoZW1hOiBGb3JtU2NoZW1hO1xuICBvblN1Ym1pdDogKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICBvbkNhbmNlbD86ICgpID0+IHZvaWQ7XG4gIGlzU3VibWl0dGluZzogYm9vbGVhbjtcbiAgaXNTdWJtaXR0ZWQ6IGJvb2xlYW47XG4gIHByaW1hcnlDb2xvcj86IHN0cmluZztcbiAgZm9udEZhbWlseT86IHN0cmluZztcbiAgLyoqXG4gICAqIFwiY2FyZFwiICAgICAgID0gaW5saW5lIGNoYXQgYnViYmxlXG4gICAqIFwiZm9vdGVyXCIgICAgID0gY29tcGFjdCBmb290ZXIgbGF5b3V0XG4gICAqIFwiZnVsbHNjcmVlblwiID0gZmlsbHMgdGhlIGNoYXQgcGFuZWw7IG1lc3NhZ2Ugc2hvd24gYXMgYSBoZWFkaW5nIG9uIHRvcFxuICAgKi9cbiAgdmFyaWFudD86ICdjYXJkJyB8ICdmb290ZXInIHwgJ2Z1bGxzY3JlZW4nO1xuICAvKiogT3B0aW9uYWwgaGVhZGluZyBhYm92ZSB0aGUgbWVzc2FnZSAoZS5nLiB0aGUgYWdlbnQgbmFtZSkgZm9yIHRoZSBmdWxsc2NyZWVuIGxheW91dC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IER5bmFtaWNGb3JtTWVzc2FnZTogUmVhY3QuRkM8RHluYW1pY0Zvcm1NZXNzYWdlUHJvcHM+ID0gKHtcbiAgc2NoZW1hLFxuICBvblN1Ym1pdCxcbiAgb25DYW5jZWwsXG4gIGlzU3VibWl0dGluZyxcbiAgaXNTdWJtaXR0ZWQsXG4gIHByaW1hcnlDb2xvciA9ICcjMjU2M2ViJyxcbiAgZm9udEZhbWlseSA9ICdpbmhlcml0JyxcbiAgdmFyaWFudCA9ICdjYXJkJyxcbiAgdGl0bGUsXG59KSA9PiB7XG4gIGNvbnN0IFtmb3JtRGF0YSwgc2V0Rm9ybURhdGFdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgY29uc3QgW2Vycm9ycywgc2V0RXJyb3JzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgY29uc3QgW2ZvY3VzZWQsIHNldEZvY3VzZWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3QgaXNGb290ZXIgPSB2YXJpYW50ID09PSAnZm9vdGVyJztcbiAgY29uc3QgaXNGdWxsc2NyZWVuID0gdmFyaWFudCA9PT0gJ2Z1bGxzY3JlZW4nO1xuICBjb25zdCBhbGxGaWVsZHNPcHRpb25hbCA9IHNjaGVtYS5maWVsZHMuZXZlcnkoKGYpID0+ICFmLnJlcXVpcmVkKTtcbiAgY29uc3Qgc2hvd0NhbmNlbCA9ICEhb25DYW5jZWwgJiYgYWxsRmllbGRzT3B0aW9uYWwgJiYgIWlzU3VibWl0dGVkO1xuICBjb25zdCBkaXNhYmxlZCA9IGlzU3VibWl0dGVkIHx8IGlzU3VibWl0dGluZztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4ge1xuICAgIHNldEZvcm1EYXRhKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKTtcbiAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICBzZXRFcnJvcnMoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHsgLi4ucHJldiB9O1xuICAgICAgICBkZWxldGUgbmV4dFtuYW1lXTtcbiAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoaXNTdWJtaXR0ZWQgfHwgaXNTdWJtaXR0aW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdFcnJvcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBzY2hlbWEuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBpZiAoZmllbGQucmVxdWlyZWQgJiYgIWZvcm1EYXRhW2ZpZWxkLm5hbWVdICYmIGZvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSAwICYmIGZvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSBmYWxzZSkge1xuICAgICAgICBuZXdFcnJvcnNbZmllbGQubmFtZV0gPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3RXJyb3JzKS5sZW5ndGggPiAwKSB7XG4gICAgICBzZXRFcnJvcnMobmV3RXJyb3JzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvblN1Ym1pdChmb3JtRGF0YSk7XG4gIH07XG5cbiAgLy8g4pSA4pSAIFN0eWxlcyAodmFyaWFudC1hd2FyZSkg4pSA4pSAXG5cbiAgY29uc3QgZm9ybVN0eWxlOiBDU1NQcm9wZXJ0aWVzID0gaXNGdWxsc2NyZWVuXG4gICAgPyB7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnLCBmb250RmFtaWx5IH1cbiAgICA6IGlzRm9vdGVyXG4gICAgPyB7IHdpZHRoOiAnMTAwJScsIGZvbnRGYW1pbHkgfVxuICAgIDoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxNHB4JyxcbiAgICAgICAgcGFkZGluZzogJzE2cHgnLFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA0KScsXG4gICAgICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6IGlzRnVsbHNjcmVlbiA/ICcyMHB4IDIycHggMTZweCcgOiAwLFxuICAgIGJvcmRlckJvdHRvbTogaXNGdWxsc2NyZWVuID8gJzFweCBzb2xpZCAjZWVmMGYzJyA6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICB9O1xuXG4gIGNvbnN0IHRpdGxlU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgY29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBsZXR0ZXJTcGFjaW5nOiAnMC4wMmVtJyxcbiAgICB0ZXh0VHJhbnNmb3JtOiAndXBwZXJjYXNlJyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VTdHlsZTogQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogaXNGdWxsc2NyZWVuID8gJzE4cHgnIDogaXNGb290ZXIgPyAnMTNweCcgOiAnMTVweCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICAgIGNvbG9yOiBpc0Z1bGxzY3JlZW4gPyAnIzExMTgyNycgOiAnIzM3NDE1MScsXG4gICAgbWFyZ2luQm90dG9tOiBpc0Z1bGxzY3JlZW4gPyAwIDogaXNGb290ZXIgPyAnMTBweCcgOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogaXNGdWxsc2NyZWVuID8gNzAwIDogNTAwLFxuICB9O1xuXG4gIGNvbnN0IGJvZHlTdHlsZTogQ1NTUHJvcGVydGllcyA9IGlzRnVsbHNjcmVlblxuICAgID8geyBmbGV4OiAxLCBvdmVyZmxvd1k6ICdhdXRvJywgcGFkZGluZzogJzE4cHggMjJweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzE4cHgnIH1cbiAgICA6IGlzRm9vdGVyXG4gICAgPyB7IG1heEhlaWdodDogJzIyMHB4Jywgb3ZlcmZsb3dZOiAnYXV0bycsIHBhZGRpbmdSaWdodDogJzRweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogJzEycHgnIH1cbiAgICA6IHsgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMTRweCcgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBDU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjMWYyOTM3JyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IGRlc2NyaXB0aW9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgIG1hcmdpblRvcDogJy0ycHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzdweCcsXG4gICAgbGluZUhlaWdodDogMS40LFxuICB9O1xuXG4gIGNvbnN0IGJhc2VJbnB1dFN0eWxlID0gKG5hbWU6IHN0cmluZyk6IENTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDEycHgnLFxuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgYm9yZGVyOiBgMS41cHggc29saWQgJHtmb2N1c2VkID09PSBuYW1lID8gcHJpbWFyeUNvbG9yIDogJyNlNWU3ZWInfWAsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGJhY2tncm91bmRDb2xvcjogZGlzYWJsZWQgPyAnI2YzZjRmNicgOiAnI2ZmZmZmZicsXG4gICAgY29sb3I6ICcjMTExODI3JyxcbiAgICBmb250RmFtaWx5LFxuICAgIHRyYW5zaXRpb246ICdib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlJyxcbiAgICBib3hTaGFkb3c6IGZvY3VzZWQgPT09IG5hbWUgPyBgMCAwIDAgM3B4ICR7aGV4VG9Tb2Z0UmluZyhwcmltYXJ5Q29sb3IpfWAgOiAnbm9uZScsXG4gIH0pO1xuXG4gIGNvbnN0IGVycm9yU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyNlZjQ0NDQnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gIH07XG5cbiAgY29uc3QgZm9vdGVyU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgLi4uKGlzRnVsbHNjcmVlblxuICAgICAgPyB7IHBhZGRpbmc6ICcxNnB4IDIycHgnLCBib3JkZXJUb3A6ICcxcHggc29saWQgI2VlZjBmMycgfVxuICAgICAgOiB7IG1hcmdpblRvcDogaXNGb290ZXIgPyAnOHB4JyA6ICcxNHB4JyB9KSxcbiAgfTtcblxuICBjb25zdCBwcmltYXJ5QnV0dG9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBwYWRkaW5nOiAnMTFweCAxNnB4JyxcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJhY2tncm91bmRDb2xvcjogZGlzYWJsZWQgPyAnIzljYTNhZicgOiBwcmltYXJ5Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgY3Vyc29yOiBkaXNhYmxlZCA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcicsXG4gICAgb3BhY2l0eTogaXNTdWJtaXR0aW5nID8gMC43NSA6IDEsXG4gICAgZm9udEZhbWlseSxcbiAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSAxMjBtcyBlYXNlJyxcbiAgfTtcblxuICBjb25zdCBza2lwQnV0dG9uU3R5bGU6IENTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzExcHggMTZweCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnMS41cHggc29saWQgI2U1ZTdlYicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMTBweCcsXG4gICAgY3Vyc29yOiBpc1N1Ym1pdHRpbmcgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRmllbGQgPSAoZmllbGQ6IEZvcm1GaWVsZCkgPT4gKFxuICAgIDxkaXYga2V5PXtmaWVsZC5uYW1lfT5cbiAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+XG4gICAgICAgIHtmaWVsZC5sYWJlbH1cbiAgICAgICAge2ZpZWxkLnJlcXVpcmVkICYmIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAnI2VmNDQ0NCcsIG1hcmdpbkxlZnQ6ICczcHgnIH19Pio8L3NwYW4+fVxuICAgICAgPC9sYWJlbD5cblxuICAgICAge2ZpZWxkLmRlc2NyaXB0aW9uICYmIDxkaXYgc3R5bGU9e2Rlc2NyaXB0aW9uU3R5bGV9PntmaWVsZC5kZXNjcmlwdGlvbn08L2Rpdj59XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAndGV4dCcgJiYgKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgc3R5bGU9e2Jhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXtmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ31cbiAgICAgICAgICB2YWx1ZT17KGZvcm1EYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZykgfHwgJyd9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWQoZmllbGQubmFtZSl9XG4gICAgICAgICAgb25CbHVyPXsoKSA9PiBzZXRGb2N1c2VkKG51bGwpfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAnbnVtYmVyJyAmJiAoXG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIHN0eWxlPXtiYXNlSW5wdXRTdHlsZShmaWVsZC5uYW1lKX1cbiAgICAgICAgICBwbGFjZWhvbGRlcj17ZmllbGQucGxhY2Vob2xkZXIgfHwgJyd9XG4gICAgICAgICAgdmFsdWU9e2Zvcm1EYXRhW2ZpZWxkLm5hbWVdICE9PSB1bmRlZmluZWQgPyBTdHJpbmcoZm9ybURhdGFbZmllbGQubmFtZV0pIDogJyd9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVDaGFuZ2UoZmllbGQubmFtZSwgZS50YXJnZXQudmFsdWUgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogJycpfVxuICAgICAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWQoZmllbGQubmFtZSl9XG4gICAgICAgICAgb25CbHVyPXsoKSA9PiBzZXRGb2N1c2VkKG51bGwpfVxuICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHtmaWVsZC50eXBlID09PSAnZGF0ZScgJiYgKFxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiZGF0ZVwiXG4gICAgICAgICAgc3R5bGU9e2Jhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIHZhbHVlPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nKSB8fCAnJ31cbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgb25Gb2N1cz17KCkgPT4gc2V0Rm9jdXNlZChmaWVsZC5uYW1lKX1cbiAgICAgICAgICBvbkJsdXI9eygpID0+IHNldEZvY3VzZWQobnVsbCl9XG4gICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAvPlxuICAgICAgKX1cblxuICAgICAge2ZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIChcbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIHN0eWxlPXt7IC4uLmJhc2VJbnB1dFN0eWxlKGZpZWxkLm5hbWUpLCBhcHBlYXJhbmNlOiAnYXV0bycgYXMgY29uc3QsIGN1cnNvcjogZGlzYWJsZWQgPyAnbm90LWFsbG93ZWQnIDogJ3BvaW50ZXInIH19XG4gICAgICAgICAgdmFsdWU9eyhmb3JtRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmcpIHx8ICcnfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlQ2hhbmdlKGZpZWxkLm5hbWUsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICBvbkZvY3VzPXsoKSA9PiBzZXRGb2N1c2VkKGZpZWxkLm5hbWUpfVxuICAgICAgICAgIG9uQmx1cj17KCkgPT4gc2V0Rm9jdXNlZChudWxsKX1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e2ZpZWxkLnBsYWNlaG9sZGVyIHx8ICdTZWxlY3QuLi4nfTwvb3B0aW9uPlxuICAgICAgICAgIHtmaWVsZC5vcHRpb25zPy5tYXAoKG9wdCkgPT4gKFxuICAgICAgICAgICAgPG9wdGlvbiBrZXk9e29wdC52YWx1ZX0gdmFsdWU9e29wdC52YWx1ZX0+XG4gICAgICAgICAgICAgIHtvcHQubGFiZWx9XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICApfVxuXG4gICAgICB7ZmllbGQudHlwZSA9PT0gJ2Jvb2xlYW4nICYmIChcbiAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzEwcHgnLCBjdXJzb3I6IGRpc2FibGVkID8gJ25vdC1hbGxvd2VkJyA6ICdwb2ludGVyJyB9fT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBjaGVja2VkPXsoZm9ybURhdGFbZmllbGQubmFtZV0gYXMgYm9vbGVhbikgfHwgZmFsc2V9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZUNoYW5nZShmaWVsZC5uYW1lLCBlLnRhcmdldC5jaGVja2VkKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiAnMTdweCcsIGhlaWdodDogJzE3cHgnLCBhY2NlbnRDb2xvcjogcHJpbWFyeUNvbG9yLCBjdXJzb3I6ICdpbmhlcml0JyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMzc0MTUxJyB9fT57ZmllbGQucGxhY2Vob2xkZXIgfHwgJ1llcyd9PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgKX1cblxuICAgICAge2Vycm9yc1tmaWVsZC5uYW1lXSAmJiA8ZGl2IHN0eWxlPXtlcnJvclN0eWxlfT57ZXJyb3JzW2ZpZWxkLm5hbWVdfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBjb25zdCBidXR0b25zID0gKFxuICAgIDxkaXYgc3R5bGU9e2Zvb3RlclN0eWxlfT5cbiAgICAgIHtzaG93Q2FuY2VsICYmIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9e3NraXBCdXR0b25TdHlsZX0gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30gb25DbGljaz17b25DYW5jZWx9PlxuICAgICAgICAgIFNraXBcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApfVxuICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgc3R5bGU9e3ByaW1hcnlCdXR0b25TdHlsZX0gZGlzYWJsZWQ9e2Rpc2FibGVkfT5cbiAgICAgICAge2lzU3VibWl0dGVkID8gJ1N1Ym1pdHRlZCcgOiBpc1N1Ym1pdHRpbmcgPyAnU3VibWl0dGluZ+KApicgOiAnU3VibWl0J31cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2Zvcm1TdHlsZX0+XG4gICAgICB7KHNjaGVtYS5tZXNzYWdlIHx8IChpc0Z1bGxzY3JlZW4gJiYgdGl0bGUpKSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfT5cbiAgICAgICAgICB7aXNGdWxsc2NyZWVuICYmIHRpdGxlICYmIDxkaXYgc3R5bGU9e3RpdGxlU3R5bGV9Pnt0aXRsZX08L2Rpdj59XG4gICAgICAgICAge3NjaGVtYS5tZXNzYWdlICYmIDxkaXYgc3R5bGU9e21lc3NhZ2VTdHlsZX0+e3NjaGVtYS5tZXNzYWdlfTwvZGl2Pn1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICA8ZGl2IHN0eWxlPXtib2R5U3R5bGV9PntzY2hlbWEuZmllbGRzLm1hcChyZW5kZXJGaWVsZCl9PC9kaXY+XG5cbiAgICAgIHtidXR0b25zfVxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbi8qKiBUcmFuc2x1Y2VudCB2ZXJzaW9uIG9mIHRoZSBwcmltYXJ5IGNvbG9yIGZvciB0aGUgZm9jdXMgcmluZyAoYWNjZXB0cyAjcmdiLyNycmdnYmIpLiAqL1xuZnVuY3Rpb24gaGV4VG9Tb2Z0UmluZyhoZXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG0gPSBoZXgucmVwbGFjZSgnIycsICcnKTtcbiAgY29uc3QgZnVsbCA9IG0ubGVuZ3RoID09PSAzID8gbS5zcGxpdCgnJykubWFwKChjKSA9PiBjICsgYykuam9pbignJykgOiBtO1xuICBjb25zdCBpbnQgPSBwYXJzZUludChmdWxsLCAxNik7XG4gIGlmIChmdWxsLmxlbmd0aCAhPT0gNiB8fCBOdW1iZXIuaXNOYU4oaW50KSkgcmV0dXJuICdyZ2JhKDM3LDk5LDIzNSwwLjE1KSc7XG4gIGNvbnN0IHIgPSAoaW50ID4+IDE2KSAmIDI1NTtcbiAgY29uc3QgZyA9IChpbnQgPj4gOCkgJiAyNTU7XG4gIGNvbnN0IGIgPSBpbnQgJiAyNTU7XG4gIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAwLjE1KWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IER5bmFtaWNGb3JtTWVzc2FnZTtcbiJdfQ==
|