@qoretechnologies/reqraft 0.10.13-pr.74.gf718c08 → 0.10.14

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.
Files changed (138) hide show
  1. package/.claude/CLAUDE.md +8 -11
  2. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  3. package/dist/components/form/engine/CompactToolbar.js +2 -2
  4. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  5. package/dist/components/form/engine/FormEngine.d.ts +15 -3
  6. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  7. package/dist/components/form/engine/FormEngine.js +15 -20
  8. package/dist/components/form/engine/FormEngine.js.map +1 -1
  9. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  10. package/dist/components/form/engine/compactRowStyles.js +3 -8
  11. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  12. package/dist/helpers/common.d.ts +0 -5
  13. package/dist/helpers/common.d.ts.map +1 -1
  14. package/dist/helpers/common.js +1 -20
  15. package/dist/helpers/common.js.map +1 -1
  16. package/dist/index.d.ts +0 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -7
  19. package/dist/index.js.map +1 -1
  20. package/dist/providers/StorageProvider.d.ts +13 -0
  21. package/dist/providers/StorageProvider.d.ts.map +1 -1
  22. package/dist/providers/StorageProvider.js +29 -5
  23. package/dist/providers/StorageProvider.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/components/form/engine/CompactToolbar.tsx +117 -110
  26. package/src/components/form/engine/FormEngine.stories.tsx +27 -0
  27. package/src/components/form/engine/FormEngine.tsx +44 -25
  28. package/src/components/form/engine/compactRowStyles.ts +3 -5
  29. package/src/helpers/common.ts +0 -19
  30. package/src/hooks/useStorage/useStorage.stories.tsx +52 -0
  31. package/src/index.tsx +0 -5
  32. package/src/providers/StorageProvider.tsx +30 -4
  33. package/dist/components/composer/Composer.d.ts +0 -108
  34. package/dist/components/composer/Composer.d.ts.map +0 -1
  35. package/dist/components/composer/Composer.js +0 -238
  36. package/dist/components/composer/Composer.js.map +0 -1
  37. package/dist/components/composer/helpers.d.ts +0 -21
  38. package/dist/components/composer/helpers.d.ts.map +0 -1
  39. package/dist/components/composer/helpers.js +0 -75
  40. package/dist/components/composer/helpers.js.map +0 -1
  41. package/dist/components/composer/index.d.ts +0 -3
  42. package/dist/components/composer/index.d.ts.map +0 -1
  43. package/dist/components/composer/index.js +0 -19
  44. package/dist/components/composer/index.js.map +0 -1
  45. package/dist/components/imageLightbox/ImageLightbox.d.ts +0 -17
  46. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +0 -1
  47. package/dist/components/imageLightbox/ImageLightbox.js +0 -129
  48. package/dist/components/imageLightbox/ImageLightbox.js.map +0 -1
  49. package/dist/components/imageLightbox/index.d.ts +0 -2
  50. package/dist/components/imageLightbox/index.d.ts.map +0 -1
  51. package/dist/components/imageLightbox/index.js +0 -18
  52. package/dist/components/imageLightbox/index.js.map +0 -1
  53. package/dist/components/supportTicket/AttachmentChips.d.ts +0 -10
  54. package/dist/components/supportTicket/AttachmentChips.d.ts.map +0 -1
  55. package/dist/components/supportTicket/AttachmentChips.js +0 -119
  56. package/dist/components/supportTicket/AttachmentChips.js.map +0 -1
  57. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +0 -35
  58. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +0 -1
  59. package/dist/components/supportTicket/InterfaceReferenceTags.js +0 -31
  60. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +0 -1
  61. package/dist/components/supportTicket/ReferencePicker.d.ts +0 -41
  62. package/dist/components/supportTicket/ReferencePicker.d.ts.map +0 -1
  63. package/dist/components/supportTicket/ReferencePicker.js +0 -86
  64. package/dist/components/supportTicket/ReferencePicker.js.map +0 -1
  65. package/dist/components/supportTicket/TicketHeader.d.ts +0 -86
  66. package/dist/components/supportTicket/TicketHeader.d.ts.map +0 -1
  67. package/dist/components/supportTicket/TicketHeader.js +0 -149
  68. package/dist/components/supportTicket/TicketHeader.js.map +0 -1
  69. package/dist/components/supportTicket/TicketMetaTags.d.ts +0 -32
  70. package/dist/components/supportTicket/TicketMetaTags.d.ts.map +0 -1
  71. package/dist/components/supportTicket/TicketMetaTags.js +0 -21
  72. package/dist/components/supportTicket/TicketMetaTags.js.map +0 -1
  73. package/dist/components/supportTicket/TicketReplyBox.d.ts +0 -63
  74. package/dist/components/supportTicket/TicketReplyBox.d.ts.map +0 -1
  75. package/dist/components/supportTicket/TicketReplyBox.js +0 -115
  76. package/dist/components/supportTicket/TicketReplyBox.js.map +0 -1
  77. package/dist/components/supportTicket/fileToAttachment.d.ts +0 -9
  78. package/dist/components/supportTicket/fileToAttachment.d.ts.map +0 -1
  79. package/dist/components/supportTicket/fileToAttachment.js +0 -28
  80. package/dist/components/supportTicket/fileToAttachment.js.map +0 -1
  81. package/dist/components/supportTicket/index.d.ts +0 -9
  82. package/dist/components/supportTicket/index.d.ts.map +0 -1
  83. package/dist/components/supportTicket/index.js +0 -25
  84. package/dist/components/supportTicket/index.js.map +0 -1
  85. package/dist/components/supportTicket/meta.d.ts +0 -63
  86. package/dist/components/supportTicket/meta.d.ts.map +0 -1
  87. package/dist/components/supportTicket/meta.js +0 -79
  88. package/dist/components/supportTicket/meta.js.map +0 -1
  89. package/dist/components/ticketReferences/TicketReferences.d.ts +0 -52
  90. package/dist/components/ticketReferences/TicketReferences.d.ts.map +0 -1
  91. package/dist/components/ticketReferences/TicketReferences.js +0 -453
  92. package/dist/components/ticketReferences/TicketReferences.js.map +0 -1
  93. package/dist/components/ticketReferences/index.d.ts +0 -3
  94. package/dist/components/ticketReferences/index.d.ts.map +0 -1
  95. package/dist/components/ticketReferences/index.js +0 -6
  96. package/dist/components/ticketReferences/index.js.map +0 -1
  97. package/dist/components/ticketThread/TicketThread.d.ts +0 -52
  98. package/dist/components/ticketThread/TicketThread.d.ts.map +0 -1
  99. package/dist/components/ticketThread/TicketThread.js +0 -248
  100. package/dist/components/ticketThread/TicketThread.js.map +0 -1
  101. package/dist/components/ticketThread/index.d.ts +0 -3
  102. package/dist/components/ticketThread/index.d.ts.map +0 -1
  103. package/dist/components/ticketThread/index.js +0 -7
  104. package/dist/components/ticketThread/index.js.map +0 -1
  105. package/dist/helpers/scrollbar.d.ts +0 -2
  106. package/dist/helpers/scrollbar.d.ts.map +0 -1
  107. package/dist/helpers/scrollbar.js +0 -25
  108. package/dist/helpers/scrollbar.js.map +0 -1
  109. package/src/components/composer/Composer.stories.tsx +0 -238
  110. package/src/components/composer/Composer.tsx +0 -545
  111. package/src/components/composer/helpers.ts +0 -74
  112. package/src/components/composer/index.ts +0 -2
  113. package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -156
  114. package/src/components/imageLightbox/ImageLightbox.tsx +0 -169
  115. package/src/components/imageLightbox/index.ts +0 -1
  116. package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -122
  117. package/src/components/supportTicket/AttachmentChips.tsx +0 -142
  118. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -134
  119. package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -85
  120. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -296
  121. package/src/components/supportTicket/ReferencePicker.tsx +0 -237
  122. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -122
  123. package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
  124. package/src/components/supportTicket/TicketHeader.tsx +0 -247
  125. package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
  126. package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
  127. package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -355
  128. package/src/components/supportTicket/TicketReplyBox.tsx +0 -146
  129. package/src/components/supportTicket/fileToAttachment.ts +0 -24
  130. package/src/components/supportTicket/index.ts +0 -8
  131. package/src/components/supportTicket/meta.ts +0 -145
  132. package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -301
  133. package/src/components/ticketReferences/TicketReferences.tsx +0 -899
  134. package/src/components/ticketReferences/index.ts +0 -2
  135. package/src/components/ticketThread/TicketThread.stories.tsx +0 -751
  136. package/src/components/ticketThread/TicketThread.tsx +0 -650
  137. package/src/components/ticketThread/index.ts +0 -6
  138. package/src/helpers/scrollbar.ts +0 -32
