@qoretechnologies/reqraft 0.10.13-pr.74.gccefa54 → 0.10.13

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 (125) hide show
  1. package/.claude/CLAUDE.md +8 -11
  2. package/dist/components/form/engine/FormEngine.d.ts +1 -1
  3. package/dist/helpers/common.d.ts +0 -5
  4. package/dist/helpers/common.d.ts.map +1 -1
  5. package/dist/helpers/common.js +1 -20
  6. package/dist/helpers/common.js.map +1 -1
  7. package/dist/index.d.ts +0 -5
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -7
  10. package/dist/index.js.map +1 -1
  11. package/dist/providers/StorageProvider.d.ts +13 -0
  12. package/dist/providers/StorageProvider.d.ts.map +1 -1
  13. package/dist/providers/StorageProvider.js +29 -5
  14. package/dist/providers/StorageProvider.js.map +1 -1
  15. package/package.json +3 -3
  16. package/src/helpers/common.ts +0 -19
  17. package/src/hooks/useStorage/useStorage.stories.tsx +52 -0
  18. package/src/index.tsx +0 -5
  19. package/src/providers/StorageProvider.tsx +30 -4
  20. package/dist/components/composer/Composer.d.ts +0 -108
  21. package/dist/components/composer/Composer.d.ts.map +0 -1
  22. package/dist/components/composer/Composer.js +0 -238
  23. package/dist/components/composer/Composer.js.map +0 -1
  24. package/dist/components/composer/helpers.d.ts +0 -21
  25. package/dist/components/composer/helpers.d.ts.map +0 -1
  26. package/dist/components/composer/helpers.js +0 -75
  27. package/dist/components/composer/helpers.js.map +0 -1
  28. package/dist/components/composer/index.d.ts +0 -3
  29. package/dist/components/composer/index.d.ts.map +0 -1
  30. package/dist/components/composer/index.js +0 -19
  31. package/dist/components/composer/index.js.map +0 -1
  32. package/dist/components/imageLightbox/ImageLightbox.d.ts +0 -17
  33. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +0 -1
  34. package/dist/components/imageLightbox/ImageLightbox.js +0 -129
  35. package/dist/components/imageLightbox/ImageLightbox.js.map +0 -1
  36. package/dist/components/imageLightbox/index.d.ts +0 -2
  37. package/dist/components/imageLightbox/index.d.ts.map +0 -1
  38. package/dist/components/imageLightbox/index.js +0 -18
  39. package/dist/components/imageLightbox/index.js.map +0 -1
  40. package/dist/components/supportTicket/AttachmentChips.d.ts +0 -10
  41. package/dist/components/supportTicket/AttachmentChips.d.ts.map +0 -1
  42. package/dist/components/supportTicket/AttachmentChips.js +0 -119
  43. package/dist/components/supportTicket/AttachmentChips.js.map +0 -1
  44. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +0 -35
  45. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +0 -1
  46. package/dist/components/supportTicket/InterfaceReferenceTags.js +0 -31
  47. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +0 -1
  48. package/dist/components/supportTicket/ReferencePicker.d.ts +0 -41
  49. package/dist/components/supportTicket/ReferencePicker.d.ts.map +0 -1
  50. package/dist/components/supportTicket/ReferencePicker.js +0 -86
  51. package/dist/components/supportTicket/ReferencePicker.js.map +0 -1
  52. package/dist/components/supportTicket/TicketHeader.d.ts +0 -86
  53. package/dist/components/supportTicket/TicketHeader.d.ts.map +0 -1
  54. package/dist/components/supportTicket/TicketHeader.js +0 -149
  55. package/dist/components/supportTicket/TicketHeader.js.map +0 -1
  56. package/dist/components/supportTicket/TicketMetaTags.d.ts +0 -32
  57. package/dist/components/supportTicket/TicketMetaTags.d.ts.map +0 -1
  58. package/dist/components/supportTicket/TicketMetaTags.js +0 -21
  59. package/dist/components/supportTicket/TicketMetaTags.js.map +0 -1
  60. package/dist/components/supportTicket/TicketReplyBox.d.ts +0 -63
  61. package/dist/components/supportTicket/TicketReplyBox.d.ts.map +0 -1
  62. package/dist/components/supportTicket/TicketReplyBox.js +0 -115
  63. package/dist/components/supportTicket/TicketReplyBox.js.map +0 -1
  64. package/dist/components/supportTicket/fileToAttachment.d.ts +0 -9
  65. package/dist/components/supportTicket/fileToAttachment.d.ts.map +0 -1
  66. package/dist/components/supportTicket/fileToAttachment.js +0 -28
  67. package/dist/components/supportTicket/fileToAttachment.js.map +0 -1
  68. package/dist/components/supportTicket/index.d.ts +0 -9
  69. package/dist/components/supportTicket/index.d.ts.map +0 -1
  70. package/dist/components/supportTicket/index.js +0 -25
  71. package/dist/components/supportTicket/index.js.map +0 -1
  72. package/dist/components/supportTicket/meta.d.ts +0 -63
  73. package/dist/components/supportTicket/meta.d.ts.map +0 -1
  74. package/dist/components/supportTicket/meta.js +0 -79
  75. package/dist/components/supportTicket/meta.js.map +0 -1
  76. package/dist/components/ticketReferences/TicketReferences.d.ts +0 -52
  77. package/dist/components/ticketReferences/TicketReferences.d.ts.map +0 -1
  78. package/dist/components/ticketReferences/TicketReferences.js +0 -453
  79. package/dist/components/ticketReferences/TicketReferences.js.map +0 -1
  80. package/dist/components/ticketReferences/index.d.ts +0 -3
  81. package/dist/components/ticketReferences/index.d.ts.map +0 -1
  82. package/dist/components/ticketReferences/index.js +0 -6
  83. package/dist/components/ticketReferences/index.js.map +0 -1
  84. package/dist/components/ticketThread/TicketThread.d.ts +0 -52
  85. package/dist/components/ticketThread/TicketThread.d.ts.map +0 -1
  86. package/dist/components/ticketThread/TicketThread.js +0 -248
  87. package/dist/components/ticketThread/TicketThread.js.map +0 -1
  88. package/dist/components/ticketThread/index.d.ts +0 -3
  89. package/dist/components/ticketThread/index.d.ts.map +0 -1
  90. package/dist/components/ticketThread/index.js +0 -7
  91. package/dist/components/ticketThread/index.js.map +0 -1
  92. package/dist/helpers/scrollbar.d.ts +0 -2
  93. package/dist/helpers/scrollbar.d.ts.map +0 -1
  94. package/dist/helpers/scrollbar.js +0 -25
  95. package/dist/helpers/scrollbar.js.map +0 -1
  96. package/src/components/composer/Composer.stories.tsx +0 -238
  97. package/src/components/composer/Composer.tsx +0 -545
  98. package/src/components/composer/helpers.ts +0 -74
  99. package/src/components/composer/index.ts +0 -2
  100. package/src/components/imageLightbox/ImageLightbox.stories.tsx +0 -156
  101. package/src/components/imageLightbox/ImageLightbox.tsx +0 -169
  102. package/src/components/imageLightbox/index.ts +0 -1
  103. package/src/components/supportTicket/AttachmentChips.stories.tsx +0 -122
  104. package/src/components/supportTicket/AttachmentChips.tsx +0 -142
  105. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +0 -134
  106. package/src/components/supportTicket/InterfaceReferenceTags.tsx +0 -85
  107. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -296
  108. package/src/components/supportTicket/ReferencePicker.tsx +0 -237
  109. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -122
  110. package/src/components/supportTicket/TicketHeader.stories.tsx +0 -183
  111. package/src/components/supportTicket/TicketHeader.tsx +0 -247
  112. package/src/components/supportTicket/TicketMetaTags.stories.tsx +0 -103
  113. package/src/components/supportTicket/TicketMetaTags.tsx +0 -85
  114. package/src/components/supportTicket/TicketReplyBox.stories.tsx +0 -355
  115. package/src/components/supportTicket/TicketReplyBox.tsx +0 -146
  116. package/src/components/supportTicket/fileToAttachment.ts +0 -24
  117. package/src/components/supportTicket/index.ts +0 -8
  118. package/src/components/supportTicket/meta.ts +0 -145
  119. package/src/components/ticketReferences/TicketReferences.stories.tsx +0 -301
  120. package/src/components/ticketReferences/TicketReferences.tsx +0 -899
  121. package/src/components/ticketReferences/index.ts +0 -2
  122. package/src/components/ticketThread/TicketThread.stories.tsx +0 -751
  123. package/src/components/ticketThread/TicketThread.tsx +0 -650
  124. package/src/components/ticketThread/index.ts +0 -6
  125. package/src/helpers/scrollbar.ts +0 -32
package/.claude/CLAUDE.md CHANGED
@@ -44,7 +44,7 @@ ReQraft (`@qoretechnologies/reqraft`) is a **React hooks and components toolkit*
44
44
  - **Styling:** styled-components (inherited from ReQore); no CSS modules
45
45
  - **State Management:** zustand (stores) + React Context (`use-context-selector`)
46
46
  - **Data Fetching:** `@tanstack/react-query` v4 (via `query()` util + `useFetch` hook)
47
- - **Testing:** Vitest a `unit` project (jsdom, tests in `__tests__/`) + a `storybook` project (every story run in a real Chromium browser via Playwright); React Testing Library for component assertions
47
+ - **Testing:** Jest + React Testing Library (tests in `__tests__/`)
48
48
  - **Documentation:** Storybook (stories co-located in `src/` with `.stories.tsx` suffix)
49
49
  - **Storybook port:** `6008` (not 6007 — that's reqore)
50
50
 
@@ -155,9 +155,7 @@ A generic `<Field>` component dispatches to the appropriate field by type.
155
155
  ```bash
156
156
  yarn install
157
157
  yarn storybook # Dev mode on http://localhost:6008
158
- yarn test # Vitest unit tests (jsdom)
159
- yarn test:watch # Vitest unit watch mode
160
- yarn test:stories # Story / interaction tests in a real browser (+ Qlip capture)
158
+ yarn test:watch # Jest watch mode
161
159
  yarn lint # ESLint check
162
160
  yarn build # TypeScript compilation (tsconfig.prod.json)
163
161
  yarn build:test # Type-check without emit
@@ -179,17 +177,16 @@ yarn build:test # Type-check without emit
179
177
 
180
178
  ### Testing Patterns
181
179
 
182
- - Two Vitest projects (see `vitest.config.ts`): **unit** (jsdom; tests in `__tests__/`, mirroring `src/`) and **storybook** (every `*.stories.tsx` run in a real Chromium browser via Playwright). There is no Jest.
183
- - Wrap unit tests with `ReqraftProvider` (or at minimum `QueryClientProvider`)
180
+ - Tests live in `__tests__/` (mirror `src/` structure)
181
+ - Wrap tests with `ReqraftProvider` (or at minimum `QueryClientProvider`)
184
182
  - Use `mock-socket` for WebSocket testing
185
- - Run: `yarn test` (unit) · `yarn test:stories [file-substring]` (stories) · `yarn precheck` (lint + unit + `build:test:prod`)
183
+ - Run: `./node_modules/.bin/jest --passWithNoTests`
186
184
 
187
- ### Storybook Stories & visual testing
185
+ ### Storybook Stories
188
186
 
189
187
  - Stories are co-located alongside source: `src/hooks/useFetch/useFetch.stories.tsx`
190
188
  - Storybook port: **6008**
191
- - Story + interaction tests run on **Vitest browser mode** (Playwright/Chromium): `yarn test:stories [file-substring]`. Run `yarn install-playwright` once first.
192
- - **Visual regression via Qlip** (not Chromatic): the story run captures snapshots through the `qlip` Vitest plugin. Upload is gated on `QLIP_UPLOAD_TOKEN` (`vitest.config.ts`), so **local runs capture but never upload** — PNGs land in `qlip/screenshots/<ts>/stories/auto/<StoryId>.png` (gitignored); read the PNG to verify a visual change. CI (`.github/workflows/tests.yml`) sets the token and uploads a build for dashboard review. The full visual-change flow + the `qlip` MCP review skill live in the imported `stacks/frontend/FRONTEND.md`.
189
+ - Visual testing via Chromatic (`yarn chromatic`)
193
190
 
194
191
  ## Code Patterns & Conventions
195
192
 
@@ -271,7 +268,7 @@ yarn build:test # Type-check without emit
271
268
  | `src/components/log/` | Log display component |
272
269
  | `src/components/menu/` | Navigation menu component |
273
270
  | `src/types/` | Shared TypeScript types |
274
- | `__tests__/` | Vitest unit tests (jsdom) |
271
+ | `__tests__/` | Jest tests |
275
272
 
276
273
  ## Other
277
274
 
@@ -46,7 +46,7 @@ export declare const flattenOptions: (options: TQorusForm) => TQorusFlatForm;
46
46
  export declare const getTypeAndCanBeNull: (type: TQorusType | TQorusType[], allowed_values?: any[], operatorData?: TOperatorValue, operators?: IOperatorsSchema) => {
47
47
  type: TQorusType;
48
48
  defaultType: TQorusType;
49
- defaultInternalType: "string" | "number" | "boolean" | "function" | "type" | "file" | "data" | "date" | "email" | "range" | "url" | "group" | "list" | "step" | "richtext" | "fsm" | "errors" | "class" | "bool" | "int" | "float" | "hash" | "mapper" | "workflow" | "service" | "job" | "connection" | "constant" | "mapper-code" | "queue" | "pipeline" | "sla" | "value-map" | "qog" | "ai-collection" | "ai-endpoint" | "ai-guardrail" | "binary" | "long-string" | "enum" | "integer" | "free-list" | "rgbcolor" | "free-hash" | "null" | "nothing" | "data-provider" | "context" | "processor-mappings" | "tool-catalog" | "code-editor";
49
+ defaultInternalType: "string" | "number" | "boolean" | "function" | "url" | "data" | "richtext" | "type" | "group" | "list" | "fsm" | "errors" | "step" | "class" | "bool" | "int" | "float" | "hash" | "mapper" | "workflow" | "service" | "job" | "connection" | "constant" | "mapper-code" | "queue" | "pipeline" | "sla" | "value-map" | "qog" | "ai-collection" | "ai-endpoint" | "ai-guardrail" | "binary" | "date" | "email" | "long-string" | "enum" | "integer" | "range" | "free-list" | "rgbcolor" | "free-hash" | "null" | "nothing" | "data-provider" | "context" | "file" | "processor-mappings" | "tool-catalog" | "code-editor";
50
50
  canBeNull: boolean;
51
51
  };
52
52
  /** Display metadata for a read-first group, keyed by the raw `group` string;
@@ -26,11 +26,6 @@ export declare const richtextToSegments: (richtext: IReqoreRichTextEditorProps['
26
26
  export declare const insertAtIndex: (array: any[], index: number, value: any) => any[];
27
27
  /** Splits a byte-size string (e.g. `"10MiB"`) into `[amount, unit]`. */
28
28
  export declare const splitByteSize: (value?: string) => [number | undefined, string | undefined];
29
- /** Human-readable file size, e.g. `"12.3 KB"` — whole bytes below 1 KiB, one
30
- * decimal above. Shared by the ticket thread / references attachment rows. */
31
- export declare const formatBytes: (bytes: number) => string;
32
- /** True when a MIME content type is an image (`image/*`). */
33
- export declare const isImage: (contentType: string) => boolean;
34
29
  export declare const getProtocol: (v?: string) => string;
35
30
  export declare const getAddress: (v?: string) => string;
36
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/helpers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAKrE,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AA4C1C,eAAO,MAAM,WAAW,eAAgB,MAAM,KAAG,UAOhD,CAAC;AAEF,eAAO,MAAM,WAAW,UAAW,UAAU,KAAG,MAQ/C,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,qBAAqB,KAAG,OAAO,GAAG,SAUzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,aAAc,0BAA0B,CAAC,OAAO,CAAC,KAAG,MA6BhF,CAAC;AAEF;;+EAE+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;sEAEsE;AACtE,eAAO,MAAM,kBAAkB,aACnB,0BAA0B,CAAC,OAAO,CAAC,KAC5C,gBAAgB,EAkClB,CAAC;AAEF,eAAO,MAAM,aAAa,UAAW,GAAG,EAAE,wBAAyB,GAAG,KAAG,GAAG,EAE3E,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,CAIrF,CAAC;AAEF;+EAC+E;AAC/E,eAAO,MAAM,WAAW,UAAW,MAAM,KAAG,MAY3C,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,OAAO,gBAAiB,MAAM,KAAG,OAA2C,CAAC;AAK1F,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,MAQxC,CAAC;AAEF,eAAO,MAAM,UAAU,OAAQ,MAAM,KAAG,MAavC,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/helpers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAKrE,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AACpD,KAAK,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AA4C1C,eAAO,MAAM,WAAW,eAAgB,MAAM,KAAG,UAOhD,CAAC;AAEF,eAAO,MAAM,WAAW,UAAW,UAAU,KAAG,MAQ/C,CAAC;AAEF,eAAO,MAAM,eAAe,WAAY,qBAAqB,KAAG,OAAO,GAAG,SAUzE,CAAC;AAEF,eAAO,MAAM,gBAAgB,aAAc,0BAA0B,CAAC,OAAO,CAAC,KAAG,MA6BhF,CAAC;AAEF;;+EAE+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;sEAEsE;AACtE,eAAO,MAAM,kBAAkB,aACnB,0BAA0B,CAAC,OAAO,CAAC,KAC5C,gBAAgB,EAkClB,CAAC;AAEF,eAAO,MAAM,aAAa,UAAW,GAAG,EAAE,wBAAyB,GAAG,KAAG,GAAG,EAE3E,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,CAAC,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,CAIrF,CAAC;AAKF,eAAO,MAAM,WAAW,OAAQ,MAAM,KAAG,MAQxC,CAAC;AAEF,eAAO,MAAM,UAAU,OAAQ,MAAM,KAAG,MAavC,CAAC"}
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getAddress = exports.getProtocol = exports.isImage = exports.formatBytes = exports.splitByteSize = exports.insertAtIndex = exports.richtextToSegments = exports.richtextToString = exports.getDefaultValue = exports.typedToYaml = exports.yamlToTyped = void 0;
15
+ exports.getAddress = exports.getProtocol = exports.splitByteSize = exports.insertAtIndex = exports.richtextToSegments = exports.richtextToString = exports.getDefaultValue = exports.typedToYaml = exports.yamlToTyped = void 0;
16
16
  var js_yaml_1 = __importDefault(require("js-yaml"));
17
17
  var inferTypedValue = function (raw) {
18
18
  if (raw === null || raw === undefined)
@@ -176,25 +176,6 @@ var splitByteSize = function (value) {
176
176
  return [(amount === null || amount === void 0 ? void 0 : amount[0]) ? Number(amount[0]) : undefined, unit === null || unit === void 0 ? void 0 : unit[0]];
177
177
  };
178
178
  exports.splitByteSize = splitByteSize;
179
- /** Human-readable file size, e.g. `"12.3 KB"` — whole bytes below 1 KiB, one
180
- * decimal above. Shared by the ticket thread / references attachment rows. */
181
- var formatBytes = function (bytes) {
182
- if (bytes < 1024) {
183
- return "".concat(bytes, " B");
184
- }
185
- var units = ['KB', 'MB', 'GB'];
186
- var value = bytes / 1024;
187
- var unit = 0;
188
- while (value >= 1024 && unit < units.length - 1) {
189
- value /= 1024;
190
- unit += 1;
191
- }
192
- return "".concat(value.toFixed(1), " ").concat(units[unit]);
193
- };
194
- exports.formatBytes = formatBytes;
195
- /** True when a MIME content type is an image (`image/*`). */
196
- var isImage = function (contentType) { return contentType.startsWith('image/'); };
197
- exports.isImage = isImage;
198
179
  // URL value splitting (IDE `urlField.tsx` behavior). Lives here rather than
199
180
  // in the Url component so `validations.ts` can use it without pulling the
200
181
  // component chain into non-DOM consumers (jest).
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/helpers/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/helpers/common.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,6 @@ export * from './components/form';
2
2
  export * from './components/log/Log';
3
3
  export { validateField, validateFieldWithResult, isValueSet, getTypeFromValue, maybeParseYaml, hasAllDependenciesFullfilled, validateOptionWithRequiredGroups, } from './helpers/validations';
4
4
  export type { IValidationResult } from './helpers/validations';
5
- export { thinScrollbar } from './helpers/scrollbar';
6
- export * from './components/imageLightbox';
7
5
  export { ReqraftMenu } from './components/menu/Menu';
8
6
  export type { IReqraftMenuItem, IReqraftMenuProps, TReqraftMenu, TReqraftMenuItem, } from './components/menu/Menu';
9
7
  export { useFetch } from './hooks/useFetch/useFetch';
@@ -19,10 +17,7 @@ export * from './utils/websocket';
19
17
  export { ReqraftLspClient } from './utils/lspClient';
20
18
  export type { IReqraftLspClientOptions } from './utils/lspClient';
21
19
  export type { ILspCompletionItem, ILspDiagnostic, ILspMarkupContent, ILspParameterInformation, ILspPosition, ILspRange, ILspSemanticToken, ILspSemanticTokensLegend, ILspServerCapabilities, ILspSignatureHelp, ILspSignatureInformation, ILspTextEdit, TLspDocumentText, } from './utils/lspClient.types';
22
- export * from './components/composer';
23
20
  export * from './components/smartEditor';
24
21
  export * from './components/dpqlEditor';
25
22
  export * from './components/qonsoleSmartInput';
26
- export * from './components/supportTicket';
27
- export * from './components/ticketThread';
28
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,YAAY,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,YAAY,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ReqraftLspClient = exports.query = exports.ReqraftCurrentUserStore = exports.ReqraftQueryClient = exports.ReqraftProvider = exports.initializeReqraft = exports.useReqraftStorage = exports.useFetch = exports.ReqraftMenu = exports.thinScrollbar = exports.validateOptionWithRequiredGroups = exports.hasAllDependenciesFullfilled = exports.maybeParseYaml = exports.getTypeFromValue = exports.isValueSet = exports.validateFieldWithResult = exports.validateField = void 0;
17
+ exports.ReqraftLspClient = exports.query = exports.ReqraftCurrentUserStore = exports.ReqraftQueryClient = exports.ReqraftProvider = exports.initializeReqraft = exports.useReqraftStorage = exports.useFetch = exports.ReqraftMenu = exports.validateOptionWithRequiredGroups = exports.hasAllDependenciesFullfilled = exports.maybeParseYaml = exports.getTypeFromValue = exports.isValueSet = exports.validateFieldWithResult = exports.validateField = void 0;
18
18
  __exportStar(require("./components/form"), exports);
19
19
  __exportStar(require("./components/log/Log"), exports);
20
20
  var validations_1 = require("./helpers/validations");
@@ -25,9 +25,6 @@ Object.defineProperty(exports, "getTypeFromValue", { enumerable: true, get: func
25
25
  Object.defineProperty(exports, "maybeParseYaml", { enumerable: true, get: function () { return validations_1.maybeParseYaml; } });
26
26
  Object.defineProperty(exports, "hasAllDependenciesFullfilled", { enumerable: true, get: function () { return validations_1.hasAllDependenciesFullfilled; } });
27
27
  Object.defineProperty(exports, "validateOptionWithRequiredGroups", { enumerable: true, get: function () { return validations_1.validateOptionWithRequiredGroups; } });
28
- var scrollbar_1 = require("./helpers/scrollbar");
29
- Object.defineProperty(exports, "thinScrollbar", { enumerable: true, get: function () { return scrollbar_1.thinScrollbar; } });
30
- __exportStar(require("./components/imageLightbox"), exports);
31
28
  var Menu_1 = require("./components/menu/Menu");
32
29
  Object.defineProperty(exports, "ReqraftMenu", { enumerable: true, get: function () { return Menu_1.ReqraftMenu; } });
33
30
  var useFetch_1 = require("./hooks/useFetch/useFetch");
@@ -46,10 +43,7 @@ Object.defineProperty(exports, "query", { enumerable: true, get: function () { r
46
43
  __exportStar(require("./utils/websocket"), exports);
47
44
  var lspClient_1 = require("./utils/lspClient");
48
45
  Object.defineProperty(exports, "ReqraftLspClient", { enumerable: true, get: function () { return lspClient_1.ReqraftLspClient; } });
49
- __exportStar(require("./components/composer"), exports);
50
46
  __exportStar(require("./components/smartEditor"), exports);
51
47
  __exportStar(require("./components/dpqlEditor"), exports);
52
48
  __exportStar(require("./components/qonsoleSmartInput"), exports);
53
- __exportStar(require("./components/supportTicket"), exports);
54
- __exportStar(require("./components/ticketThread"), exports);
55
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,uDAAqC;AACrC,qDAQ+B;AAP7B,4GAAA,aAAa,OAAA;AACb,sHAAA,uBAAuB,OAAA;AACvB,yGAAA,UAAU,OAAA;AACV,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,2HAAA,4BAA4B,OAAA;AAC5B,+HAAA,gCAAgC,OAAA;AAGlC,iDAAoD;AAA3C,0GAAA,aAAa,OAAA;AACtB,6DAA2C;AAC3C,+CAAqD;AAA5C,mGAAA,WAAW,OAAA;AAQpB,sDAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAEjB,4DAAkE;AAAzD,+GAAA,iBAAiB,OAAA;AAE1B,oEAAkD;AAClD,+DAIqC;AAHnC,oHAAA,iBAAiB,OAAA;AACjB,kHAAA,eAAe,OAAA;AACf,qHAAA,kBAAkB,OAAA;AAEpB,gEAA+F;AAAtF,sHAAA,gBAAgB,OAA2B;AAKpD,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,oDAAkC;AAClC,+CAAqD;AAA5C,6GAAA,gBAAgB,OAAA;AAiBzB,wDAAsC;AACtC,2DAAyC;AACzC,0DAAwC;AACxC,iEAA+C;AAC/C,6DAA2C;AAC3C,4DAA0C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAkC;AAClC,uDAAqC;AACrC,qDAQ+B;AAP7B,4GAAA,aAAa,OAAA;AACb,sHAAA,uBAAuB,OAAA;AACvB,yGAAA,UAAU,OAAA;AACV,+GAAA,gBAAgB,OAAA;AAChB,6GAAA,cAAc,OAAA;AACd,2HAAA,4BAA4B,OAAA;AAC5B,+HAAA,gCAAgC,OAAA;AAGlC,+CAAqD;AAA5C,mGAAA,WAAW,OAAA;AAQpB,sDAAqD;AAA5C,oGAAA,QAAQ,OAAA;AAEjB,4DAAkE;AAAzD,+GAAA,iBAAiB,OAAA;AAE1B,oEAAkD;AAClD,+DAIqC;AAHnC,oHAAA,iBAAiB,OAAA;AACjB,kHAAA,eAAe,OAAA;AACf,qHAAA,kBAAkB,OAAA;AAEpB,gEAA+F;AAAtF,sHAAA,gBAAgB,OAA2B;AAKpD,uCAAsC;AAA7B,8FAAA,KAAK,OAAA;AACd,oDAAkC;AAClC,+CAAqD;AAA5C,6GAAA,gBAAgB,OAAA;AAiBzB,2DAAyC;AACzC,0DAAwC;AACxC,iEAA+C"}
@@ -1,5 +1,18 @@
1
1
  import { ReactNode } from 'react';
2
+ import { TReqraftStorage } from '../contexts/StorageContext';
2
3
  import { IReqraftProviderProps } from './ReqraftProvider';
4
+ /**
5
+ * Apply a single path write onto the current storage blob, seeding a fresh object
6
+ * when the user has no storage yet.
7
+ *
8
+ * `?? {}` is load-bearing: a user who has never written storage has
9
+ * `storage === undefined | null`, and `set(cloneDeep(undefined), …)` returns
10
+ * `undefined` (lodash won't set on a nullish target). Without the seed the FIRST
11
+ * write for such a user — e.g. accepting the cookie-consent banner — persists an
12
+ * empty body and silently drops the value, so the flag stays unset forever and
13
+ * the banner never closes. Exported for testing.
14
+ */
15
+ export declare const applyStorageWrite: (storage: TReqraftStorage | undefined, path: string, value: unknown) => TReqraftStorage;
3
16
  export interface IReqraftStorageProviderProps extends Pick<IReqraftProviderProps, 'waitForStorage'> {
4
17
  children: ReactNode;
5
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StorageProvider.d.ts","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AAQxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACrD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB,iCAAkC,4BAA4B,4CAyE7F,CAAC"}
1
+ {"version":3,"file":"StorageProvider.d.ts","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AAGxD,OAAO,EAAyB,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAKpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,YACnB,eAAe,GAAG,SAAS,QAC9B,MAAM,SACL,OAAO,KACb,eAA6D,CAAC;AAEjE,MAAM,WAAW,4BACf,SAAQ,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;IACrD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,eAAO,MAAM,mBAAmB,iCAAkC,4BAA4B,4CAkF7F,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReqraftUserProvider = void 0;
3
+ exports.ReqraftUserProvider = exports.applyStorageWrite = void 0;
4
4
  var jsx_runtime_1 = require("react/jsx-runtime");
5
5
  var lodash_1 = require("lodash");
6
6
  var react_1 = require("react");
@@ -9,6 +9,19 @@ var StorageContext_1 = require("../contexts/StorageContext");
9
9
  var useFetch_1 = require("../hooks/useFetch/useFetch");
10
10
  var useReqraftProperty_1 = require("../hooks/useReqraftProperty");
11
11
  var currentUser_1 = require("../stores/currentUser/currentUser");
12
+ /**
13
+ * Apply a single path write onto the current storage blob, seeding a fresh object
14
+ * when the user has no storage yet.
15
+ *
16
+ * `?? {}` is load-bearing: a user who has never written storage has
17
+ * `storage === undefined | null`, and `set(cloneDeep(undefined), …)` returns
18
+ * `undefined` (lodash won't set on a nullish target). Without the seed the FIRST
19
+ * write for such a user — e.g. accepting the cookie-consent banner — persists an
20
+ * empty body and silently drops the value, so the flag stays unset forever and
21
+ * the banner never closes. Exported for testing.
22
+ */
23
+ var applyStorageWrite = function (storage, path, value) { var _a; return (0, lodash_1.set)((_a = (0, lodash_1.cloneDeep)(storage)) !== null && _a !== void 0 ? _a : {}, path, value); };
24
+ exports.applyStorageWrite = applyStorageWrite;
12
25
  var ReqraftUserProvider = function (_a) {
13
26
  var children = _a.children, waitForStorage = _a.waitForStorage;
14
27
  var appName = (0, useReqraftProperty_1.useReqraftProperty)('appName');
@@ -28,19 +41,30 @@ var ReqraftUserProvider = function (_a) {
28
41
  return (_a = (0, lodash_1.get)(currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage, _path)) !== null && _a !== void 0 ? _a : defaultValue;
29
42
  }, [appName, currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage]);
30
43
  var updateStorage = (0, react_1.useCallback)(function (path, value, includeAppPrefix) {
44
+ var _a;
31
45
  if (includeAppPrefix === void 0) { includeAppPrefix = true; }
32
46
  var _path = includeAppPrefix ? "".concat(appName, ".").concat(path) : path;
33
- var updatedStorage = (0, lodash_1.set)((0, lodash_1.cloneDeep)(currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage), _path, value);
47
+ // Base the write on the LATEST storage read straight from the store, not
48
+ // the blob captured in this callback's closure. A caller holding a stale
49
+ // updater — e.g. an imperative store subscription created on mount, before
50
+ // other keys had loaded — would otherwise persist an out-of-date blob and
51
+ // wipe every key written to storage since its closure was captured.
52
+ var latestStorage = (_a = currentUser_1.currentUserStore.getState().currentUser) === null || _a === void 0 ? void 0 : _a.storage;
53
+ var updatedStorage = (0, exports.applyStorageWrite)(latestStorage, _path, value);
34
54
  updateCurrentUserStorage(updatedStorage);
35
55
  load({ body: { storage: updatedStorage } });
36
- }, [appName, currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage, load, updateCurrentUserStorage]);
56
+ }, [appName, load, updateCurrentUserStorage]);
37
57
  var removeStorageValue = (0, react_1.useCallback)(function (path, includeAppPrefix) {
58
+ var _a;
38
59
  if (includeAppPrefix === void 0) { includeAppPrefix = true; }
39
60
  var _path = includeAppPrefix ? "".concat(appName, ".").concat(path) : path;
40
- var updatedStorage = (0, lodash_1.set)((0, lodash_1.cloneDeep)(currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage), _path, null);
61
+ // Same as `updateStorage`: mutate the LATEST blob (never a stale closure
62
+ // copy), seeding a fresh object when there's no storage yet.
63
+ var latestStorage = (_a = currentUser_1.currentUserStore.getState().currentUser) === null || _a === void 0 ? void 0 : _a.storage;
64
+ var updatedStorage = (0, exports.applyStorageWrite)(latestStorage, _path, null);
41
65
  updateCurrentUserStorage(updatedStorage);
42
66
  load({ body: { storage_path: _path } });
43
- }, [appName, currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage, load, updateCurrentUserStorage]);
67
+ }, [appName, load, updateCurrentUserStorage]);
44
68
  var contextValue = (0, react_1.useMemo)(function () { return ({ storage: currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage, getStorage: getStorage, updateStorage: updateStorage, removeStorageValue: removeStorageValue }); }, [currentUser === null || currentUser === void 0 ? void 0 : currentUser.storage, getStorage, updateStorage, removeStorageValue]);
45
69
  if (loading && waitForStorage) {
46
70
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageProvider.js","sourceRoot":"","sources":["../../src/providers/StorageProvider.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qoretechnologies/reqraft",
3
- "version": "0.10.13-pr.74.gccefa54",
3
+ "version": "0.10.13",
4
4
  "description": "ReQraft is a collection of React components and hooks that are used across Qore Technologies' products made using the ReQore component library from Qore.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -55,8 +55,8 @@
55
55
  "devDependencies": {
56
56
  "@chromatic-com/storybook": "^5.2.1",
57
57
  "@netsells/storybook-mockdate": "^0.3.3",
58
- "@qoretechnologies/qlip": "^0.1.3-beta.20260724071501",
59
- "@qoretechnologies/reqore": "^0.70.11",
58
+ "@qoretechnologies/qlip": "^0.1.3-beta.20260622084321",
59
+ "@qoretechnologies/reqore": "^0.70.6",
60
60
  "@storybook/addon-docs": "^10.4.6",
61
61
  "@storybook/addon-links": "^10.4.6",
62
62
  "@storybook/addon-vitest": "^10.4.6",
@@ -174,25 +174,6 @@ export const splitByteSize = (value?: string): [number | undefined, string | und
174
174
  return [amount?.[0] ? Number(amount[0]) : undefined, unit?.[0]];
175
175
  };
176
176
 
177
- /** Human-readable file size, e.g. `"12.3 KB"` — whole bytes below 1 KiB, one
178
- * decimal above. Shared by the ticket thread / references attachment rows. */
179
- export const formatBytes = (bytes: number): string => {
180
- if (bytes < 1024) {
181
- return `${bytes} B`;
182
- }
183
- const units = ['KB', 'MB', 'GB'];
184
- let value = bytes / 1024;
185
- let unit = 0;
186
- while (value >= 1024 && unit < units.length - 1) {
187
- value /= 1024;
188
- unit += 1;
189
- }
190
- return `${value.toFixed(1)} ${units[unit]}`;
191
- };
192
-
193
- /** True when a MIME content type is an image (`image/*`). */
194
- export const isImage = (contentType: string): boolean => contentType.startsWith('image/');
195
-
196
177
  // URL value splitting (IDE `urlField.tsx` behavior). Lives here rather than
197
178
  // in the Url component so `validations.ts` can use it without pulling the
198
179
  // component chain into non-DOM consumers (jest).
@@ -1,5 +1,6 @@
1
1
  import { ReqoreButton, ReqoreControlGroup, ReqoreP } from '@qoretechnologies/reqore';
2
2
  import { StoryObj } from '@storybook/react-vite';
3
+ import { useRef } from 'react';
3
4
  import { fireEvent, within } from 'storybook/test';
4
5
  import { storiesStorageMock } from '../../../__tests__/ mock';
5
6
  import { testsWaitForText } from '../../../__tests__/utils';
@@ -93,6 +94,57 @@ export const ValueCanBeUpdated: Story = {
93
94
  },
94
95
  };
95
96
 
97
+ /**
98
+ * Regression for the "stale updater clobbers other keys" bug: the storage
99
+ * updater must persist onto the LATEST storage blob, not the one captured in
100
+ * its closure. Long-lived callers (an imperative store subscription, a ref to
101
+ * the mount-time setter) hold an old updater; writing through it must not wipe
102
+ * keys other hooks wrote in the meantime.
103
+ */
104
+ export const StaleUpdaterDoesNotClobberOtherKeys: Story = {
105
+ args: { reqraftOptions: { waitForStorage: true } },
106
+ parameters: {
107
+ docs: {
108
+ description: {
109
+ story:
110
+ "Renders two useReqraftStorage keys and captures the mount-time setter for the first one (a deliberately STALE updater). After a second key is written, writing through the stale updater must keep the second key intact — proving storage writes merge onto the latest blob rather than a closure copy. This is the regression test for page-visit tracking wiping other stored settings.",
111
+ },
112
+ },
113
+ mockData: [...storiesStorageMock],
114
+ },
115
+ render: () => {
116
+ const [someVal, setSomeVal] = useReqraftStorage<string>('some-path', 'default');
117
+ const [keyB] = useReqraftStorage<string>('key-b', 'b-default');
118
+ const [, setKeyB] = useReqraftStorage<string>('key-b', 'b-default');
119
+ // Capture the mount-time setter — it stays stale once other keys change.
120
+ const staleSetSomeVal = useRef(setSomeVal);
121
+
122
+ return (
123
+ <ReqoreControlGroup vertical>
124
+ <ReqoreP>{`some-path: ${someVal}`}</ReqoreP>
125
+ <ReqoreP>{`key-b: ${keyB}`}</ReqoreP>
126
+ <ReqoreButton onClick={() => setKeyB('b-written')}>Write B</ReqoreButton>
127
+ <ReqoreButton onClick={() => staleSetSomeVal.current('a-written')}>
128
+ Write A (stale)
129
+ </ReqoreButton>
130
+ </ReqoreControlGroup>
131
+ );
132
+ },
133
+ play: async ({ canvasElement }) => {
134
+ const canvas = within(canvasElement);
135
+
136
+ await testsWaitForText('some-path: This is a storage value');
137
+ // Write a second key through its own (fresh) updater.
138
+ await fireEvent.click(canvas.getByText('Write B'));
139
+ await testsWaitForText('key-b: b-written');
140
+ // Write the first key through the STALE mount-time updater.
141
+ await fireEvent.click(canvas.getByText('Write A (stale)'));
142
+ await testsWaitForText('some-path: a-written');
143
+ // The stale write must NOT have wiped the second key.
144
+ await testsWaitForText('key-b: b-written');
145
+ },
146
+ };
147
+
96
148
  export const ValueCanBeRemoved: Story = {
97
149
  ...StorageValue,
98
150
  parameters: {
package/src/index.tsx CHANGED
@@ -10,8 +10,6 @@ export {
10
10
  validateOptionWithRequiredGroups,
11
11
  } from './helpers/validations';
12
12
  export type { IValidationResult } from './helpers/validations';
13
- export { thinScrollbar } from './helpers/scrollbar';
14
- export * from './components/imageLightbox';
15
13
  export { ReqraftMenu } from './components/menu/Menu';
16
14
  export type {
17
15
  IReqraftMenuItem,
@@ -54,9 +52,6 @@ export type {
54
52
  ILspTextEdit,
55
53
  TLspDocumentText,
56
54
  } from './utils/lspClient.types';
57
- export * from './components/composer';
58
55
  export * from './components/smartEditor';
59
56
  export * from './components/dpqlEditor';
60
57
  export * from './components/qonsoleSmartInput';
61
- export * from './components/supportTicket';
62
- export * from './components/ticketThread';
@@ -9,6 +9,23 @@ import { TReqraftStorageValue } from '../hooks/useStorage/useStorage';
9
9
  import { currentUserStore } from '../stores/currentUser/currentUser';
10
10
  import { IReqraftProviderProps } from './ReqraftProvider';
11
11
 
12
+ /**
13
+ * Apply a single path write onto the current storage blob, seeding a fresh object
14
+ * when the user has no storage yet.
15
+ *
16
+ * `?? {}` is load-bearing: a user who has never written storage has
17
+ * `storage === undefined | null`, and `set(cloneDeep(undefined), …)` returns
18
+ * `undefined` (lodash won't set on a nullish target). Without the seed the FIRST
19
+ * write for such a user — e.g. accepting the cookie-consent banner — persists an
20
+ * empty body and silently drops the value, so the flag stays unset forever and
21
+ * the banner never closes. Exported for testing.
22
+ */
23
+ export const applyStorageWrite = (
24
+ storage: TReqraftStorage | undefined,
25
+ path: string,
26
+ value: unknown
27
+ ): TReqraftStorage => set(cloneDeep(storage) ?? {}, path, value);
28
+
12
29
  export interface IReqraftStorageProviderProps
13
30
  extends Pick<IReqraftProviderProps, 'waitForStorage'> {
14
31
  children: ReactNode;
@@ -53,26 +70,35 @@ export const ReqraftUserProvider = ({ children, waitForStorage }: IReqraftStorag
53
70
  includeAppPrefix: boolean = true
54
71
  ) {
55
72
  const _path = includeAppPrefix ? `${appName}.${path}` : path;
56
- const updatedStorage = set(cloneDeep(currentUser?.storage), _path, value);
73
+ // Base the write on the LATEST storage read straight from the store, not
74
+ // the blob captured in this callback's closure. A caller holding a stale
75
+ // updater — e.g. an imperative store subscription created on mount, before
76
+ // other keys had loaded — would otherwise persist an out-of-date blob and
77
+ // wipe every key written to storage since its closure was captured.
78
+ const latestStorage = currentUserStore.getState().currentUser?.storage;
79
+ const updatedStorage = applyStorageWrite(latestStorage, _path, value);
57
80
 
58
81
  updateCurrentUserStorage(updatedStorage);
59
82
 
60
83
  load({ body: { storage: updatedStorage } });
61
84
  },
62
- [appName, currentUser?.storage, load, updateCurrentUserStorage]
85
+ [appName, load, updateCurrentUserStorage]
63
86
  );
64
87
 
65
88
  const removeStorageValue = useCallback(
66
89
  function (path: string, includeAppPrefix: boolean = true) {
67
90
  const _path = includeAppPrefix ? `${appName}.${path}` : path;
68
91
 
69
- const updatedStorage = set(cloneDeep(currentUser?.storage), _path, null);
92
+ // Same as `updateStorage`: mutate the LATEST blob (never a stale closure
93
+ // copy), seeding a fresh object when there's no storage yet.
94
+ const latestStorage = currentUserStore.getState().currentUser?.storage;
95
+ const updatedStorage = applyStorageWrite(latestStorage, _path, null);
70
96
 
71
97
  updateCurrentUserStorage(updatedStorage);
72
98
 
73
99
  load({ body: { storage_path: _path } });
74
100
  },
75
- [appName, currentUser?.storage, load, updateCurrentUserStorage]
101
+ [appName, load, updateCurrentUserStorage]
76
102
  );
77
103
 
78
104
  const contextValue = useMemo(