@@ -1,238 +0,0 @@
1
- "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
- var __assign = (this && this.__assign) || function () {
7
- __assign = Object.assign || function(t) {
8
- for (var s, i = 1, n = arguments.length; i < n; i++) {
9
- s = arguments[i];
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
- t[p] = s[p];
12
- }
13
- return t;
14
- };
15
- return __assign.apply(this, arguments);
16
- };
17
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
- return new (P || (P = Promise))(function (resolve, reject) {
20
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
- step((generator = generator.apply(thisArg, _arguments || [])).next());
24
- });
25
- };
26
- var __generator = (this && this.__generator) || function (thisArg, body) {
27
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
- function verb(n) { return function (v) { return step([n, v]); }; }
30
- function step(op) {
31
- if (f) throw new TypeError("Generator is already executing.");
32
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
- if (y = 0, t) op = [op[0] & 2, t.value];
35
- switch (op[0]) {
36
- case 0: case 1: t = op; break;
37
- case 4: _.label++; return { value: op[1], done: false };
38
- case 5: _.label++; y = op[1]; op = [0]; continue;
39
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
- default:
41
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
- if (t[2]) _.ops.pop();
46
- _.trys.pop(); continue;
47
- }
48
- op = body.call(thisArg, _);
49
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
- }
52
- };
53
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
54
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
55
- if (ar || !(i in from)) {
56
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
57
- ar[i] = from[i];
58
- }
59
- }
60
- return to.concat(ar || Array.prototype.slice.call(from));
61
- };
62
- var __importDefault = (this && this.__importDefault) || function (mod) {
63
- return (mod && mod.__esModule) ? mod : { "default": mod };
64
- };
65
- Object.defineProperty(exports, "__esModule", { value: true });
66
- exports.Composer = void 0;
67
- var jsx_runtime_1 = require("react/jsx-runtime");
68
- // Copyright 2026 Qore Technologies, s.r.o.
69
- // <Composer> — the shared Qorus message composer, a faithful lift of qorus-ide's
70
- // Qonsole chat input: the same gradient-bordered `StyledEffect` bar, transparent
71
- // editor, attachment preview strip, and control row (attach + toolbar on the left,
72
- // actions + send on the right). Everything Qonsole-specific (slash completions,
73
- // command history, design-mode, sendCommand) is replaced by slots + props, so the
74
- // exact same input can back the Qonsole, the helpdesk reply box, and anything else.
75
- var reqore_1 = require("@qoretechnologies/reqore");
76
- var Effect_1 = require("@qoretechnologies/reqore/dist/components/Effect");
77
- var react_1 = require("react");
78
- var styled_components_1 = __importDefault(require("styled-components"));
79
- var helpers_1 = require("./helpers");
80
- // The Qonsole input chrome, lifted verbatim from qorus-ide's StyledInputWrapper.
81
- // The border is 1px *transparent* — it only reserves the border-box so the
82
- // `effect` gradient can paint the edge (that's how the Qonsole bar's accent glow
83
- // is drawn — a gradient border, not a border-color). All colour comes from
84
- // `effect` (+ the ambient theme), so the bar takes on whatever accent the app /
85
- // story supplies.
86
- var StyledComposer = (0, styled_components_1.default)(Effect_1.StyledEffect)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n margin: ", ";\n padding: 4px;\n border: 1px solid transparent;\n border-radius: 6px;\n"], ["\n margin: ", ";\n padding: 4px;\n border: 1px solid transparent;\n border-radius: 6px;\n"])), function (_a) {
87
- var $minimal = _a.$minimal;
88
- return ($minimal ? '0' : '2px');
89
- });
90
- // Layout-neutral ref holder: `display: contents` generates no box, so it gives the
91
- // composer a wrapper element to target paste/drop against without perturbing flow.
92
- var StyledContentsWrapper = styled_components_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: contents;\n"], ["\n display: contents;\n"])));
93
- var StyledAttachmentList = styled_components_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n // 8px left inset (as in the IDE) so it lines up with the editor text; the 10px\n // bottom gives space before whatever follows (references / editor).\n padding: 8px 8px 10px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n // 8px left inset (as in the IDE) so it lines up with the editor text; the 10px\n // bottom gives space before whatever follows (references / editor).\n padding: 8px 8px 10px;\n"])));
94
- // Content shown on top of the editor (e.g. reference chips) gets the same 8px left
95
- // inset as the attachment strip so both line up with the editor text, not the bar edge.
96
- var StyledAboveInput = styled_components_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n padding-left: 8px;\n"], ["\n padding-left: 8px;\n"])));
97
- var StyledAttachment = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n position: relative;\n display: inline-block;\n"], ["\n position: relative;\n display: inline-block;\n"])));
98
- var StyledAttachmentImage = styled_components_1.default.img(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: block;\n max-height: 80px;\n border-radius: 4px;\n border: 1px solid rgba(123, 104, 238, 0.3);\n"], ["\n display: block;\n max-height: 80px;\n border-radius: 4px;\n border: 1px solid rgba(123, 104, 238, 0.3);\n"])));
99
- var StyledAttachmentFile = styled_components_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n gap: 6px;\n height: 40px;\n padding: 0 12px;\n border-radius: 4px;\n border: 1px solid rgba(123, 104, 238, 0.3);\n background: rgba(123, 104, 238, 0.08);\n max-width: 220px;\n"], ["\n display: flex;\n align-items: center;\n gap: 6px;\n height: 40px;\n padding: 0 12px;\n border-radius: 4px;\n border: 1px solid rgba(123, 104, 238, 0.3);\n background: rgba(123, 104, 238, 0.08);\n max-width: 220px;\n"])));
100
- var StyledAttachmentFilename = (0, styled_components_1.default)(reqore_1.ReqoreSpan)(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"], ["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
101
- var StyledAttachmentRemoveWrapper = styled_components_1.default.div(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: absolute;\n top: -8px;\n right: -8px;\n"], ["\n position: absolute;\n top: -8px;\n right: -8px;\n"])));
102
- /** The Qonsole bar effect — a `custom1` gradient border over a transparent fill,
103
- * exactly like qorus-ide's QonsoleInput. `custom1` resolves per app theme (Qorus
104
- * purple in qorus-ide / admin-portal, gray in a bare reqore theme). Override via
105
- * the `effect` prop. */
106
- var DEFAULT_EFFECT = {
107
- gradient: { direction: 'to bottom right', colors: 'custom1:darken:1:0.9' },
108
- };
109
- exports.Composer = (0, react_1.forwardRef)(function Composer(_a, ref) {
110
- var _this = this;
111
- var _b = _a.editor, editor = _b === void 0 ? 'rich' : _b, defaultText = _a.defaultText, defaultFiles = _a.defaultFiles, _c = _a.placeholder, placeholder = _c === void 0 ? 'Write a message…' : _c, onSend = _a.onSend, _d = _a.sendLabel, sendLabel = _d === void 0 ? 'Send' : _d, _e = _a.sendIcon, sendIcon = _e === void 0 ? 'SendPlane2Line' : _e, sendIntent = _a.sendIntent, _f = _a.sendMinimal, sendMinimal = _f === void 0 ? true : _f, _g = _a.sendCustomTheme, sendCustomTheme = _g === void 0 ? { main: 'custom1' } : _g, sendActions = _a.sendActions, sendMenuClassName = _a.sendMenuClassName, sending = _a.sending, disabled = _a.disabled, _h = _a.disabledReason, disabledReason = _h === void 0 ? '' : _h, _j = _a.submitOnEnter, submitOnEnter = _j === void 0 ? true : _j, _k = _a.clearOnSend, clearOnSend = _k === void 0 ? true : _k, _l = _a.allowEmptySend, allowEmptySend = _l === void 0 ? false : _l, attachMenuItems = _a.attachMenuItems, _m = _a.attachIcon, attachIcon = _m === void 0 ? 'AddLine' : _m, hideAttach = _a.hideAttach, toolbarStart = _a.toolbarStart, footerActions = _a.footerActions, rightActions = _a.rightActions, aboveInput = _a.aboveInput, belowInput = _a.belowInput, onChange = _a.onChange, onEditorKeyDown = _a.onEditorKeyDown, onFocus = _a.onFocus, onBlur = _a.onBlur, _o = _a.size, size = _o === void 0 ? 'small' : _o, minimal = _a.minimal, _p = _a.effect, effect = _p === void 0 ? DEFAULT_EFFECT : _p;
112
- var theme = (0, reqore_1.useReqoreTheme)();
113
- var _q = (0, react_1.useState)(function () {
114
- return defaultText ? (0, helpers_1.richValueFromString)(defaultText) : helpers_1.EMPTY_RICH_VALUE;
115
- }), richValue = _q[0], setRichValue = _q[1];
116
- var _r = (0, react_1.useState)(defaultText !== null && defaultText !== void 0 ? defaultText : ''), plainValue = _r[0], setPlainValue = _r[1];
117
- var _s = (0, react_1.useState)(function () { return defaultFiles !== null && defaultFiles !== void 0 ? defaultFiles : []; }), files = _s[0], setFiles = _s[1];
118
- var _t = (0, react_1.useState)([]), previews = _t[0], setPreviews = _t[1];
119
- var fileInput = (0, react_1.useRef)(null);
120
- var wrapperRef = (0, react_1.useRef)(null);
121
- // Image thumbnails for the preview strip; object URLs revoked on change/unmount.
122
- (0, react_1.useEffect)(function () {
123
- var urls = files.map(function (f) { return (f.type.startsWith('image/') ? URL.createObjectURL(f) : ''); });
124
- setPreviews(urls);
125
- return function () { return urls.forEach(function (u) { return u && URL.revokeObjectURL(u); }); };
126
- }, [files]);
127
- var getText = function () {
128
- return editor === 'rich' ? (0, helpers_1.richValueToString)(richValue) : plainValue;
129
- };
130
- var setText = function (text) {
131
- if (editor === 'rich') {
132
- setRichValue((0, helpers_1.richValueFromString)(text));
133
- }
134
- else {
135
- setPlainValue(text);
136
- }
137
- };
138
- (0, react_1.useImperativeHandle)(ref, function () { return ({
139
- focus: function () {
140
- var _a, _b;
141
- return (_b = (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('[contenteditable="true"], textarea')) === null || _b === void 0 ? void 0 : _b.focus();
142
- },
143
- clear: function () { return setText(''); },
144
- setText: setText,
145
- getText: getText,
146
- }); }, [editor, richValue, plainValue]);
147
- // Every send action inherits the composer's send style (the Qonsole look by
148
- // default) so a split-send stays visually of a piece with the single button —
149
- // unless the action picks its own. The accent is only defaulted when the action
150
- // hasn't chosen an `intent`, since in Reqore an intent owns the colour and would
151
- // otherwise fight the `customTheme`.
152
- var withSendStyle = function (action) { return (__assign(__assign({ minimal: sendMinimal }, (action.intent ? undefined : { customTheme: sendCustomTheme })), action)); };
153
- var actions = (sendActions === null || sendActions === void 0 ? void 0 : sendActions.length)
154
- ? sendActions.map(withSendStyle)
155
- : [withSendStyle({ id: undefined, label: sendLabel, icon: sendIcon, intent: sendIntent })];
156
- var primary = actions[0];
157
- var isSplit = actions.length > 1;
158
- var addFiles = function (incoming) {
159
- if (incoming.length) {
160
- setFiles(function (prev) { return __spreadArray(__spreadArray([], prev, true), incoming, true); });
161
- }
162
- };
163
- var removeFile = function (index) {
164
- return setFiles(function (prev) { return prev.filter(function (_, j) { return j !== index; }); });
165
- };
166
- var handlePaste = function (event) {
167
- var images = (0, helpers_1.clipboardImages)(event);
168
- if (images.length) {
169
- event.preventDefault();
170
- addFiles(images);
171
- }
172
- };
173
- var text = getText();
174
- var canSend = (allowEmptySend || !!text.trim() || files.length > 0) && !sending;
175
- var handleSend = function (actionId) { return __awaiter(_this, void 0, void 0, function () {
176
- var body;
177
- return __generator(this, function (_a) {
178
- switch (_a.label) {
179
- case 0:
180
- body = getText();
181
- if (!canSend) {
182
- return [2 /*return*/];
183
- }
184
- return [4 /*yield*/, onSend(clearOnSend ? body.trim() : body, { files: files, action: actionId })];
185
- case 1:
186
- _a.sent();
187
- if (clearOnSend) {
188
- setText('');
189
- setFiles([]);
190
- }
191
- return [2 /*return*/];
192
- }
193
- });
194
- }); };
195
- var handleKeyDown = function (e) {
196
- onEditorKeyDown === null || onEditorKeyDown === void 0 ? void 0 : onEditorKeyDown(e);
197
- if (submitOnEnter && (0, helpers_1.isPlainSubmitEnter)(e)) {
198
- e.preventDefault();
199
- void handleSend(primary.id);
200
- }
201
- };
202
- if (disabled) {
203
- return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { intent: 'muted', icon: 'LockLine', size: 'small', flat: true, children: disabledReason }));
204
- }
205
- var extraAttachItems = attachMenuItems ? attachMenuItems(addFiles) : [];
206
- // Icon-only when `label` is omitted; `customTheme`/`minimal` let a caller match
207
- // the Qonsole accent send (minimal, custom1-themed) or any other look.
208
- var sendButton = function (action) { return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: action.icon, intent: action.intent, customTheme: action.customTheme, minimal: action.minimal, size: size, disabled: !canSend, loading: sending, flat: true, onClick: function () { return handleSend(action.id); }, fixed: !isSplit, children: action.label })); };
209
- return ((0, jsx_runtime_1.jsxs)(StyledContentsWrapper, { ref: wrapperRef, children: [(0, jsx_runtime_1.jsxs)(StyledComposer, { as: 'div', theme: theme, "$minimal": minimal,
210
- // transparent fill (like QonsoleInput) → the page shows through and only
211
- // the effect's gradient *border* glows; `minimal` opts into a solid fill.
212
- transparent: !minimal, effect: effect, onPaste: handlePaste, children: [(0, jsx_runtime_1.jsx)("input", { ref: fileInput, type: 'file', multiple: true, style: { display: 'none' }, onChange: function (e) {
213
- if (e.target.files) {
214
- addFiles(Array.from(e.target.files));
215
- }
216
- e.target.value = '';
217
- } }), files.length > 0 && ((0, jsx_runtime_1.jsx)(StyledAttachmentList, { children: files.map(function (file, index) { return ((0, jsx_runtime_1.jsxs)(StyledAttachment, { children: [previews[index] ? ((0, jsx_runtime_1.jsx)(StyledAttachmentImage, { src: previews[index], alt: file.name })) : ((0, jsx_runtime_1.jsxs)(StyledAttachmentFile, { title: file.name, children: [(0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: 'FileLine', size: 'small' }), (0, jsx_runtime_1.jsx)(StyledAttachmentFilename, { size: 'small', children: file.name })] })), (0, jsx_runtime_1.jsx)(StyledAttachmentRemoveWrapper, { children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: 'CloseLine', size: 'micro', leftIconProps: { size: 'tiny' }, circle: true, onClick: function () { return removeFile(index); }, tooltip: 'Remove attachment' }) })] }, "".concat(file.name, "-").concat(index))); }) })), (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { vertical: true, fluid: true, children: [aboveInput && (0, jsx_runtime_1.jsx)(StyledAboveInput, { children: aboveInput }), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { fluid: true, verticalAlign: 'center', size: 'small', children: editor === 'rich' ? ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreRichTextEditor, { value: richValue, panelProps: { fluid: true }, onChange: function (value) {
218
- setRichValue(value);
219
- onChange === null || onChange === void 0 ? void 0 : onChange((0, helpers_1.richValueToString)(value));
220
- }, onKeyDown: handleKeyDown, onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, disabled: sending, transparent: true, flat: true, fluid: true, size: size, actions: { styling: false, undo: false, redo: false }, onClearClick: text ? function () { return setText(''); } : undefined })) : ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreTextarea, { value: plainValue, scaleWithContent: true, fluid: true, transparent: true, flat: true, size: size, placeholder: placeholder, disabled: sending, onChange: function (e) {
221
- setPlainValue(e.target.value);
222
- onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value);
223
- }, onKeyDown: handleKeyDown, onFocus: onFocus, onBlur: onBlur })) }), (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { fluid: true, size: 'small', spaceBetween: true, verticalAlign: 'center', children: [(0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, fluid: false, size: 'small', verticalAlign: 'center', children: [!hideAttach &&
224
- (extraAttachItems.length ? ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { icon: attachIcon, flat: true, transparent: true, disabled: sending, tooltip: 'Attach', items: __spreadArray([
225
- {
226
- label: 'Upload files',
227
- icon: 'Upload2Line',
228
- onClick: function () { var _a; return (_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.click(); },
229
- }
230
- ], extraAttachItems, true) })) : ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { icon: attachIcon, flat: true, transparent: true, disabled: sending, tooltip: 'Attach files', onClick: function () { var _a; return (_a = fileInput.current) === null || _a === void 0 ? void 0 : _a.click(); } }))), toolbarStart, footerActions] }), (0, jsx_runtime_1.jsxs)(reqore_1.ReqoreControlGroup, { stack: true, fluid: false, size: 'small', children: [rightActions, isSplit ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [sendButton(primary), (0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { className: sendMenuClassName, icon: 'ArrowDownSLine', intent: primary.intent, customTheme: primary.customTheme, minimal: primary.minimal, disabled: !canSend, tooltip: 'More send options', items: actions.map(function (action) { return ({
231
- label: action.label,
232
- icon: action.icon,
233
- intent: action.intent,
234
- onClick: function () { return handleSend(action.id); },
235
- }); }) })] })) : (sendButton(primary))] })] })] })] }), belowInput] }));
236
- });
237
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9;
238
- //# sourceMappingURL=Composer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../src/components/composer/Composer.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA2C;AAC3C,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AACnF,gFAAgF;AAChF,kFAAkF;AAClF,oFAAoF;AAEpF,mDAUkC;AAClC,0EAA+E;AAG/E,+BAWe;AACf,wEAAuC;AACvC,qCAMmB;AAyGnB,iFAAiF;AACjF,2EAA2E;AAC3E,iFAAiF;AACjF,2EAA2E;AAC3E,gFAAgF;AAChF,kBAAkB;AAClB,IAAM,cAAc,GAAG,IAAA,2BAAM,EAAC,qBAAY,CAAC,kKAAwB,cACvD,EAA0C,+EAIrD,KAJW,UAAC,EAAY;QAAV,QAAQ,cAAA;IAAO,OAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAAxB,CAAwB,CAIrD,CAAC;AAEF,mFAAmF;AACnF,mFAAmF;AACnF,IAAM,qBAAqB,GAAG,2BAAM,CAAC,GAAG,6FAAA,0BAEvC,IAAA,CAAC;AAEF,IAAM,oBAAoB,GAAG,2BAAM,CAAC,GAAG,+SAAA,4OAOtC,IAAA,CAAC;AAEF,mFAAmF;AACnF,wFAAwF;AACxF,IAAM,gBAAgB,GAAG,2BAAM,CAAC,GAAG,6FAAA,0BAElC,IAAA,CAAC;AAEF,IAAM,gBAAgB,GAAG,2BAAM,CAAC,GAAG,wHAAA,qDAGlC,IAAA,CAAC;AAEF,IAAM,qBAAqB,GAAG,2BAAM,CAAC,GAAG,qLAAA,kHAKvC,IAAA,CAAC;AAEF,IAAM,oBAAoB,GAAG,2BAAM,CAAC,GAAG,wSAAA,qOAUtC,IAAA,CAAC;AAEF,IAAM,wBAAwB,GAAG,IAAA,2BAAM,EAAC,mBAAU,CAAC,gJAAA,6EAIlD,IAAA,CAAC;AAEF,IAAM,6BAA6B,GAAG,2BAAM,CAAC,GAAG,4HAAA,yDAI/C,IAAA,CAAC;AAEF;;;yBAGyB;AACzB,IAAM,cAAc,GAAY;IAC9B,QAAQ,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,sBAAsB,EAAE;CAC3E,CAAC;AAEW,QAAA,QAAQ,GAAG,IAAA,kBAAU,EAAkC,SAAS,QAAQ,CACnF,EAkCC,EACD,GAAG;IApC+D,iBAgUnE;QA9TG,cAAe,EAAf,MAAM,mBAAG,MAAM,KAAA,EACf,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,mBAAgC,EAAhC,WAAW,mBAAG,kBAAkB,KAAA,EAChC,MAAM,YAAA,EACN,iBAAkB,EAAlB,SAAS,mBAAG,MAAM,KAAA,EAClB,gBAA2B,EAA3B,QAAQ,mBAAG,gBAAgB,KAAA,EAC3B,UAAU,gBAAA,EACV,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA,EAClB,uBAAqC,EAArC,eAAe,mBAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAA,EACrC,WAAW,iBAAA,EACX,iBAAiB,uBAAA,EACjB,OAAO,aAAA,EACP,QAAQ,cAAA,EACR,sBAAmB,EAAnB,cAAc,mBAAG,EAAE,KAAA,EACnB,qBAAoB,EAApB,aAAa,mBAAG,IAAI,KAAA,EACpB,mBAAkB,EAAlB,WAAW,mBAAG,IAAI,KAAA,EAClB,sBAAsB,EAAtB,cAAc,mBAAG,KAAK,KAAA,EACtB,eAAe,qBAAA,EACf,kBAAsB,EAAtB,UAAU,mBAAG,SAAS,KAAA,EACtB,UAAU,gBAAA,EACV,YAAY,kBAAA,EACZ,aAAa,mBAAA,EACb,YAAY,kBAAA,EACZ,UAAU,gBAAA,EACV,UAAU,gBAAA,EACV,QAAQ,cAAA,EACR,eAAe,qBAAA,EACf,OAAO,aAAA,EACP,MAAM,YAAA,EACN,YAAc,EAAd,IAAI,mBAAG,OAAO,KAAA,EACd,OAAO,aAAA,EACP,cAAuB,EAAvB,MAAM,mBAAG,cAAc,KAAA;IAIzB,IAAM,KAAK,GAAG,IAAA,uBAAc,GAAE,CAAC;IACzB,IAAA,KAA4B,IAAA,gBAAQ,EAAsC;QAC9E,OAAA,WAAW,CAAC,CAAC,CAAC,IAAA,6BAAmB,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,0BAAgB;IAAjE,CAAiE,CAClE,EAFM,SAAS,QAAA,EAAE,YAAY,QAE7B,CAAC;IACI,IAAA,KAA8B,IAAA,gBAAQ,EAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC,EAAxD,UAAU,QAAA,EAAE,aAAa,QAA+B,CAAC;IAC1D,IAAA,KAAoB,IAAA,gBAAQ,EAAS,cAAM,OAAA,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,EAAE,EAAlB,CAAkB,CAAC,EAA7D,KAAK,QAAA,EAAE,QAAQ,QAA8C,CAAC;IAC/D,IAAA,KAA0B,IAAA,gBAAQ,EAAW,EAAE,CAAC,EAA/C,QAAQ,QAAA,EAAE,WAAW,QAA0B,CAAC;IACvD,IAAM,SAAS,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IACjD,IAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEhD,iFAAiF;IACjF,IAAA,iBAAS,EAAC;QACR,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAA3D,CAA2D,CAAC,CAAC;QAC3F,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,cAAM,OAAA,IAAI,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAA3B,CAA2B,CAAC,EAAhD,CAAgD,CAAC;IAChE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,IAAM,OAAO,GAAG;QACd,OAAA,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,2BAAiB,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU;IAA7D,CAA6D,CAAC;IAChE,IAAM,OAAO,GAAG,UAAC,IAAY;QAC3B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,YAAY,CAAC,IAAA,6BAAmB,EAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IAEF,IAAA,2BAAmB,EACjB,GAAG,EACH,cAAuB,OAAA,CAAC;QACtB,KAAK,EAAE;;YACL,OAAA,MAAA,MAAA,UAAU,CAAC,OAAO,0CACd,aAAa,CAAc,oCAAoC,CAAC,0CAChE,KAAK,EAAE,CAAA;SAAA;QACb,KAAK,EAAE,cAAM,OAAA,OAAO,CAAC,EAAE,CAAC,EAAX,CAAW;QACxB,OAAO,SAAA;QACP,OAAO,SAAA;KACR,CAAC,EARqB,CAQrB,EACF,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAChC,CAAC;IAEF,4EAA4E;IAC5E,8EAA8E;IAC9E,gFAAgF;IAChF,iFAAiF;IACjF,qCAAqC;IACrC,IAAM,aAAa,GAAG,UAAC,MAA2B,IAA0B,OAAA,qBAC1E,OAAO,EAAE,WAAW,IACjB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,GAC9D,MAAM,EACT,EAJ0E,CAI1E,CAAC;IAEH,IAAM,OAAO,GAA0B,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM;QACxD,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;QAChC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAC7F,IAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnC,IAAM,QAAQ,GAAG,UAAC,QAAgB;QAChC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,QAAQ,CAAC,UAAC,IAAI,IAAK,uCAAI,IAAI,SAAK,QAAQ,SAArB,CAAsB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;IACF,IAAM,UAAU,GAAG,UAAC,KAAa;QAC/B,OAAA,QAAQ,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,KAAK,EAAX,CAAW,CAAC,EAAlC,CAAkC,CAAC;IAAtD,CAAsD,CAAC;IAEzD,IAAM,WAAW,GAAG,UAAC,KAA0B;QAC7C,IAAM,MAAM,GAAG,IAAA,yBAAe,EAAC,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,IAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,IAAM,OAAO,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAElF,IAAM,UAAU,GAAG,UAAO,QAAiB;;;;;oBACnC,IAAI,GAAG,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,sBAAO;oBACT,CAAC;oBACD,qBAAM,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAA;;oBAA3E,SAA2E,CAAC;oBAC5E,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,CAAC,EAAE,CAAC,CAAC;wBACZ,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACf,CAAC;;;;SACF,CAAC;IAEF,IAAM,aAAa,GAAG,UAAC,CAAqB;QAC1C,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAG,CAAC,CAAC,CAAC;QACrB,IAAI,aAAa,IAAI,IAAA,4BAAkB,EAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,KAAK,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,uBAAC,sBAAa,IAAC,MAAM,EAAC,OAAO,EAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,OAAO,EAAC,IAAI,kBAC5D,cAAc,GACD,CACjB,CAAC;IACJ,CAAC;IAED,IAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,gFAAgF;IAChF,uEAAuE;IACvE,IAAM,UAAU,GAAG,UAAC,MAA2B,IAAK,OAAA,CAClD,uBAAC,qBAAY,IACX,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,CAAC,OAAO,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,QACJ,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAArB,CAAqB,EACpC,KAAK,EAAE,CAAC,OAAO,YAEd,MAAM,CAAC,KAAK,GACA,CAChB,EAfmD,CAenD,CAAC;IAEF,OAAO,CACL,wBAAC,qBAAqB,IAAC,GAAG,EAAE,UAAU,aACpC,wBAAC,cAAc,IACb,EAAE,EAAC,KAAK,EACR,KAAK,EAAE,KAAK,cACF,OAAO;gBACjB,yEAAyE;gBACzE,0EAA0E;gBAC1E,WAAW,EAAE,CAAC,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,aAEpB,kCACE,GAAG,EAAE,SAAS,EACd,IAAI,EAAC,MAAM,EACX,QAAQ,QACR,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAC1B,QAAQ,EAAE,UAAC,CAAC;4BACV,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gCACnB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;4BACvC,CAAC;4BACD,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;wBACtB,CAAC,GACD,EACD,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,uBAAC,oBAAoB,cAClB,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,IAAK,OAAA,CAC1B,wBAAC,gBAAgB,eACd,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACjB,uBAAC,qBAAqB,IAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,GAAI,CAChE,CAAC,CAAC,CAAC,CACF,wBAAC,oBAAoB,IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,aACpC,uBAAC,mBAAU,IAAC,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,OAAO,GAAG,EAC3C,uBAAC,wBAAwB,IAAC,IAAI,EAAC,OAAO,YAAE,IAAI,CAAC,IAAI,GAA4B,IACxD,CACxB,EACD,uBAAC,6BAA6B,cAC5B,uBAAC,qBAAY,IACX,IAAI,EAAC,WAAW,EAChB,IAAI,EAAC,OAAO,EACZ,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAC/B,MAAM,QACN,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,KAAK,CAAC,EAAjB,CAAiB,EAChC,OAAO,EAAC,mBAAmB,GAC3B,GAC4B,KAlBX,UAAG,IAAI,CAAC,IAAI,cAAI,KAAK,CAAE,CAmB3B,CACpB,EArB2B,CAqB3B,CAAC,GACmB,CACxB,EACD,wBAAC,2BAAkB,IAAC,QAAQ,QAAC,KAAK,mBAC/B,UAAU,IAAI,uBAAC,gBAAgB,cAAE,UAAU,GAAoB,EAChE,uBAAC,2BAAkB,IAAC,KAAK,QAAC,aAAa,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,YAC1D,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CACnB,uBAAC,6BAAoB,IACnB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAC3B,QAAQ,EAAE,UAAC,KAAK;wCACd,YAAY,CAAC,KAAK,CAAC,CAAC;wCACpB,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,IAAA,2BAAiB,EAAC,KAAK,CAAC,CAAC,CAAC;oCACvC,CAAC,EACD,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EACjB,WAAW,QACX,IAAI,QACJ,KAAK,QACL,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EACrD,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,cAAM,OAAA,OAAO,CAAC,EAAE,CAAC,EAAX,CAAW,CAAC,CAAC,CAAC,SAAS,GAClD,CACH,CAAC,CAAC,CAAC,CACF,uBAAC,uBAAc,IACb,KAAK,EAAE,UAAU,EACjB,gBAAgB,QAChB,KAAK,QACL,WAAW,QACX,IAAI,QACJ,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,UAAC,CAAwC;wCACjD,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wCAC9B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oCAC7B,CAAC,EACD,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACd,CACH,GACkB,EACrB,wBAAC,2BAAkB,IAAC,KAAK,QAAC,IAAI,EAAC,OAAO,EAAC,YAAY,QAAC,aAAa,EAAC,QAAQ,aACxE,wBAAC,2BAAkB,IAAC,KAAK,QAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,aAAa,EAAC,QAAQ,aACxE,CAAC,UAAU;gDACV,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CACzB,uBAAC,uBAAc,IACb,IAAI,EAAE,UAAU,EAChB,IAAI,QACJ,WAAW,QACX,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAC,QAAQ,EAChB,KAAK;wDACH;4DACE,KAAK,EAAE,cAAc;4DACrB,IAAI,EAAE,aAAa;4DACnB,OAAO,EAAE,sBAAM,OAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,EAAA;yDAC1C;uDACE,gBAAgB,UAErB,CACH,CAAC,CAAC,CAAC,CACF,uBAAC,qBAAY,IACX,IAAI,EAAE,UAAU,EAChB,IAAI,QACJ,WAAW,QACX,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAC,cAAc,EACtB,OAAO,EAAE,sBAAM,OAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA,EAAA,GACzC,CACH,CAAC,EACH,YAAY,EACZ,aAAa,IACK,EACrB,wBAAC,2BAAkB,IAAC,KAAK,QAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAC,OAAO,aACjD,YAAY,EACZ,OAAO,CAAC,CAAC,CAAC,CACT,6DACG,UAAU,CAAC,OAAO,CAAC,EACpB,uBAAC,uBAAc,IACb,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAC,gBAAgB,EACrB,MAAM,EAAE,OAAO,CAAC,MAAM,EACtB,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,OAAO,EAAE,OAAO,CAAC,OAAO,EACxB,QAAQ,EAAE,CAAC,OAAO,EAClB,OAAO,EAAC,mBAAmB,EAC3B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,CAAC;4DAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;4DACnB,IAAI,EAAE,MAAM,CAAC,IAAI;4DACjB,MAAM,EAAE,MAAM,CAAC,MAAM;4DACrB,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAArB,CAAqB;yDACrC,CAAC,EAL6B,CAK7B,CAAC,GACH,IACD,CACJ,CAAC,CAAC,CAAC,CACF,UAAU,CAAC,OAAO,CAAC,CACpB,IACkB,IACF,IACF,IACN,EAChB,UAAU,IACW,CACzB,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,21 +0,0 @@
1
- import type { ClipboardEvent, KeyboardEvent } from 'react';
2
- import type { IReqoreRichTextEditorProps } from '@qoretechnologies/reqore/dist/components/RichTextEditor';
3
- /** The Slate value for an empty rich editor — a single empty paragraph. */
4
- export declare const EMPTY_RICH_VALUE: IReqoreRichTextEditorProps['value'];
5
- /**
6
- * Rich editor value → plain string. Top-level blocks join with `\n` so a
7
- * multi-paragraph message (a support reply, a pasted log) survives as real
8
- * newlines; within a block, text leaves and `tag` values concatenate. Mirrors
9
- * qorus-ide's `richtextToString` but newline-preserving for multi-line composers.
10
- */
11
- export declare const richValueToString: (value: IReqoreRichTextEditorProps['value']) => string;
12
- /** Plain string → rich editor value: one paragraph per line, so `setText`
13
- * round-trips with `richValueToString`. */
14
- export declare const richValueFromString: (text: string) => IReqoreRichTextEditorProps['value'];
15
- /** Image files present on a clipboard paste (a screenshot, a copied image), so
16
- * pasting-to-attach works on any composer without an IDE dependency. */
17
- export declare const clipboardImages: (event: ClipboardEvent) => File[];
18
- /** Enter with no modifier — the "submit" chord (Shift/Ctrl/Alt/Meta+Enter insert
19
- * a newline instead). */
20
- export declare const isPlainSubmitEnter: (e: Pick<KeyboardEvent, 'key' | 'shiftKey' | 'ctrlKey' | 'altKey' | 'metaKey'>) => boolean;
21
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/composer/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AAE1G,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,EAAE,0BAA0B,CAAC,OAAO,CAEhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,UAAW,0BAA0B,CAAC,OAAO,CAAC,KAAG,MAuB9E,CAAC;AAEF;4CAC4C;AAC5C,eAAO,MAAM,mBAAmB,SAAU,MAAM,KAAG,0BAA0B,CAAC,OAAO,CAQpF,CAAC;AAEF;yEACyE;AACzE,eAAO,MAAM,eAAe,UAAW,cAAc,KAAG,IAAI,EAW3D,CAAC;AAEF;0BAC0B;AAC1B,eAAO,MAAM,kBAAkB,MAC1B,KAAK,aAAa,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC,KAC5E,OAAoF,CAAC"}
@@ -1,75 +0,0 @@
1
- "use strict";
2
- // Copyright 2026 Qore Technologies, s.r.o.
3
- // Pure helpers for the shared <Composer>. No DOM/app coupling — safe on any surface.
4
- Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.isPlainSubmitEnter = exports.clipboardImages = exports.richValueFromString = exports.richValueToString = exports.EMPTY_RICH_VALUE = void 0;
6
- /** The Slate value for an empty rich editor — a single empty paragraph. */
7
- exports.EMPTY_RICH_VALUE = [
8
- { type: 'paragraph', children: [{ text: '' }] },
9
- ];
10
- /**
11
- * Rich editor value → plain string. Top-level blocks join with `\n` so a
12
- * multi-paragraph message (a support reply, a pasted log) survives as real
13
- * newlines; within a block, text leaves and `tag` values concatenate. Mirrors
14
- * qorus-ide's `richtextToString` but newline-preserving for multi-line composers.
15
- */
16
- var richValueToString = function (value) {
17
- if (!value) {
18
- return '';
19
- }
20
- if (typeof value === 'string') {
21
- return value;
22
- }
23
- var nodeText = function (node) {
24
- var _a, _b;
25
- if (node == null) {
26
- return '';
27
- }
28
- if (typeof node.text === 'string') {
29
- return node.text;
30
- }
31
- if (node.type === 'tag') {
32
- return (_b = (_a = node.value) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
33
- }
34
- if (Array.isArray(node.children)) {
35
- return node.children.map(nodeText).join('');
36
- }
37
- return '';
38
- };
39
- return value.map(nodeText).join('\n');
40
- };
41
- exports.richValueToString = richValueToString;
42
- /** Plain string → rich editor value: one paragraph per line, so `setText`
43
- * round-trips with `richValueToString`. */
44
- var richValueFromString = function (text) {
45
- if (!text) {
46
- return exports.EMPTY_RICH_VALUE;
47
- }
48
- return text.split('\n').map(function (line) { return ({
49
- type: 'paragraph',
50
- children: [{ text: line }],
51
- }); });
52
- };
53
- exports.richValueFromString = richValueFromString;
54
- /** Image files present on a clipboard paste (a screenshot, a copied image), so
55
- * pasting-to-attach works on any composer without an IDE dependency. */
56
- var clipboardImages = function (event) {
57
- var _a, _b;
58
- var images = [];
59
- for (var _i = 0, _c = Array.from((_b = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.items) !== null && _b !== void 0 ? _b : []); _i < _c.length; _i++) {
60
- var item = _c[_i];
61
- if (item.kind === 'file' && item.type.startsWith('image/')) {
62
- var file = item.getAsFile();
63
- if (file) {
64
- images.push(file);
65
- }
66
- }
67
- }
68
- return images;
69
- };
70
- exports.clipboardImages = clipboardImages;
71
- /** Enter with no modifier — the "submit" chord (Shift/Ctrl/Alt/Meta+Enter insert
72
- * a newline instead). */
73
- var isPlainSubmitEnter = function (e) { return e.key === 'Enter' && !e.shiftKey && !e.ctrlKey && !e.altKey && !e.metaKey; };
74
- exports.isPlainSubmitEnter = isPlainSubmitEnter;
75
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/composer/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export * from './Composer';
2
- export * from './helpers';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/composer/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Composer"), exports);
18
- __exportStar(require("./helpers"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/composer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,4CAA0B"}
@@ -1,17 +0,0 @@
1
- export interface IImageLightboxImage {
2
- attachment_id: string;
3
- filename: string;
4
- }
5
- export interface IImageLightboxProps {
6
- /** the set the viewer pages across — one image is a set of one (no paging chrome) */
7
- images: IImageLightboxImage[];
8
- /** which image is shown */
9
- index: number;
10
- onIndex: (index: number) => void;
11
- onClose: () => void;
12
- /** resolve an image's bytes as an object URL (the consumer's authed endpoint) */
13
- fetchAttachmentUrl: (attachmentId: string) => Promise<string>;
14
- onDownload?: (attachmentId: string, filename: string) => void;
15
- }
16
- export declare const ImageLightbox: ({ images, index, onIndex, onClose, fetchAttachmentUrl, onDownload, }: IImageLightboxProps) => import("react/jsx-runtime").JSX.Element;
17
- //# sourceMappingURL=ImageLightbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageLightbox.d.ts","sourceRoot":"","sources":["../../../src/components/imageLightbox/ImageLightbox.tsx"],"names":[],"mappings":"AAqCA,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iFAAiF;IACjF,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED,eAAO,MAAM,aAAa,yEAOvB,mBAAmB,4CA2GrB,CAAC"}
@@ -1,129 +0,0 @@
1
- "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
- var __assign = (this && this.__assign) || function () {
7
- __assign = Object.assign || function(t) {
8
- for (var s, i = 1, n = arguments.length; i < n; i++) {
9
- s = arguments[i];
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
- t[p] = s[p];
12
- }
13
- return t;
14
- };
15
- return __assign.apply(this, arguments);
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.ImageLightbox = void 0;
22
- var jsx_runtime_1 = require("react/jsx-runtime");
23
- var reqore_1 = require("@qoretechnologies/reqore");
24
- var react_1 = require("react");
25
- var styled_components_1 = __importDefault(require("styled-components"));
26
- /*
27
- * The shared full-image viewer: a `ReqoreModal` holding one image at a time, with
28
- * click-to-zoom, keyboard/arrow paging across a set, and a download action. Both the
29
- * ticket thread (an image attachment on a message) and the References tab (the ticket's
30
- * screenshot grid) open this, so there is one lightbox rather than a Modal-backed one
31
- * here and a hand-rolled overlay there.
32
- *
33
- * reqore has no image-viewer primitive, so the zoom stage below is bespoke — but the
34
- * shell, backdrop, focus trap, Esc-to-close and header/actions are all `ReqoreModal`.
35
- * When reqore gains a real viewer this collapses onto it. It fetches the shown image's
36
- * bytes itself (caching per id), so a consumer only has to hand it `fetchAttachmentUrl`.
37
- */
38
- var Stage = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 40vh;\n max-height: 74vh;\n overflow: auto;\n background: rgba(0, 0, 0, 0.25);\n border-radius: 8px;\n\n img {\n display: block;\n cursor: ", ";\n ", "\n }\n"], ["\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 40vh;\n max-height: 74vh;\n overflow: auto;\n background: rgba(0, 0, 0, 0.25);\n border-radius: 8px;\n\n img {\n display: block;\n cursor: ", ";\n ", "\n }\n"])), function (_a) {
39
- var $zoom = _a.$zoom;
40
- return ($zoom ? 'zoom-out' : 'zoom-in');
41
- }, function (_a) {
42
- var $zoom = _a.$zoom;
43
- return $zoom
44
- ? 'max-width: none; max-height: none;'
45
- : 'max-width: 100%; max-height: 74vh; object-fit: contain;';
46
- });
47
- var ImageLightbox = function (_a) {
48
- var images = _a.images, index = _a.index, onIndex = _a.onIndex, onClose = _a.onClose, fetchAttachmentUrl = _a.fetchAttachmentUrl, onDownload = _a.onDownload;
49
- var _b = (0, react_1.useState)(false), zoom = _b[0], setZoom = _b[1];
50
- // url per attachment: undefined = not fetched, null = fetch failed, string = ready
51
- var _c = (0, react_1.useState)({}), urls = _c[0], setUrls = _c[1];
52
- var requested = (0, react_1.useRef)(new Set());
53
- // Render above everything currently on screen: the ticket composer that can open this
54
- // lightbox floats at its own climbed z-index (also useLatestZIndex), so a modal on a fixed
55
- // z-index ends up BEHIND it. Climbing past the current top keeps the viewer on top wherever
56
- // it's opened from.
57
- var zIndex = (0, reqore_1.useLatestZIndex)();
58
- var image = images[index];
59
- var id = image === null || image === void 0 ? void 0 : image.attachment_id;
60
- var url = id ? urls[id] : undefined;
61
- var multiple = images.length > 1;
62
- // Keep the latest fetcher in a ref so the fetch effect can depend on `id` ALONE.
63
- // Consumers routinely pass `fetchAttachmentUrl` as an inline arrow — a new identity
64
- // every render. If the effect depended on it, each parent re-render would re-run the
65
- // effect: the previous run's cleanup fired first, so its in-flight fetch resolved with
66
- // nothing to write to, and because `requested` already held the id nothing re-fetched.
67
- // Net result: the spinner hung forever. Depending on `id` only breaks that cycle.
68
- var fetchRef = (0, react_1.useRef)(fetchAttachmentUrl);
69
- fetchRef.current = fetchAttachmentUrl;
70
- // True only while mounted: a fetch that resolves after unmount is dropped, but one that
71
- // resolves after a benign re-render still caches — the distinction a per-run flag missed.
72
- var mounted = (0, react_1.useRef)(true);
73
- (0, react_1.useEffect)(function () { return function () {
74
- mounted.current = false;
75
- }; }, []);
76
- // fetch the shown image's bytes once per id; `requested` guards against re-fetching a
77
- // page you've already visited
78
- (0, react_1.useEffect)(function () {
79
- if (!id || requested.current.has(id)) {
80
- return undefined;
81
- }
82
- requested.current.add(id);
83
- fetchRef.current(id)
84
- .then(function (resolved) { return mounted.current && setUrls(function (current) {
85
- var _a;
86
- return (__assign(__assign({}, current), (_a = {}, _a[id] = resolved, _a)));
87
- }); })
88
- .catch(function () { return mounted.current && setUrls(function (current) {
89
- var _a;
90
- return (__assign(__assign({}, current), (_a = {}, _a[id] = null, _a)));
91
- }); });
92
- return undefined;
93
- }, [id]);
94
- var step = (0, react_1.useCallback)(function (delta) {
95
- setZoom(false);
96
- onIndex((index + delta + images.length) % images.length);
97
- }, [index, images.length, onIndex]);
98
- (0, react_1.useEffect)(function () {
99
- if (!multiple) {
100
- return undefined;
101
- }
102
- var handler = function (event) {
103
- if (event.key === 'ArrowRight') {
104
- step(1);
105
- }
106
- else if (event.key === 'ArrowLeft') {
107
- step(-1);
108
- }
109
- };
110
- window.addEventListener('keydown', handler);
111
- return function () { return window.removeEventListener('keydown', handler); };
112
- }, [step, multiple]);
113
- if (!image) {
114
- return null;
115
- }
116
- return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreModal, { isOpen: true, onClose: onClose, customZIndex: zIndex, blur: 3, icon: 'ImageLine', label: image.filename, badge: multiple ? "".concat(index + 1, " / ").concat(images.length) : undefined, actions: [
117
- { icon: 'ArrowLeftSLine', tooltip: 'Previous', onClick: function () { return step(-1); }, show: multiple },
118
- { icon: 'ArrowRightSLine', tooltip: 'Next', onClick: function () { return step(1); }, show: multiple },
119
- {
120
- icon: 'DownloadLine',
121
- tooltip: 'Download',
122
- onClick: function () { return onDownload === null || onDownload === void 0 ? void 0 : onDownload(image.attachment_id, image.filename); },
123
- show: !!onDownload,
124
- },
125
- ], children: (0, jsx_runtime_1.jsx)(Stage, { "$zoom": zoom, children: url ? ((0, jsx_runtime_1.jsx)("img", { src: url, alt: image.filename, onClick: function () { return setZoom(function (z) { return !z; }); } })) : url === null ? ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreSpan, { effect: { opacity: 0.6 }, children: "Preview unavailable \u2014 use Download." })) : ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreSpinner, { iconColor: 'info', size: 'big', children: "Loading\u2026" })) }) }));
126
- };
127
- exports.ImageLightbox = ImageLightbox;
128
- var templateObject_1;
129
- //# sourceMappingURL=ImageLightbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageLightbox.js","sourceRoot":"","sources":["../../../src/components/imageLightbox/ImageLightbox.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from './ImageLightbox';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/imageLightbox/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ImageLightbox"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/imageLightbox/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC"}
@@ -1,10 +0,0 @@
1
- export interface IAttachmentChipsProps {
2
- files: File[];
3
- onRemove: (index: number) => void;
4
- /** Rename a staged file. Omit to make chips non-renamable. The host replaces the File with a
5
- * renamed copy (`new File([file], newName, { type: file.type })`). */
6
- onRename?: (index: number, newName: string) => void;
7
- disabled?: boolean;
8
- }
9
- export declare const AttachmentChips: ({ files, onRemove, onRename, disabled }: IAttachmentChipsProps) => import("react/jsx-runtime").JSX.Element;
10
- //# sourceMappingURL=AttachmentChips.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AttachmentChips.d.ts","sourceRoot":"","sources":["../../../src/components/supportTicket/AttachmentChips.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;2EACuE;IACvE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,eAAe,4CAA6C,qBAAqB,4CAoH7F,CAAC"}