@zoho_apptics/apptics-js-sdk 2.0.0-beta → 2.0.0-beta.1

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 (220) hide show
  1. package/CHANGELOG.md +111 -5
  2. package/README.md +399 -300
  3. package/dist/apptics.esm.min.js +2 -2
  4. package/dist/apptics.esm.min.js.map +1 -1
  5. package/dist/apptics.min.js +2 -2
  6. package/dist/apptics.min.js.map +1 -1
  7. package/dist/chunks/lifecycle-VYr43KcB.min.js +3 -0
  8. package/dist/chunks/lifecycle-VYr43KcB.min.js.map +1 -0
  9. package/dist/cjs/auto-init.d.ts +3 -3
  10. package/dist/cjs/auto-init.js +1 -1
  11. package/dist/cjs/core/attempts.js +1 -1
  12. package/dist/cjs/core/batch.js +2 -1
  13. package/dist/cjs/core/callsite.d.ts +6 -0
  14. package/dist/cjs/core/callsite.js +25 -3
  15. package/dist/cjs/core/consent.d.ts +5 -1
  16. package/dist/cjs/core/consent.js +8 -6
  17. package/dist/cjs/core/constants.d.ts +35 -10
  18. package/dist/cjs/core/constants.js +31 -15
  19. package/dist/cjs/core/db.d.ts +12 -4
  20. package/dist/cjs/core/db.js +167 -34
  21. package/dist/cjs/core/debug.js +1 -1
  22. package/dist/cjs/core/env.js +1 -1
  23. package/dist/cjs/core/framework-id.d.ts +1 -1
  24. package/dist/cjs/core/framework-id.js +3 -3
  25. package/dist/cjs/core/guard.d.ts +9 -0
  26. package/dist/cjs/core/guard.js +27 -13
  27. package/dist/cjs/core/hooks.d.ts +2 -4
  28. package/dist/cjs/core/hooks.js +2 -3
  29. package/dist/cjs/core/locks.d.ts +9 -0
  30. package/dist/cjs/core/locks.js +22 -0
  31. package/dist/cjs/core/logger.d.ts +3 -4
  32. package/dist/cjs/core/logger.js +4 -40
  33. package/dist/cjs/core/state.d.ts +3 -2
  34. package/dist/cjs/core/state.js +2 -2
  35. package/dist/cjs/core/storage.d.ts +20 -5
  36. package/dist/cjs/core/storage.js +115 -17
  37. package/dist/cjs/core/stylesheet.d.ts +8 -0
  38. package/dist/cjs/core/stylesheet.js +29 -0
  39. package/dist/cjs/core/transport.d.ts +2 -0
  40. package/dist/cjs/core/transport.js +19 -4
  41. package/dist/cjs/core/utils.js +1 -1
  42. package/dist/cjs/core/validate.js +2 -2
  43. package/dist/cjs/device/appversion.d.ts +1 -6
  44. package/dist/cjs/device/appversion.js +13 -1
  45. package/dist/cjs/device/index.d.ts +11 -0
  46. package/dist/cjs/device/index.js +120 -20
  47. package/dist/cjs/engagement/api-rules.d.ts +32 -67
  48. package/dist/cjs/engagement/api-rules.js +144 -157
  49. package/dist/cjs/engagement/auto-api.js +2 -2
  50. package/dist/cjs/engagement/auto-screen.d.ts +2 -0
  51. package/dist/cjs/engagement/auto-screen.js +67 -3
  52. package/dist/cjs/engagement/defined-events.js +1 -1
  53. package/dist/cjs/engagement/send.js +6 -1
  54. package/dist/cjs/engagement/session.d.ts +12 -3
  55. package/dist/cjs/engagement/session.js +161 -25
  56. package/dist/cjs/engagement/track.js +45 -20
  57. package/dist/cjs/errors/send.js +1 -1
  58. package/dist/cjs/errors/track.d.ts +1 -1
  59. package/dist/cjs/errors/track.js +46 -6
  60. package/dist/cjs/feedback/controls.d.ts +6 -0
  61. package/dist/cjs/feedback/controls.js +31 -1
  62. package/dist/cjs/feedback/index.d.ts +8 -7
  63. package/dist/cjs/feedback/index.js +32 -13
  64. package/dist/cjs/feedback/logs.d.ts +10 -5
  65. package/dist/cjs/feedback/logs.js +52 -13
  66. package/dist/cjs/feedback/quartz.d.ts +18 -0
  67. package/dist/cjs/feedback/quartz.js +105 -0
  68. package/dist/cjs/feedback/send.d.ts +3 -0
  69. package/dist/cjs/feedback/send.js +28 -3
  70. package/dist/cjs/feedback/styles.d.ts +10 -0
  71. package/dist/cjs/feedback/styles.js +8 -0
  72. package/dist/cjs/feedback/template.d.ts +1 -1
  73. package/dist/cjs/feedback/template.js +12 -12
  74. package/dist/cjs/feedback/ui.d.ts +14 -6
  75. package/dist/cjs/feedback/ui.js +126 -48
  76. package/dist/cjs/heatmap/send.js +1 -1
  77. package/dist/cjs/heatmap/track.d.ts +1 -1
  78. package/dist/cjs/heatmap/track.js +87 -16
  79. package/dist/cjs/index.d.ts +17 -63
  80. package/dist/cjs/index.js +104 -92
  81. package/dist/cjs/lifecycle.d.ts +8 -1
  82. package/dist/cjs/lifecycle.js +258 -62
  83. package/dist/cjs/remoteconfig/country.d.ts +4 -0
  84. package/dist/cjs/remoteconfig/country.js +73 -0
  85. package/dist/cjs/remoteconfig/custom.d.ts +7 -7
  86. package/dist/cjs/remoteconfig/custom.js +31 -51
  87. package/dist/cjs/remoteconfig/evaluate.d.ts +3 -3
  88. package/dist/cjs/remoteconfig/evaluate.js +56 -43
  89. package/dist/cjs/remoteconfig/fetch.d.ts +3 -3
  90. package/dist/cjs/remoteconfig/fetch.js +9 -23
  91. package/dist/cjs/remoteconfig/index.d.ts +10 -8
  92. package/dist/cjs/remoteconfig/index.js +65 -39
  93. package/dist/cjs/remoteconfig/store.js +1 -1
  94. package/dist/cjs/remoteconfig/tz-countries.d.ts +8 -0
  95. package/dist/cjs/remoteconfig/tz-countries.js +13 -0
  96. package/dist/cjs/remotelog/gate.d.ts +2 -11
  97. package/dist/cjs/remotelog/gate.js +9 -35
  98. package/dist/cjs/remotelog/index.d.ts +4 -21
  99. package/dist/cjs/remotelog/logger.d.ts +11 -17
  100. package/dist/cjs/remotelog/logger.js +30 -58
  101. package/dist/cjs/remotelog/send.js +10 -10
  102. package/dist/cjs/remotelogger/index.d.ts +12 -0
  103. package/dist/cjs/remotelogger/index.js +18 -0
  104. package/dist/cjs/scheduler.js +2 -2
  105. package/dist/cjs/types.d.ts +155 -82
  106. package/dist/cjs/user/index.js +11 -6
  107. package/dist/esm/auto-init.d.ts +3 -3
  108. package/dist/esm/auto-init.js +1 -1
  109. package/dist/esm/core/attempts.js +1 -1
  110. package/dist/esm/core/batch.js +2 -1
  111. package/dist/esm/core/callsite.d.ts +6 -0
  112. package/dist/esm/core/callsite.js +25 -4
  113. package/dist/esm/core/consent.d.ts +5 -1
  114. package/dist/esm/core/consent.js +9 -7
  115. package/dist/esm/core/constants.d.ts +35 -10
  116. package/dist/esm/core/constants.js +30 -15
  117. package/dist/esm/core/db.d.ts +12 -4
  118. package/dist/esm/core/db.js +164 -35
  119. package/dist/esm/core/debug.js +1 -1
  120. package/dist/esm/core/env.js +1 -1
  121. package/dist/esm/core/framework-id.d.ts +1 -1
  122. package/dist/esm/core/framework-id.js +3 -3
  123. package/dist/esm/core/guard.d.ts +9 -0
  124. package/dist/esm/core/guard.js +27 -14
  125. package/dist/esm/core/hooks.d.ts +2 -4
  126. package/dist/esm/core/hooks.js +2 -3
  127. package/dist/esm/core/locks.d.ts +9 -0
  128. package/dist/esm/core/locks.js +20 -0
  129. package/dist/esm/core/logger.d.ts +3 -4
  130. package/dist/esm/core/logger.js +4 -40
  131. package/dist/esm/core/state.d.ts +3 -2
  132. package/dist/esm/core/state.js +2 -2
  133. package/dist/esm/core/storage.d.ts +20 -5
  134. package/dist/esm/core/storage.js +113 -18
  135. package/dist/esm/core/stylesheet.d.ts +8 -0
  136. package/dist/esm/core/stylesheet.js +27 -0
  137. package/dist/esm/core/transport.d.ts +2 -0
  138. package/dist/esm/core/transport.js +19 -5
  139. package/dist/esm/core/utils.js +1 -1
  140. package/dist/esm/core/validate.js +2 -2
  141. package/dist/esm/device/appversion.d.ts +1 -6
  142. package/dist/esm/device/appversion.js +13 -2
  143. package/dist/esm/device/index.d.ts +11 -0
  144. package/dist/esm/device/index.js +123 -24
  145. package/dist/esm/engagement/api-rules.d.ts +32 -67
  146. package/dist/esm/engagement/api-rules.js +143 -155
  147. package/dist/esm/engagement/auto-api.js +3 -3
  148. package/dist/esm/engagement/auto-screen.d.ts +2 -0
  149. package/dist/esm/engagement/auto-screen.js +67 -4
  150. package/dist/esm/engagement/defined-events.js +1 -1
  151. package/dist/esm/engagement/send.js +6 -1
  152. package/dist/esm/engagement/session.d.ts +12 -3
  153. package/dist/esm/engagement/session.js +162 -29
  154. package/dist/esm/engagement/track.js +52 -27
  155. package/dist/esm/errors/send.js +1 -1
  156. package/dist/esm/errors/track.d.ts +1 -1
  157. package/dist/esm/errors/track.js +46 -6
  158. package/dist/esm/feedback/controls.d.ts +6 -0
  159. package/dist/esm/feedback/controls.js +31 -2
  160. package/dist/esm/feedback/index.d.ts +8 -7
  161. package/dist/esm/feedback/index.js +34 -13
  162. package/dist/esm/feedback/logs.d.ts +10 -5
  163. package/dist/esm/feedback/logs.js +54 -15
  164. package/dist/esm/feedback/quartz.d.ts +18 -0
  165. package/dist/esm/feedback/quartz.js +99 -0
  166. package/dist/esm/feedback/send.d.ts +3 -0
  167. package/dist/esm/feedback/send.js +28 -5
  168. package/dist/esm/feedback/styles.d.ts +10 -0
  169. package/dist/esm/feedback/styles.js +4 -0
  170. package/dist/esm/feedback/template.d.ts +1 -1
  171. package/dist/esm/feedback/template.js +12 -12
  172. package/dist/esm/feedback/ui.d.ts +14 -6
  173. package/dist/esm/feedback/ui.js +126 -49
  174. package/dist/esm/heatmap/send.js +1 -1
  175. package/dist/esm/heatmap/track.d.ts +1 -1
  176. package/dist/esm/heatmap/track.js +87 -16
  177. package/dist/esm/index.d.ts +17 -63
  178. package/dist/esm/index.js +108 -80
  179. package/dist/esm/lifecycle.d.ts +8 -1
  180. package/dist/esm/lifecycle.js +266 -71
  181. package/dist/esm/remoteconfig/country.d.ts +4 -0
  182. package/dist/esm/remoteconfig/country.js +70 -0
  183. package/dist/esm/remoteconfig/custom.d.ts +7 -7
  184. package/dist/esm/remoteconfig/custom.js +32 -52
  185. package/dist/esm/remoteconfig/evaluate.d.ts +3 -3
  186. package/dist/esm/remoteconfig/evaluate.js +57 -44
  187. package/dist/esm/remoteconfig/fetch.d.ts +3 -3
  188. package/dist/esm/remoteconfig/fetch.js +9 -23
  189. package/dist/esm/remoteconfig/index.d.ts +10 -8
  190. package/dist/esm/remoteconfig/index.js +66 -40
  191. package/dist/esm/remoteconfig/store.js +1 -1
  192. package/dist/esm/remoteconfig/tz-countries.d.ts +8 -0
  193. package/dist/esm/remoteconfig/tz-countries.js +11 -0
  194. package/dist/esm/remotelog/gate.d.ts +2 -11
  195. package/dist/esm/remotelog/gate.js +10 -32
  196. package/dist/esm/remotelog/index.d.ts +4 -21
  197. package/dist/esm/remotelog/logger.d.ts +11 -17
  198. package/dist/esm/remotelog/logger.js +32 -60
  199. package/dist/esm/remotelog/send.js +12 -12
  200. package/dist/esm/remotelogger/index.d.ts +12 -0
  201. package/dist/esm/remotelogger/index.js +13 -0
  202. package/dist/esm/scheduler.js +2 -2
  203. package/dist/esm/types.d.ts +155 -82
  204. package/dist/esm/user/index.js +12 -6
  205. package/dist/feedback.esm.min.js +2 -2
  206. package/dist/feedback.esm.min.js.map +1 -1
  207. package/package.json +14 -16
  208. package/dist/chunks/batch-BU_mTpm1.min.js +0 -3
  209. package/dist/chunks/batch-BU_mTpm1.min.js.map +0 -1
  210. package/dist/chunks/logs-Bea5zUW_.min.js +0 -3
  211. package/dist/chunks/logs-Bea5zUW_.min.js.map +0 -1
  212. package/dist/cjs/heatmap/index.d.ts +0 -16
  213. package/dist/cjs/heatmap/index.js +0 -22
  214. package/dist/cjs/remotelog/index.js +0 -55
  215. package/dist/esm/heatmap/index.d.ts +0 -16
  216. package/dist/esm/heatmap/index.js +0 -17
  217. package/dist/esm/remotelog/index.js +0 -51
  218. package/dist/heatmap.esm.min.js +0 -3
  219. package/dist/heatmap.esm.min.js.map +0 -1
  220. package/dist/style.css +0 -1
@@ -1,8 +1,9 @@
1
- import { feedbackClose as feedbackCloseImpl } from './ui.js';
2
1
  import type { AppticsFeedbackApi } from '../types.js';
3
- export declare const feedbackOpen: AppticsFeedbackApi["feedbackOpen"];
4
- export declare const feedbackClose: typeof feedbackCloseImpl;
5
- /** Resolves once the feedback is sent; rejects when it wasn't (SDK not started, offline, refused). */
6
- export declare const sendFeedback: AppticsFeedbackApi["sendFeedback"];
7
- declare const feedback: AppticsFeedbackApi;
8
- export default feedback;
2
+ export type { FeedbackOpenOptions, SendFeedbackOptions } from '../types.js';
3
+ /**
4
+ * Android's AppticsFeedback: the form, sending feedback without it, and the context recorded for
5
+ * the next one. Every feedback call, addFeedbackLog and addDiagnosticsInfo included, is here and
6
+ * only here: the main entry has no AppticsFeedback.
7
+ */
8
+ export declare const AppticsFeedback: AppticsFeedbackApi;
9
+ export default AppticsFeedback;
@@ -1,30 +1,51 @@
1
- /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta | (c) Zoho Corporation Private Limited | see LICENSE */
2
- import { guard } from '../core/guard.js';
1
+ /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta.1 | (c) Zoho Corporation Private Limited | see LICENSE */
2
+ import { forward, guard } from '../core/guard.js';
3
+ import { AP_FEEDBACK_TYPE } from '../core/constants.js';
3
4
  import { Console } from '../core/logger.js';
4
5
  import { ready } from '../lifecycle.js';
5
- import { sendFeedback as sendFeedback$1, feedbackClose as feedbackClose$1, feedbackOpen as feedbackOpen$1 } from './ui.js';
6
+ import { setFeedbackTheme, sendFeedback, feedbackFormClose, feedbackFormOpen } from './ui.js';
7
+ import { addDiagnosticsInfo, addFeedbackLog } from './logs.js';
6
8
 
7
9
  /**
8
10
  * Optional feedback modal, shipped as its own entry point:
9
- * import { feedbackOpen } from '@zoho_apptics/apptics-js-sdk/feedback';
10
- * import '@zoho_apptics/apptics-js-sdk/style.css';
11
+ * import { AppticsFeedback } from '@zoho_apptics/apptics-js-sdk/feedback';
12
+ * AppticsFeedback.feedbackFormOpen();
11
13
  * Apps that never import it don't pay for the modal or its markup.
12
14
  * The <script> build includes it, so snippet users are unaffected.
13
15
  */
14
- const feedbackOpen = guard('feedbackOpen', feedbackOpen$1); // no i18n
15
- const feedbackClose = guard('feedbackClose', feedbackClose$1); // no i18n
16
+ const feedbackFormOpenGuarded = guard('AppticsFeedback.feedbackFormOpen', feedbackFormOpen); // no i18n
17
+ const feedbackFormCloseGuarded = guard('AppticsFeedback.feedbackFormClose', feedbackFormClose); // no i18n
18
+ const addFeedbackLogGuarded = guard('AppticsFeedback.addFeedbackLog', addFeedbackLog); // no i18n
19
+ const addDiagnosticsInfoGuarded = guard('AppticsFeedback.addDiagnosticsInfo', addDiagnosticsInfo); // no i18n
20
+ const setFeedbackThemeGuarded = guard('AppticsFeedback.setFeedbackTheme', setFeedbackTheme); // no i18n
16
21
  /** Resolves once the feedback is sent; rejects when it wasn't (SDK not started, offline, refused). */
17
- const sendFeedback = guard('sendFeedback', function (...args) {
22
+ const sendFeedbackGuarded = guard('AppticsFeedback.sendFeedback', function (...args) {
18
23
  return ready().then(function (started) {
19
24
  if (!started) {
20
- throw new Error('apptics.sendFeedback: not sent, the SDK has not started; call init() first'); // no i18n
25
+ throw new Error('AppticsFeedback.sendFeedback: not sent, the SDK has not started; call Apptics.init() first'); // no i18n
21
26
  }
22
- return sendFeedback$1(...args);
27
+ return sendFeedback(...args);
23
28
  }).catch(function (err) {
24
- Console.error('apptics.sendFeedback failed:', err); // no i18n
29
+ Console.error('AppticsFeedback.sendFeedback failed:', err); // no i18n
25
30
  throw err;
26
31
  });
27
32
  });
28
- const feedback = { feedbackOpen, feedbackClose, sendFeedback };
33
+ /* each call a function of its own, with the parameter names the console shows (see forward) */
34
+ /**
35
+ * Android's AppticsFeedback: the form, sending feedback without it, and the context recorded for
36
+ * the next one. Every feedback call, addFeedbackLog and addDiagnosticsInfo included, is here and
37
+ * only here: the main entry has no AppticsFeedback.
38
+ */
39
+ const AppticsFeedback = {
40
+ /** The feedback types: BUG, FEEDBACK, HELP, REPORT. */
41
+ AP_FEEDBACK_TYPE: AP_FEEDBACK_TYPE,
42
+ feedbackFormOpen: function feedbackFormOpen(options) { return forward(feedbackFormOpenGuarded, arguments); },
43
+ feedbackFormClose: function feedbackFormClose() { return forward(feedbackFormCloseGuarded, arguments); },
44
+ sendFeedback: function sendFeedback(options) { return forward(sendFeedbackGuarded, arguments); },
45
+ addFeedbackLog: function addFeedbackLog(message) { return forward(addFeedbackLogGuarded, arguments); },
46
+ addDiagnosticsInfo: function addDiagnosticsInfo(heading, key, value) { return forward(addDiagnosticsInfoGuarded, arguments); },
47
+ /** The form's theme from now on, and of a form open now: 'light', 'dark' or 'auto'. */
48
+ setFeedbackTheme: function setFeedbackTheme(theme) { return forward(setFeedbackThemeGuarded, arguments); },
49
+ };
29
50
 
30
- export { feedback as default, feedbackClose, feedbackOpen, sendFeedback };
51
+ export { AppticsFeedback, AppticsFeedback as default };
@@ -15,17 +15,22 @@ export declare function trimStoredLogs(): Promise<void>;
15
15
  */
16
16
  export declare function addFeedbackLog(message: string): void;
17
17
  /**
18
- * Records a diagnostics key/value under a heading, sent inside dyninfo.txt.
19
- * Entries sharing a heading are grouped together in the file.
18
+ * Records a diagnostics entry, `value` under `key` in the `heading` block of dyninfo.txt. All three
19
+ * are required: an entry without a value says nothing, so it is refused and the console says why.
20
+ * A value of 0 or false is a value.
20
21
  */
21
- export declare function addDiagnosticsInfo(heading: string, key: string, value?: unknown): void;
22
+ export declare function addDiagnosticsInfo(heading: string, key: string, value: unknown): void;
22
23
  /** Removes every stored entry. */
23
24
  export declare function clearFeedbackLogs(): Promise<void>;
24
25
  /** Removes the entries a submission carried, by the ids the rendered files reported. */
25
- export declare function log_transactions_remove(sentIds: string[]): Promise<void>;
26
+ export declare function feedbacklog_transactions_remove(sentIds: string[]): Promise<void>;
26
27
  /** feedbacklog.txt from the stored log lines, or null when there are none. */
27
28
  export declare function toLogFile(): Promise<RenderedFile | null>;
28
- /** The log lines as the file would carry them, for showing in the modal before sending. */
29
+ /**
30
+ * The log lines for showing in the modal before sending, each time in the visitor's local zone.
31
+ * The file that is sent (toLogFile) keeps the ISO 8601 UTC stamps, so the server and anything
32
+ * that parses it are unaffected.
33
+ */
29
34
  export declare function logText(): Promise<string>;
30
35
  /** The diagnostics entries as dyninfo.txt would carry them, without the device info block. */
31
36
  export declare function diagnosticsText(): Promise<string>;
@@ -1,6 +1,7 @@
1
- /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta | (c) Zoho Corporation Private Limited | see LICENSE */
2
- import { Console } from '../core/logger.js';
3
- import { log_transactions } from '../core/storage.js';
1
+ /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta.1 | (c) Zoho Corporation Private Limited | see LICENSE */
2
+ import { warnAlways, Console } from '../core/logger.js';
3
+ import { FEEDBACK_LOG, FEEDBACK_DIAGNOSTICS } from '../core/db.js';
4
+ import { feedbacklog_transactions } from '../core/storage.js';
4
5
  import { isExpired } from '../core/state.js';
5
6
  import { nowMs } from '../core/utils.js';
6
7
 
@@ -24,18 +25,19 @@ const MAX_LOG_FILE_SIZE = 2 * 1024 * 1024;
24
25
  const TRIM_DELAY_MS = 2000;
25
26
  const LOG_FILE_NAME = 'feedbacklog.txt'; // no i18n
26
27
  const DYNINFO_FILE_NAME = 'dyninfo.txt'; // no i18n
27
- const LOG = 'log'; // no i18n
28
- const DIAGNOSTICS = 'diagnostics'; // no i18n
28
+ // the types the entries are stored under (2.0.0-beta and 1.x said log and diagnostics)
29
+ const LOG = FEEDBACK_LOG;
30
+ const DIAGNOSTICS = FEEDBACK_DIAGNOSTICS;
29
31
  let trimScheduled = false;
30
32
  /** Drops the oldest entries once the store is over MAX_ENTRIES. */
31
33
  function trimStoredLogs() {
32
- return log_transactions.all().then(function (items) {
34
+ return feedbacklog_transactions.all().then(function (items) {
33
35
  const excess = items.length - MAX_ENTRIES;
34
36
  if (excess <= 0) {
35
37
  return undefined;
36
38
  }
37
39
  Console.warn('apptics: dropping ' + excess + ' oldest feedback log entries (cap is ' + MAX_ENTRIES + ')'); // no i18n
38
- return log_transactions.remove(items.slice(0, excess));
40
+ return feedbacklog_transactions.remove(items.slice(0, excess));
39
41
  });
40
42
  }
41
43
  /** One trim per burst of adds, so a chatty app pays for one pass over the store, not one per line. */
@@ -50,7 +52,7 @@ function scheduleTrim() {
50
52
  }, TRIM_DELAY_MS);
51
53
  }
52
54
  function store(item) {
53
- log_transactions.add(item);
55
+ feedbacklog_transactions.add(item);
54
56
  scheduleTrim();
55
57
  }
56
58
  function truncate(text) {
@@ -70,11 +72,30 @@ function addFeedbackLog(message) {
70
72
  * Records a diagnostics key/value under a heading, sent inside dyninfo.txt.
71
73
  * Entries sharing a heading are grouped together in the file.
72
74
  */
75
+ /** Messages already printed, so a call repeated in a loop says so once. */
76
+ const refusedSaid = {};
77
+ function refuse(message) {
78
+ if (!refusedSaid[message]) {
79
+ refusedSaid[message] = true;
80
+ warnAlways('AppticsFeedback.addDiagnosticsInfo: ' + message + ', so the entry is not recorded'); // no i18n
81
+ }
82
+ }
83
+ /**
84
+ * Records a diagnostics entry, `value` under `key` in the `heading` block of dyninfo.txt. All three
85
+ * are required: an entry without a value says nothing, so it is refused and the console says why.
86
+ * A value of 0 or false is a value.
87
+ */
73
88
  function addDiagnosticsInfo(heading, key, value) {
74
89
  if (typeof heading !== 'string' || heading.length === 0) { // no i18n
90
+ refuse('a heading is required');
75
91
  return;
76
92
  }
77
93
  if (typeof key !== 'string' || key.length === 0) { // no i18n
94
+ refuse('a key is required');
95
+ return;
96
+ }
97
+ if (value === undefined || value === null || value === '') { // no i18n
98
+ refuse('a value is required for "' + heading + '" / "' + key + '"');
78
99
  return;
79
100
  }
80
101
  store({
@@ -82,16 +103,16 @@ function addDiagnosticsInfo(heading, key, value) {
82
103
  happenedat: nowMs(),
83
104
  heading: heading,
84
105
  key: key,
85
- value: truncate(String(value === undefined ? '' : value)), // no i18n
106
+ value: truncate(String(value)),
86
107
  });
87
108
  }
88
109
  /** Removes the entries a submission carried, by the ids the rendered files reported. */
89
- function log_transactions_remove(sentIds) {
90
- return log_transactions.remove(sentIds.map(function (id) { return { id: id }; }));
110
+ function feedbacklog_transactions_remove(sentIds) {
111
+ return feedbacklog_transactions.remove(sentIds.map(function (id) { return { id: id }; }));
91
112
  }
92
113
  /** Entries of one type, oldest first, skipping any that have passed batch_request_timeout. */
93
114
  function entriesOfType(type) {
94
- return log_transactions.all().then(function (items) {
115
+ return feedbacklog_transactions.all().then(function (items) {
95
116
  return items.filter(function (item) {
96
117
  return item.type === type && !isExpired(item.happenedat);
97
118
  });
@@ -145,9 +166,27 @@ function toLogFile() {
145
166
  return asFile(LOG_FILE_NAME, renderLogLines(items), items);
146
167
  });
147
168
  }
148
- /** The log lines as the file would carry them, for showing in the modal before sending. */
169
+ /** `16 Oct 2026, 11:53:48 PM IST`: a log line's time in the visitor's own zone, for the viewer. */
170
+ function readableStamp(item) {
171
+ var iso = stamp(item);
172
+ var d = new Date(iso);
173
+ if (isNaN(d.getTime())) {
174
+ return iso;
175
+ }
176
+ return d.toLocaleDateString(undefined, { day: '2-digit', month: 'short', year: 'numeric' }) + ', ' + // no i18n
177
+ d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'short' }); // no i18n
178
+ }
179
+ /**
180
+ * The log lines for showing in the modal before sending, each time in the visitor's local zone.
181
+ * The file that is sent (toLogFile) keeps the ISO 8601 UTC stamps, so the server and anything
182
+ * that parses it are unaffected.
183
+ */
149
184
  function logText() {
150
- return entriesOfType(LOG).then(renderLogLines);
185
+ return entriesOfType(LOG).then(function (items) {
186
+ return items.map(function (item) {
187
+ return '[' + readableStamp(item) + '] ' + item.message; // no i18n
188
+ }).join('\n'); // no i18n
189
+ });
151
190
  }
152
191
  /** The diagnostics entries as dyninfo.txt would carry them, without the device info block. */
153
192
  function diagnosticsText() {
@@ -185,4 +224,4 @@ function hasDiagnostics() {
185
224
  });
186
225
  }
187
226
 
188
- export { DYNINFO_FILE_NAME, LOG_FILE_NAME, MAX_LOG_FILE_SIZE, addDiagnosticsInfo, addFeedbackLog, diagnosticsText, hasDiagnostics, hasLogLines, logText, log_transactions_remove, toDyninfoFile, toLogFile, trimStoredLogs };
227
+ export { DYNINFO_FILE_NAME, LOG_FILE_NAME, MAX_LOG_FILE_SIZE, addDiagnosticsInfo, addFeedbackLog, diagnosticsText, feedbacklog_transactions_remove, hasDiagnostics, hasLogLines, logText, toDyninfoFile, toLogFile, trimStoredLogs };
@@ -0,0 +1,18 @@
1
+ /** quartz_domain as a recording host: zoho.com → https://quartz.zoho.com. '' when it isn't a domain. */
2
+ export declare function recordingDomain(domain: string): string;
3
+ /**
4
+ * The Quartz script for an app whose getsdkconfig answer carries no quartz_cdn_url, chosen by
5
+ * the serviceUrl: a localzoho server's apps load it from Zoho's local CDN, every other app from
6
+ * the public one.
7
+ */
8
+ export declare function defaultQuartzScriptUrl(serviceUrl: string): string;
9
+ /** The script to load: quartz_cdn_url when getsdkconfig gave one, else the CDN the serviceUrl points to. */
10
+ export declare function quartzScriptSource(cdnUrl: string, serviceUrl: string): string;
11
+ /** The url to load, or '' when it isn't an https url on a Zoho host. */
12
+ export declare function quartzScriptUrl(url: string): string;
13
+ /**
14
+ * Makes Quartz available: resolves true once it is on the page, false when it can't be (no url,
15
+ * a url that isn't allowed, or a script that failed to load). Adds the script once; every caller
16
+ * waits on the same load, and a failed one may be tried again on the next open.
17
+ */
18
+ export declare function loadQuartz(url: string): Promise<boolean>;
@@ -0,0 +1,99 @@
1
+ /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta.1 | (c) Zoho Corporation Private Limited | see LICENSE */
2
+ import { warnAlways, Console } from '../core/logger.js';
3
+
4
+ /**
5
+ * Screen recording's script: Zoho Quartz, loaded by the SDK from the url getsdkconfig gives
6
+ * (`quartz.quartz_cdn_url`), so a page no longer adds it itself.
7
+ *
8
+ * It is a script run on the app's page, from a url the server sent. So only https urls on Zoho's
9
+ * own hosts are loaded: an answer that was wrong, or was tampered with on the way, cannot make
10
+ * the page run a script from anywhere else. Anything else is refused and said once.
11
+ */
12
+ /** Zoho's script hosts: its CDNs and its data centres, local ones included. */
13
+ const ZOHO_SCRIPT_HOST = /(^|\.)(zohocdn\.com|zohostatic\.com|localzohocdn\.com|localzoho\.com|zoho\.(com|eu|in|jp|sa|ae|com\.au|com\.cn)|zohocloud\.ca)$/; // no i18n
14
+ /** quartz_domain as a recording host: zoho.com → https://quartz.zoho.com. '' when it isn't a domain. */
15
+ function recordingDomain(domain) {
16
+ var name = (domain || '').trim().replace(/^\.+|\.+$/g, ''); // no i18n
17
+ if (/^https:\/\//i.test(name)) { // no i18n
18
+ return name.replace(/\/+$/, ''); // no i18n
19
+ }
20
+ return /^[a-z0-9-]+(\.[a-z0-9-]+)+$/i.test(name) ? 'https://quartz.' + name : ''; // no i18n
21
+ }
22
+ /** Where Quartz lives on Zoho's CDNs, the same on both: only the host differs. */
23
+ const QUARTZ_SCRIPT_PATH = '/quartz/feedback/v2/quartz.js'; // no i18n
24
+ /**
25
+ * The Quartz script for an app whose getsdkconfig answer carries no quartz_cdn_url, chosen by
26
+ * the serviceUrl: a localzoho server's apps load it from Zoho's local CDN, every other app from
27
+ * the public one.
28
+ */
29
+ function defaultQuartzScriptUrl(serviceUrl) {
30
+ var host = ''; // no i18n
31
+ try {
32
+ host = new URL(serviceUrl).hostname;
33
+ }
34
+ catch (err) {
35
+ host = serviceUrl || ''; // no i18n
36
+ }
37
+ var cdn = host.indexOf('localzoho') !== -1 ? 'static.localzohocdn.com' : 'static.zohocdn.com'; // no i18n
38
+ return 'https://' + cdn + QUARTZ_SCRIPT_PATH; // no i18n
39
+ }
40
+ /** The script to load: quartz_cdn_url when getsdkconfig gave one, else the CDN the serviceUrl points to. */
41
+ function quartzScriptSource(cdnUrl, serviceUrl) {
42
+ return cdnUrl && cdnUrl.trim() !== '' ? cdnUrl.trim() : defaultQuartzScriptUrl(serviceUrl); // no i18n
43
+ }
44
+ /** The url to load, or '' when it isn't an https url on a Zoho host. */
45
+ function quartzScriptUrl(url) {
46
+ try {
47
+ var parsed = new URL(url);
48
+ return parsed.protocol === 'https:' && ZOHO_SCRIPT_HOST.test(parsed.hostname) ? parsed.href : ''; // no i18n
49
+ }
50
+ catch (err) {
51
+ return ''; // no i18n
52
+ }
53
+ }
54
+ function quartzOnPage() {
55
+ return typeof Quartz !== 'undefined' && !!Quartz; // no i18n
56
+ }
57
+ var loading = null;
58
+ var refused = false;
59
+ /**
60
+ * Makes Quartz available: resolves true once it is on the page, false when it can't be (no url,
61
+ * a url that isn't allowed, or a script that failed to load). Adds the script once; every caller
62
+ * waits on the same load, and a failed one may be tried again on the next open.
63
+ */
64
+ function loadQuartz(url) {
65
+ if (quartzOnPage()) {
66
+ return Promise.resolve(true);
67
+ }
68
+ var src = quartzScriptUrl(url);
69
+ if (src === '') {
70
+ if (url && !refused) {
71
+ refused = true;
72
+ warnAlways('AppticsFeedback: screen recording is off; its script url is not an https url on a Zoho host: ' + url); // no i18n
73
+ }
74
+ return Promise.resolve(false);
75
+ }
76
+ if (loading) {
77
+ return loading;
78
+ }
79
+ loading = new Promise(function (resolve) {
80
+ var script = document.createElement('script'); // no i18n
81
+ script.src = src;
82
+ script.async = true;
83
+ script.setAttribute('data-apptics', 'quartz'); // no i18n
84
+ script.onload = function () {
85
+ Console.log('AppticsFeedback: Quartz loaded from ' + src); // no i18n
86
+ resolve(quartzOnPage());
87
+ };
88
+ script.onerror = function () {
89
+ Console.warn('AppticsFeedback: the Quartz script did not load: ' + src); // no i18n
90
+ loading = null;
91
+ script.remove();
92
+ resolve(false);
93
+ };
94
+ (document.head || document.documentElement).appendChild(script);
95
+ });
96
+ return loading;
97
+ }
98
+
99
+ export { defaultQuartzScriptUrl, loadQuartz, quartzScriptSource, quartzScriptUrl, recordingDomain };
@@ -21,5 +21,8 @@ export interface FeedbackResult {
21
21
  * Sends feedback to the Apptics API.
22
22
  * Resolves with the outcome, or null when nothing was sent (disabled client or offline).
23
23
  */
24
+ /** The form's limits on attachments: at most 5, at most 10 MB in all. */
25
+ export declare const MAX_ATTACHMENTS = 5;
26
+ export declare const MAX_ATTACHMENT_BYTES: number;
24
27
  export declare function sendFeedbackData(obj: FeedbackRequest): Promise<FeedbackResult | null>;
25
28
  export declare function requestToSendFeedback(_payload: FormData): Promise<ServerResult>;
@@ -1,10 +1,10 @@
1
- /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta | (c) Zoho Corporation Private Limited | see LICENSE */
1
+ /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta.1 | (c) Zoho Corporation Private Limited | see LICENSE */
2
2
  import { _ZAP } from '../core/state.js';
3
3
  import { Console } from '../core/logger.js';
4
4
  import { isEmpty, nowMs, cloneMapExcludingKeys, sizeof } from '../core/utils.js';
5
5
  import { is_apptics_disabled, getBatteryPercent, getConnectionType, getOrientation, getNetworkStatus } from '../core/env.js';
6
6
  import { getMetaObj, rejectIfDisabled, rejectIfNoDeviceIds, postToApptics, apiHeaders } from '../core/transport.js';
7
- import { hasDiagnostics, toLogFile, toDyninfoFile, log_transactions_remove } from './logs.js';
7
+ import { hasDiagnostics, toLogFile, toDyninfoFile, feedbacklog_transactions_remove } from './logs.js';
8
8
 
9
9
  const SUCCESS_MESSAGE = 'Feedback sent successfully'; // no i18n
10
10
  const FAILURE_MESSAGE = 'Something went wrong. Send feedback again'; // no i18n
@@ -15,11 +15,28 @@ const FAILURE_MESSAGE = 'Something went wrong. Send feedback again'; // no i18n
15
15
  * that the server already has from the request's own params and meta. Repeating them buries the
16
16
  * four lines that actually describe the device - browser, OS, screen, timezone - in bookkeeping.
17
17
  */
18
- const DYNINFO_EXCLUDED_KEYS = ['deviceid', 'anonymousid', 'aaid', 'apid', 'mapid', 'devicetypeid', 'osversionid', 'platformid', 'appversionid', 'appreleaseversionid', 'modelid', 'timezoneid', 'frameworkid', 'projectid', 'portalid', 'donottrackenabled']; // no i18n
18
+ const DYNINFO_EXCLUDED_KEYS = ['deviceid', 'anonymousid', 'aaid', 'apid', 'mapid', 'devicetypeid', 'osversionid', 'platformid', 'appversionid', 'appreleaseversionid', 'modelid', 'timezoneid', 'frameworkid', 'projectid', 'portalid', 'donottrackenabled', 'uuid', 'hadsession']; // no i18n
19
19
  /**
20
20
  * Sends feedback to the Apptics API.
21
21
  * Resolves with the outcome, or null when nothing was sent (disabled client or offline).
22
22
  */
23
+ /** The form's limits on attachments: at most 5, at most 10 MB in all. */
24
+ const MAX_ATTACHMENTS = 5;
25
+ const MAX_ATTACHMENT_BYTES = 10 * 1024 * 1024;
26
+ /** Why these attachments cannot be sent, as the form says it, or '' when they can. */
27
+ function attachmentProblem(files) {
28
+ if (!files || files.length === 0) {
29
+ return ''; // no i18n
30
+ }
31
+ if (files.length > MAX_ATTACHMENTS) {
32
+ return 'Maximum ' + MAX_ATTACHMENTS + ' attachments is allowed'; // no i18n
33
+ }
34
+ var total = 0;
35
+ for (var i = 0; i < files.length; i++) {
36
+ total += Number(files[i].size) || 0;
37
+ }
38
+ return total > MAX_ATTACHMENT_BYTES ? 'Maximum limit reached. The total file size cannot exceed 10MB.' : ''; // no i18n
39
+ }
23
40
  function sendFeedbackData(obj) {
24
41
  if (is_apptics_disabled()) {
25
42
  return Promise.resolve(null);
@@ -30,6 +47,12 @@ function sendFeedbackData(obj) {
30
47
  }
31
48
  var _attachment = !isEmpty(obj.attachment) ? obj.attachment : null;
32
49
  var _attachment_count = _attachment ? _attachment.length : 0;
50
+ // the form's own limits, for sendFeedback() too: past them the files were left out while
51
+ // attachmentcount still said they were there
52
+ var tooMany = attachmentProblem(_attachment);
53
+ if (tooMany !== '') { // no i18n
54
+ return Promise.reject(new Error('sendFeedback: ' + tooMany)); // no i18n
55
+ }
33
56
  var _logsFiles = obj && obj.logsFiles ? obj.logsFiles : null;
34
57
  var _logsFiles_count = _logsFiles && _logsFiles.length ? _logsFiles.length : 0;
35
58
  var time = nowMs();
@@ -152,7 +175,7 @@ function readyToSendFeedback(data, sentIds) {
152
175
  _ZAP._sending = false;
153
176
  // only now, so entries added while this was in flight stay for the next submission
154
177
  if (sentIds.length > 0) {
155
- log_transactions_remove(sentIds);
178
+ feedbacklog_transactions_remove(sentIds);
156
179
  }
157
180
  return { ok: true, message: SUCCESS_MESSAGE };
158
181
  }).catch(function (err) {
@@ -172,4 +195,4 @@ function requestToSendFeedback(_payload) {
172
195
  return postToApptics('feedback', _payload, apiHeaders(), label); // no i18n
173
196
  }
174
197
 
175
- export { requestToSendFeedback, sendFeedbackData };
198
+ export { MAX_ATTACHMENTS, MAX_ATTACHMENT_BYTES, requestToSendFeedback, sendFeedbackData };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The feedback form's stylesheet, which AppticsFeedback.feedbackFormOpen() adds to the page itself,
3
+ * so no app imports or links a stylesheet.
4
+ *
5
+ * Empty here: the build (scripts/feedback-css.mjs) replaces this module with the minified text of
6
+ * src/styles/apptics.css, for the npm and the CDN builds alike. Run from source, as the tests do,
7
+ * there is nothing to add.
8
+ */
9
+ declare const css: string;
10
+ export default css;
@@ -0,0 +1,4 @@
1
+ /*! @zoho_apptics/apptics-js-sdk v2.0.0-beta.1 | (c) Zoho Corporation Private Limited | see LICENSE */
2
+ const css = ".zasdk-modal{color:var(--zasdk-text-color);margin:0;padding:0;font-family:inherit;line-height:normal}.zasdk-modal p{margin:0}.zasdk-modal ul{margin:0;padding:0;list-style:none}.zasdk-modal,.zasdk-timer-container{--zasdk-background-color:#fff;--zasdk-text-color:#333;--zasdk-border-color:#ddd;--zasdk-modal-background:#0006;--zasdk-close-color:#aaa;--zasdk-close-hover-color:#000;--zasdk-input-background:#fff;--zasdk-button-background:#f0f0f0;--zasdk-primary-color:#007bff;--zasdk-primary-text-color:#000;--zasdk-button-text-color:#fff;--zasdk-secondary-background:#ddd;--zasdk-icon-border-color:#ccc;--zasdk-dropdown-hover:#f0f0f0;--zasdk-selected-background:#f0f0f0;--zasdk-selected-border:#ddd;--zasdk-muted-text:#999;--zasdk-link-color:#0078d4;--zasdk-switch-off:#ccc;--zasdk-viewer-background:#f8f8f8;--zasdk-placeholder-color:#757575;--zasdk-shadow:#0000002e}.zasdk-modal[data-zasdk-theme=dark],.zasdk-timer-container[data-zasdk-theme=dark],.zasdk-modal.zasdk-dark-theme,.zasdk-timer-container.zasdk-dark-theme{--zasdk-background-color:#1a1a1a;--zasdk-text-color:#f0f0f0;--zasdk-border-color:#444;--zasdk-modal-background:#ffffff1a;--zasdk-close-color:#888;--zasdk-close-hover-color:#fff;--zasdk-input-background:#2a2a2a;--zasdk-button-background:#333;--zasdk-primary-color:#2f7bd8;--zasdk-primary-text-color:#fff;--zasdk-secondary-background:#333;--zasdk-icon-border-color:#555;--zasdk-dropdown-hover:#2a2a2a;--zasdk-selected-background:#2a2a2a;--zasdk-selected-border:#555;--zasdk-muted-text:#888;--zasdk-link-color:#5aa9ff;--zasdk-switch-off:#555;--zasdk-viewer-background:#222;--zasdk-placeholder-color:#9a9a9a;--zasdk-shadow:#0009}@media (prefers-color-scheme:dark){.zasdk-modal[data-zasdk-theme=auto],.zasdk-timer-container[data-zasdk-theme=auto]{--zasdk-background-color:#1a1a1a;--zasdk-text-color:#f0f0f0;--zasdk-border-color:#444;--zasdk-modal-background:#ffffff1a;--zasdk-close-color:#888;--zasdk-close-hover-color:#fff;--zasdk-input-background:#2a2a2a;--zasdk-button-background:#333;--zasdk-primary-color:#2f7bd8;--zasdk-primary-text-color:#fff;--zasdk-secondary-background:#333;--zasdk-icon-border-color:#555;--zasdk-dropdown-hover:#2a2a2a;--zasdk-selected-background:#2a2a2a;--zasdk-selected-border:#555;--zasdk-muted-text:#888;--zasdk-link-color:#5aa9ff;--zasdk-switch-off:#555;--zasdk-viewer-background:#222;--zasdk-placeholder-color:#9a9a9a;--zasdk-shadow:#0009}}.zasdk-modal-content *{box-sizing:border-box;font-size:14px}.zasdk-modal{z-index:214748364;pointer-events:none;width:100%;height:100%;color:var(--zasdk-primary-text-color);background:0 0;position:fixed;top:0;left:0;overflow:visible}.zasdk-modal-content{background-color:var(--zasdk-background-color);border:1px solid var(--zasdk-border-color);width:500px;max-width:calc(100% - 40px);max-height:calc(100% - 40px);box-shadow:0 8px 24px var(--zasdk-shadow);pointer-events:auto;-webkit-user-select:none;user-select:none;border-radius:8px;flex-direction:column;padding:10px 0 20px;transition:none;display:flex;position:fixed;inset:auto 20px 20px auto}.zasdk-header{cursor:grab;justify-content:space-between;align-items:center;margin-bottom:20px;padding:0 20px;display:flex}.zasdk-title{margin:0;font-size:24px;font-weight:700}.zasdk-close{color:var(--zasdk-close-color);cursor:pointer;font-size:28px;font-weight:700}.zasdk-close svg path{fill:var(--zasdk-primary-text-color)}.zasdk-close:hover,.zasdk-close:focus{color:var(--zasdk-close-hover-color);cursor:pointer;text-decoration:none}.zasdk-feedback-types{text-align:center;justify-content:space-evenly;margin-bottom:20px;font-size:14px;display:flex}.zasdk-feedback-type{cursor:pointer;display:inline-block}.zasdk-iconcnt{background-color:var(--zasdk-background-color);border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;margin-bottom:5px;font-weight:700;display:inline-block}.zasdk-form{max-height:calc(100% - 190px);padding:0 20px;position:relative;overflow-y:auto}.zasdk-form select,.zasdk-form input,.zasdk-form textarea{border:1px solid var(--zasdk-border-color);background-color:var(--zasdk-input-background);width:100%;color:var(--zasdk-text-color);border-radius:4px;margin-bottom:15px;padding:8px;font-family:inherit;font-size:14px}.zasdk-form textarea::placeholder,.zasdk-form input::placeholder{color:var(--zasdk-placeholder-color);opacity:1}.zasdk-form textarea{resize:none;height:100px}.zasdkdesclbl{margin-bottom:5px;font-weight:700;display:block}.zasdkmadfeld{color:#f33558;padding-left:3px}.zaleftcharspan{float:right}.zaleftchartxt{margin-left:3px;font-weight:400}.zasdk_submit_btncnt{justify-content:end;align-items:center;margin-top:20px;padding:0 20px;display:flex}.zasdkstsmsg{text-align:end;margin-right:20px;font-size:14px;display:none}.zasdkstserror{color:#f33155}.zasdkstssucs{color:#009c08}.zasdk-buttons{margin-top:20px}.zasdk-btn{cursor:pointer;text-align:center;border:none;border-radius:4px;padding:7px 20px;font-size:14px}.zasdk-send-btn{background-color:var(--zasdk-primary-color);color:var(--zasdk-button-text-color);min-width:81px;height:34px}.zasdk-attach-btn{background-color:var(--zasdk-button-background);vertical-align:middle;justify-content:center;align-items:center;height:40px;margin-bottom:0;margin-right:10px;padding:10px 15px 10px 5px;font-size:14px;font-weight:400;display:inline-flex}.zasdkfilesizeinf{vertical-align:middle;margin-top:10px;font-size:13px;display:inline-block}.zasdkattachinf{vertical-align:middle;margin-bottom:10px;font-size:13px;display:inline-block}input[type=file].zasdk-file-input{display:none}.zasdkfeedback__icon{border:1px solid var(--zasdk-icon-border-color);vertical-align:middle;text-align:center;box-sizing:border-box;border-radius:100%;width:32px;height:32px;transition:all .5s;display:inline-block}.zasdk-feedback-types svg{width:inherit;height:inherit;vertical-align:middle;display:inline-block}.zasdkfeedback__icon-report .zasdkfeedback__icon{fill:#ff4122}.zasdkfeedback__icon-report svg{width:28px;height:100%}.zasdk-feedback-type{text-align:center;border:1px solid #0000;width:90px;padding:10px 0;transition:all .5s}.zasdk-selected{border:1px solid var(--zasdk-selected-border);background-color:var(--zasdk-selected-background);border-radius:6px}.zasdk-selected .zasdkfeedback__icon-report .zasdkfeedback__icon{fill:#fff;background:#ff4122;border-color:#ff4122}.zasdk-feedback-type:hover .zasdkfeedback__icon-report .zasdkfeedback__icon{border-color:#ff4122}.zasdkfeedback__icon-reqest .zasdkfeedback__icon{fill:#a63cff}.zasdkfeedback__icon-reqest svg{width:24px;height:100%}.zasdk-feedback-type:hover .zasdkfeedback__icon-reqest .zasdkfeedback__icon{border-color:#a63cff}.zasdk-selected .zasdkfeedback__icon-reqest .zasdkfeedback__icon{fill:#fff;background:#a63cff;border-color:#a63cff}.zasdkfeedback__icon-help .zasdkfeedback__icon{fill:#fba400}.zasdkfeedback__icon-help svg{width:28px;height:100%}.zasdk-feedback-type:hover .zasdkfeedback__icon-help .zasdkfeedback__icon{border-color:#fba400}.zasdk-selected .zasdkfeedback__icon-help .zasdkfeedback__icon{fill:#fff;background:#fba400;border-color:#fba400}.zasdkfeedback__icon-appreciate .zasdkfeedback__icon{fill:#ff297a}.zasdkfeedback__icon-appreciate svg{width:25px;height:28px}.zasdk-feedback-type:hover .zasdkfeedback__icon-appreciate .zasdkfeedback__icon{border-color:#ff297a}.zasdk-selected .zasdkfeedback__icon-appreciate .zasdkfeedback__icon{fill:#fff;background:#ff297a;border-color:#ff297a}.zasdk-btncnt{margin-bottom:10px}.zasdk-dropdown{width:100%;margin-bottom:15px;position:relative}.zasdk-dropdown-header{border:1px solid var(--zasdk-border-color);cursor:pointer;background-color:var(--zasdk-input-background);color:var(--zasdk-text-color);border-radius:4px;padding:5px 10px}.zasdk-dropdown-options{background-color:var(--zasdk-background-color);border:1px solid var(--zasdk-border-color);z-index:1;border-radius:5px;display:none;position:absolute;top:35px;left:0;right:0}.zasdk-dropdown-option{cursor:pointer;padding:5px 10px}.zasdk-dropdown-option:hover{background-color:var(--zasdk-dropdown-hover)}.zasdkqz-container{width:100%;color:var(--zasdk-text-color);background:var(--zasdk-secondary-background);box-sizing:border-box;border-radius:8px;padding:15px;font-size:14px}.zasdkqz-checkbox-wrapper{align-items:flex-start;display:flex;position:relative}input[type=checkbox].zasdkqz-checkbox{opacity:0;width:auto;margin:0;position:absolute}.zasdkqz-checkbox+label{cursor:pointer;margin:0;padding-left:30px;font-weight:400;line-height:1.5;display:inline-block;position:relative}.zasdkqz-checkbox+label:before{content:\"\";border:1px solid var(--zasdk-primary-color);border-radius:4px;width:18px;height:18px;position:absolute;top:2px;left:0}.zasdkqz-checkbox:focus+label:before{border:2px solid var(--zasdk-primary-color)}.zasdkqz-content .zasdkqz-prop-content{margin-top:10px;padding-left:30px}.zasdkqz-checkbox:checked+label:before{background:var(--zasdk-primary-color)}.zasdkqz-checkbox:checked+label:after{content:\"\";border:0 solid #fff;border-width:0 0 1px 1px;width:10px;height:5px;transition:transform .3s;position:absolute;top:6px;left:10px;transform:rotate(-40deg)translate(-50%,-50%)scale(1)}.zasdkqz-content{max-height:0;transition:max-height .5s;overflow:hidden}.zasdkqz-content.zasdkqz-show{max-height:250px;display:block}.zasdkqz-button{background:var(--zasdk-primary-color);color:var(--zasdk-button-text-color);cursor:pointer;border:none;border-radius:4px;margin-top:16px;padding:10px 20px;text-decoration:none;transition:background-color .3s;display:inline-block}.zasdkqz-button:hover{background:var(--zasdk-primary-color)}.zasdkqz-info{margin-top:5px;font-size:14px}.zasdkqz-icon{vertical-align:middle;width:20px;height:20px;margin-left:4px;display:inline-block}.zasdk-modal .zasakfilelstcnt{margin-top:10px;list-style:none}.zasdk-modal .zasakfilelstcnt li{border:1px solid var(--zasdk-border-color);vertical-align:middle;cursor:default;background:var(--zasdk-secondary-background);border-radius:3px;margin:0 5px 5px 0;padding:2px 20px 2px 5px;font-size:1.1rem;display:inline-flex;position:relative}.zaskFdBckFlName{box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;max-width:120px;display:inline-block;overflow:hidden}.zasdkFdBckFlCls{background:var(--zasdk-secondary-background);cursor:pointer;border-radius:0 3px 3px 0;padding:0 3px;font-size:14px;line-height:22px;position:absolute;top:0;bottom:0;right:2px}.zasdkmaxerror{color:#f33155;font-size:14px}.zasdk-timer-container{background-color:var(--zasdk-secondary-background);z-index:11111;cursor:pointer;border-radius:50px;align-items:center;gap:8px;padding:8px 10px;display:inline-flex;position:fixed;bottom:10px;right:10px;box-shadow:0 4px 15px #0000001a}.zasdk-timer-stopcricle{cursor:pointer;background-color:#f33155;border:none;border-radius:50%;width:12px;height:12px;padding:0;animation:1s infinite alternate blink}@keyframes blink{0%{opacity:1}to{opacity:.3}}.zasdk-timer-control{border:1px solid #f33155;border-radius:100%;padding:3px}.zasdk-timer-display{color:var(--zasdk-text-color);text-align:left;min-width:55px;font-size:14px;font-weight:500}.zasdk_videoPrev{justify-content:center;display:flex}.zasdk_videoPrev video{opacity:.4}.zasdk_recordedClipArea{border:1px solid var(--zasdk-border-color);border-radius:6px;display:none;position:relative}.zasdk_recordedClipArea .zasdk_rec_hdr{background-color:var(--zasdk-secondary-background);color:var(--zasdk-text-color);border-radius:3px 3px 0 0;padding:5px 10px}.zasdk_rec_hdr_icon{vertical-align:middle;display:inline-block;position:relative}.zasdk_rec_hdr i{vertical-align:middle;line-height:normal}.zasdk_rec_hdr svg{width:20px}.zasdk_playEdit{z-index:1;justify-content:space-between;align-items:stretch;width:180px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.zasdk_clipAreaButtonCnt,.zasdk_submit_btnsubcnt{position:relative}.zasdk_clipAreaButton{background:var(--zasdk-background-color);border:1px solid var(--zasdk-border-color);box-sizing:border-box;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;width:50px;height:40px;display:flex;box-shadow:0 0 9px #0003}.zasdk_clipAreaButton:hover{background:var(--zasdk-dropdown-hover)}.zasdk_clipAreaButton svg{width:28px}.zasdk-send-btn.zasdkbtndisableclr{filter:grayscale();pointer-events:none;opacity:.5}.zasdk-send-btn.zasdkbtndisabled{cursor:not-allowed;position:relative}.zasdkbtndisabled:after{content:\"\";border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:20px;height:20px;margin:auto;animation:1s ease-in-out infinite zasdkbuttonspin;position:absolute;inset:0}@keyframes zasdkbuttonspin{to{transform:rotate(360deg)}}.zasdk-tooltip,.zasdk-tooltip-top{visibility:hidden;color:#fff;opacity:0;z-index:111111;background-color:#000;border-radius:4px;width:max-content;max-width:200px;margin-top:8px;padding:8px 12px;font-size:14px;transition:opacity .2s;position:absolute;top:100%;left:50%;transform:translate(-50%)}.zasdk-tooltip:after,.zasdk-tooltip-top:after{content:\"\";border:5px solid #0000;border-bottom-color:#000;position:absolute;bottom:100%;left:50%;transform:translate(-50%)}.zasdk-tooltip-container:hover .zasdk-tooltip,.zasdk-tooltip-container:hover .zasdk-tooltip-top{visibility:visible;opacity:1}.zasdk-tooltip-top{margin-top:0;margin-bottom:8px;top:auto;bottom:100%}.zasdk-tooltip-top:after{border-color:#000 #0000 #0000;top:100%}.zasdk-prop-info{max-width:320px}.zasdk-prop-info li{font-size:13px}.zasdkqz-content:has(.zasdk_rec_hdr:hover){overflow:visible}@media (width<=450px){.zasdk-modal-content{width:calc(100% - 10px);bottom:5px;left:5px;right:5px}}@media (height<=600px){.zasdk-modal-content{max-height:100%;top:auto}}@media (width<=370px){.zasdk-feedback-type{width:70px}.zasdk-iconcnt,.zasdkfeedback__icon{width:25px;height:25px}.zasdkfeedback__icon-report svg{width:20px;height:100%}.zasdkfeedback__icon-reqest svg{width:18px}.zasdkfeedback__icon-help svg{width:18px;height:22px}.zasdkfeedback__icon-appreciate svg{width:20px;height:20px}.zasdk-feedback-type *{word-break:break-word;font-size:12px}.zasdk-buttons{margin-top:0}}.zasdk-custom-select{width:100%;margin-bottom:15px;font-size:14px;position:relative}.zasdk-select-trigger{border:1px solid var(--zasdk-border-color);background:var(--zasdk-input-background);cursor:pointer;color:var(--zasdk-text-color);-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:space-between;align-items:center;padding:9px 12px;display:flex}.zasdk-select-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.zasdk-select-arrow{flex-shrink:0;margin-left:8px}.zasdk-select-panel{background:var(--zasdk-input-background);border:1px solid var(--zasdk-border-color);box-shadow:0 6px 20px var(--zasdk-shadow);z-index:99;border-radius:8px;position:absolute;top:calc(100% + 3px);left:0;right:0;overflow:hidden}.zasdk-select-list{max-height:180px;margin:0;padding:4px 0;list-style:none;overflow-y:auto}.zasdk-select-option{cursor:pointer;color:var(--zasdk-text-color);justify-content:space-between;align-items:center;padding:10px 16px;font-size:14px;display:flex}.zasdk-select-option:hover{background:var(--zasdk-dropdown-hover)}.zasdk-select-option.zasdk-option-selected{color:var(--zasdk-link-color);font-weight:500}.zasdk-select-empty{color:var(--zasdk-muted-text);text-align:center;padding:10px 16px;font-size:13px;font-style:italic}.zasdk-toggles-section{margin:5px 16px}.zasdk-toggle-row{border-top:1px solid var(--zasdk-border-color);justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}.zasdk-toggle-info{flex-direction:row;flex:1;align-items:center;gap:8px;display:flex}.zasdk-toggle-label{color:var(--zasdk-text-color);font-size:14px;font-weight:600}.zasdk-view-link{color:var(--zasdk-link-color);cursor:pointer;white-space:nowrap;font-size:12px}.zasdk-view-link:hover{text-decoration:underline}.zasdk-toggle-separator{background:var(--zasdk-border-color);margin:0 16px}.zasdk-switch{flex-shrink:0;width:44px;height:24px;display:inline-block;position:relative}.zasdk-switch input{opacity:0;width:0;height:0}.zasdk-slider{cursor:pointer;background:var(--zasdk-switch-off);border-radius:24px;transition:all .3s;position:absolute;inset:0}.zasdk-slider:before{content:\"\";background:#fff;border-radius:50%;width:18px;height:18px;transition:all .3s;position:absolute;bottom:3px;left:3px}.zasdk-switch input:checked+.zasdk-slider{background:var(--zasdk-link-color)}.zasdk-switch input:checked+.zasdk-slider:before{transform:translate(20px)}.zasdk-data-viewer{background:var(--zasdk-background-color);z-index:100;border-radius:12px;flex-direction:column;position:absolute;inset:0;overflow:hidden}.zasdk-viewer-hdr{border-bottom:1px solid var(--zasdk-border-color);flex-shrink:0;align-items:center;gap:10px;padding:14px 16px;display:flex}.zasdk-viewer-back{cursor:pointer;flex-shrink:0;align-items:center;padding:2px;display:flex}.zasdk-viewer-back:hover svg path{stroke:var(--zasdk-link-color)}.zasdk-viewer-title{color:var(--zasdk-text-color);flex:1;font-size:16px;font-weight:600}.zasdk-viewer-content{color:var(--zasdk-text-color);white-space:pre-wrap;word-break:break-word;background:var(--zasdk-viewer-background);border-radius:6px;flex:1;margin:8px;padding:16px;font-family:monospace;font-size:12px;overflow-y:auto}.zasdk-modal-content :focus-visible{outline:2px solid var(--zasdk-primary-color);outline-offset:2px}@media (prefers-reduced-motion:reduce){.zasdk-modal *,.zasdk-timer-container *{transition:none!important;animation:none!important}}";
3
+
4
+ export { css as default };
@@ -1,2 +1,2 @@
1
- export declare const feedbackUIHtml = "<div id=\"zasdkFeedbackconatiner\" class=\"zasdk-modal-content\">\n <div class=\"zasdk-header\">\n <h2 class=\"zasdk-title\">Share feedback</h2>\n <span id=\"appticsfeedbackclose\" class=\"zasdk-close\"><svg viewBox=\"0 0 24 24\" style=\" width: 20px; \"><path d=\"M19.92,19.08c.23.23.23.61,0,.85-.12.12-.27.18-.42.18s-.31-.06-.42-.18l-7.08-7.08-7.08,7.08c-.12.12-.27.18-.42.18s-.31-.06-.42-.18c-.23-.23-.23-.61,0-.85l7.08-7.08-7.08-7.08c-.23-.23-.23-.61,0-.85s.61-.23.85,0l7.08,7.08,7.08-7.08c.23-.23.61-.23.85,0s.23.61,0,.85l-7.08,7.08,7.08,7.08Z\"/></svg></span>\n </div>\n <div class=\"zasdk-feedback-types\" data-type=\"\">\n <div class=\"zasdk-feedback-type zasdk-selected\" data-type=\"bug\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-report\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.6,6.58c-.13-.37-.3-.7-.5-.97l1.23-1.18c.24-.23.25-.61.02-.85-.23-.24-.61-.25-.85-.02l-1.26,1.21c-.66-.45-1.37-.62-1.79-.68-.25-.04-.51-.04-.76-.02-.83.08-1.45.35-1.93.7l-1.22-1.2c-.24-.23-.62-.23-.85,0-.23.24-.23.62,0,.85l1.21,1.19c-.24.34-.41.68-.51.96-2.02,1.37-3.27,3.82-3.27,6.44,0,4.18,3.08,7.58,6.87,7.58s6.87-3.4,6.87-7.58c0-2.62-1.25-5.06-3.26-6.44ZM11.82,5.27c.15-.02.31-.01.47.01.69.1,1.86.48,2.26,1.9-.17.17-.51.44-1.14.65-1.08.36-2.31.28-3.36-.23-.24-.11-.44-.23-.6-.36,0-.01,0-.03.01-.04.18-.65.73-1.77,2.36-1.93ZM12,19.4c-3.12,0-5.67-2.86-5.67-6.38,0-1.98.82-3.82,2.19-5.02.26.25.59.48,1.01.68.78.38,1.65.57,2.5.57.6,0,1.19-.09,1.76-.28.88-.29,1.39-.7,1.67-1,1.38,1.2,2.21,3.06,2.21,5.05,0,3.52-2.54,6.38-5.67,6.38ZM9.12,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM9.12,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM14.88,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM14.88,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM12,14.49c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM12,16.62c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47Z\"/></svg></i>\n </div>\n <div>Bug</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"feedback\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-reqest\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M6.69,9.25h10.81c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M6.69,13.07h8.11c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M20.72,5.17c0-.68-.55-1.23-1.23-1.23H4.48c-.68,0-1.23.55-1.23,1.23v11.84c0,.68.55,1.23,1.23,1.23h13.49l1.25,1.51c.17.2.41.31.67.31.1,0,.2-.02.3-.05.34-.13.57-.46.56-.83l-.03-14.01ZM19.22,17.39l-.17-.2c-.24-.29-.58-.45-.95-.45H4.75V5.44h14.47v11.95Z\"/></svg></i>\n </div>\n <div>Feedback</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"help\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-help\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M12.45,16.47c-.33,0-.6-.27-.6-.6v-2.7c0-.43.25-.82.64-.99.95-.42,3.15-1.62,3.15-3.51,0-1.6-1.01-3.03-2.51-3.55-.95-.33-1.97-.28-2.87.16-.91.43-1.59,1.2-1.92,2.14-.11.31-.45.48-.77.37-.31-.11-.48-.45-.37-.77.44-1.25,1.34-2.25,2.54-2.83,1.2-.57,2.54-.65,3.79-.21,1.99.7,3.32,2.58,3.31,4.69,0,2.46-2.34,3.91-3.79,4.57v2.63c0,.33-.27.6-.6.6ZM13.21,19.1c0-.66-.54-1.2-1.2-1.2h-.03c-.66,0-1.19.54-1.19,1.2s.55,1.2,1.21,1.2,1.2-.54,1.2-1.2Z\"/></svg></i>\n </div>\n <div>Help</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"report\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-appreciate\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M20.47,16.72l-6.66-11.53c-.37-.65-1.07-1.05-1.81-1.05s-1.44.4-1.81,1.05l-6.66,11.53c-.37.65-.37,1.45,0,2.09.37.65,1.07,1.05,1.81,1.05h13.32c.75,0,1.44-.4,1.81-1.05.37-.64.37-1.45,0-2.09ZM19.17,18.06c-.11.18-.3.3-.51.3H5.34c-.21,0-.41-.11-.51-.3-.1-.18-.1-.41,0-.59l6.66-11.53h0c.11-.18.3-.3.51-.3s.41.11.51.3l6.66,11.53c.11.18.11.41,0,.59Z\"/><path d=\"M12.35,13.9s.37-4.72.37-4.72c.05-1.08-1.58-1.06-1.5.02l.48,4.71c.03.38.62.37.64,0Z\"/><path d=\"M11.97,15.06c-.52,0-.94.42-.94.94s.42.94.94.94.94-.42.94-.94-.42-.94-.94-.94Z\"/></svg></i>\n </div>\n <div>Report</div>\n </div>\n </div>\n <div id=\"zasdkFeedbackForm\" class=\"zasdk-form\">\n <label class=\"zasdkdesclbl\">User<span class=\"zasdkmadfeld\">*</span></label>\n <div id=\"zasdkEmailDropdown\" class=\"zasdk-custom-select\">\n <div id=\"zasdkEmailTrigger\" class=\"zasdk-select-trigger\">\n <span id=\"zasdkEmailLabel\" class=\"zasdk-select-label\">Anonymous</span>\n <svg class=\"zasdk-select-arrow\" viewBox=\"0 0 12 8\" width=\"12\" height=\"8\"><path d=\"M1 1l5 5 5-5\" stroke=\"#999\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg>\n </div>\n <div id=\"zasdkEmailPanel\" class=\"zasdk-select-panel\" style=\"display:none\">\n <ul id=\"zasdkEmailList\" class=\"zasdk-select-list\"></ul>\n </div>\n </div>\n <label class=\"zasdkdesclbl\" for=\"zasdkDescription\">Add details here<span class=\"zasdkmadfeld\">*</span> <span class=\"zaleftcharspan\"><span class=\"zaleftcharcnt\">5000</span><span class=\"zaleftchartxt\">character left</span></span></label>\n <textarea id=\"zasdkDescription\" name=\"description\" placeholder=\"Please provide more details for us to help you better.\" reqname=\"name\" maxlength=\"5000\"></textarea>\n <div id=\"zasdkreccheckcnt\" class=\"zasdkqz-container\">\n <div class=\"zasdkqz-checkbox-wrapper\">\n <input type=\"checkbox\" id=\"zasdkqz-consent\" class=\"zasdkqz-checkbox\">\n <label for=\"zasdkqz-consent\">By agreeing to record screen, I allow the collection of the required information for further analysis.</label>\n </div>\n <div id=\"zasdkqz-content\" class=\"zasdkqz-content\">\n <div class=\"zasdkqz-prop-content\">Data collected while screen recording.\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container zasdk_rec_hdr\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip-top zasdk-prop-info\">\n <ul>\n <li>- A recording of the window or region specified.</li>\n <li>- Audio captured during recording. (You can mute or re-record)</li>\n <li>- IP address.</li>\n <li>- Browser console logs generated while recording.</li>\n <li>- Device details (screen resolution, OS, and browser version).</li>\n <li>- Client-side performance metrics (DNS lookup time, TCP connection time, etc.).</li>\n </ul>\n </div>\n </div>\n </div>\n <div id=\"zasdkqz_rec_button\" class=\"zasdkqz-button\">Start screen recording</div>\n </div>\n </div>\n <div id=\"editRecordedVideo\" class=\"zasdk_recordedClipArea\" style=\"\">\n <div id=\"recordScreenDesc\" class=\"zasdk_rec_hdr\"> Recorded Clip\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip\">This recording will be sent along with your feedback for further analysis.</div>\n </div>\n </div>\n <div class=\"zasdk_playEdit\">\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"preivewPlayButton\" class=\"zasdk_clipAreaButton\" title=\"Preview\">\n <svg viewBox=\"0 0 24 24\"><path d=\"M6.24,20.6c-.2,0-.39-.05-.57-.15-.38-.21-.62-.61-.62-1.05V4.59c0-.44.24-.84.62-1.05.38-.21.85-.19,1.22.04l11.52,7.41c.34.22.55.6.55,1,0,.41-.2.78-.55,1l-11.52,7.41c-.2.13-.42.19-.64.19ZM6.56,4.1l-.33.5v14.81s11.52-7.41,11.52-7.41L6.23,4.6l.33-.5Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Preview</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoEditButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M20.6,7.18c0-.58-.23-1.13-.65-1.54l-1.53-1.51c-.83-.83-2.29-.83-3.12,0l-1.31,1.3h0S4.88,14.41,4.88,14.41c-.12.12-.21.27-.26.44l-1.19,4.4c-.09.34,0,.7.26.95.19.18.44.29.7.29.09,0,.17-.01.26-.04l4.44-1.2c.16-.05.31-.13.44-.25l8.54-8.43h0s1.88-1.86,1.88-1.86c.06-.06.12-.12.17-.19h0c.31-.39.48-.86.48-1.36ZM8.72,18.12l-4.03,1.09,1.08-3.98L13.97,7.12l2.88,2.97-8.13,8.03ZM17.71,9.25l-2.88-2.97,1.32-1.3c.38-.38,1.04-.38,1.43,0l1.53,1.51c.19.18.29.43.29.69,0,.22-.08.43-.21.6h0s-.04.05-.08.08l-1.4,1.39Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Edit</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoDelButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M19.2,6.6h-3.4v-1c0-1.21-.99-2.2-2.2-2.2h-3.2c-1.21,0-2.2.99-2.2,2.2v1h-3.4c-.33,0-.6.27-.6.6s.27.6.6.6h1v10.6c0,1.21.99,2.2,2.2,2.2h8c1.21,0,2.2-.99,2.2-2.2V7.8h1c.33,0,.6-.27.6-.6s-.27-.6-.6-.6ZM9.4,5.6c0-.55.45-1,1-1h3.2c.55,0,1,.45,1,1v1h-5.2v-1ZM17,18.4c0,.55-.45,1-1,1h-8c-.55,0-1-.45-1-1V7.8h10v10.6ZM11,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6ZM14.2,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Delete</div>\n </div>\n </div>\n <div class=\"zasdk_videoPrev\">\n <video id=\"previewVideoElemId\" width=\"320\" height=\"240\" src=\"\"></video>\n </div>\n </div>\n\n <div class=\"zasdk-buttons\">\n <div class=\"zasdk-btncnt\">\n <div id=\"zasdkattachinfo\" class=\"zasdkattachinf\">Maximum 5 attachments with a total file size of 10MB is allowed</div>\n <input type=\"file\" id=\"zasdkFileInput\" class=\"zasdk-file-input\" multiple accept=\".png, .jpg, .txt\">\n <label id=\"zasdkAttachBtn\" class=\"zasdk-btn zasdk-attach-btn\" for=\"zasdkFileInput\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\" style=\" width: 25px; \"><path d=\"M12,20.6c-2.63,0-4.78-2.14-4.78-4.78V6.78c0-1.87,1.52-3.38,3.38-3.38s3.38,1.52,3.38,3.38v9.04c0,1.1-.9,1.99-2,1.99s-1.99-.89-1.99-1.99V7.48c0-.33.27-.6.6-.6h0c.33,0,.6.27.6.6v8.35c0,.44.35.79.79.79s.79-.36.79-.79V6.78c0-1.2-.98-2.18-2.18-2.18s-2.18.98-2.18,2.18v9.04c0,1.97,1.6,3.58,3.58,3.58s3.58-1.6,3.58-3.58V6.78c0-.33.27-.6.6-.6s.6.27.6.6v9.04c0,2.63-2.14,4.78-4.78,4.78Z\"/></svg>\n <span>Attachments</span>\n </label>\n <div id=\"zasdkfilesizeinfo\" class=\"zasdkfilesizeinf\"></div>\n <ul id=\"zasakfileList\" class=\"zasakfilelstcnt\"></ul>\n </div>\n </div>\n </div>\n <div class=\"zasdk-toggles-section\">\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include System Logs</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewLogsBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeLogToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n <div class=\"zasdk-toggle-separator\"></div>\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include Diagnostic Information</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewDiagBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeDiagToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n </div>\n <div class=\"zasdk_submit_btncnt\">\n <div id=\"zasdksubmitstatus\" class=\"zasdkstsmsg\" style=\"display:none;\" ></div>\n <div id=\"zasdk_submit_btnsubcnt\" class=\"zasdk_submit_btnsubcnt\">\n <input type=\"button\" id=\"zasdk_submit_btn\" class=\"zasdk-btn zasdk-send-btn zasdkbtndisableclr\" value=\"Send\">\n </div>\n </div>\n <div id=\"zasdkDataViewer\" class=\"zasdk-data-viewer\" style=\"display:none\">\n <div class=\"zasdk-viewer-hdr\">\n <span id=\"zasdkViewerClose\" class=\"zasdk-viewer-back\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"><path d=\"M15 19l-7-7 7-7\" stroke=\"#333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span>\n <span id=\"zasdkViewerTitle\" class=\"zasdk-viewer-title\"></span>\n </div>\n <pre id=\"zasdkViewerContent\" class=\"zasdk-viewer-content\"></pre>\n </div>\n </div>";
1
+ export declare const feedbackUIHtml = "<div id=\"zasdkFeedbackconatiner\" class=\"zasdk-modal-content\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"zasdkFeedbackTitle\">\n <div class=\"zasdk-header\">\n <h2 id=\"zasdkFeedbackTitle\" class=\"zasdk-title\">Share feedback</h2>\n <span id=\"appticsfeedbackclose\" class=\"zasdk-close\" role=\"button\" tabindex=\"0\" aria-label=\"Close\"><svg viewBox=\"0 0 24 24\" style=\" width: 20px; \"><path d=\"M19.92,19.08c.23.23.23.61,0,.85-.12.12-.27.18-.42.18s-.31-.06-.42-.18l-7.08-7.08-7.08,7.08c-.12.12-.27.18-.42.18s-.31-.06-.42-.18c-.23-.23-.23-.61,0-.85l7.08-7.08-7.08-7.08c-.23-.23-.23-.61,0-.85s.61-.23.85,0l7.08,7.08,7.08-7.08c.23-.23.61-.23.85,0s.23.61,0,.85l-7.08,7.08,7.08,7.08Z\"/></svg></span>\n </div>\n <div class=\"zasdk-feedback-types\" data-type=\"\">\n <div class=\"zasdk-feedback-type zasdk-selected\" data-type=\"feedback\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-reqest\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M6.69,9.25h10.81c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M6.69,13.07h8.11c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M20.72,5.17c0-.68-.55-1.23-1.23-1.23H4.48c-.68,0-1.23.55-1.23,1.23v11.84c0,.68.55,1.23,1.23,1.23h13.49l1.25,1.51c.17.2.41.31.67.31.1,0,.2-.02.3-.05.34-.13.57-.46.56-.83l-.03-14.01ZM19.22,17.39l-.17-.2c-.24-.29-.58-.45-.95-.45H4.75V5.44h14.47v11.95Z\"/></svg></i>\n </div>\n <div>Feedback</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"bug\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-report\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.6,6.58c-.13-.37-.3-.7-.5-.97l1.23-1.18c.24-.23.25-.61.02-.85-.23-.24-.61-.25-.85-.02l-1.26,1.21c-.66-.45-1.37-.62-1.79-.68-.25-.04-.51-.04-.76-.02-.83.08-1.45.35-1.93.7l-1.22-1.2c-.24-.23-.62-.23-.85,0-.23.24-.23.62,0,.85l1.21,1.19c-.24.34-.41.68-.51.96-2.02,1.37-3.27,3.82-3.27,6.44,0,4.18,3.08,7.58,6.87,7.58s6.87-3.4,6.87-7.58c0-2.62-1.25-5.06-3.26-6.44ZM11.82,5.27c.15-.02.31-.01.47.01.69.1,1.86.48,2.26,1.9-.17.17-.51.44-1.14.65-1.08.36-2.31.28-3.36-.23-.24-.11-.44-.23-.6-.36,0-.01,0-.03.01-.04.18-.65.73-1.77,2.36-1.93ZM12,19.4c-3.12,0-5.67-2.86-5.67-6.38,0-1.98.82-3.82,2.19-5.02.26.25.59.48,1.01.68.78.38,1.65.57,2.5.57.6,0,1.19-.09,1.76-.28.88-.29,1.39-.7,1.67-1,1.38,1.2,2.21,3.06,2.21,5.05,0,3.52-2.54,6.38-5.67,6.38ZM9.12,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM9.12,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM14.88,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM14.88,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM12,14.49c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM12,16.62c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47Z\"/></svg></i>\n </div>\n <div>Bug</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"help\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-help\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M12.45,16.47c-.33,0-.6-.27-.6-.6v-2.7c0-.43.25-.82.64-.99.95-.42,3.15-1.62,3.15-3.51,0-1.6-1.01-3.03-2.51-3.55-.95-.33-1.97-.28-2.87.16-.91.43-1.59,1.2-1.92,2.14-.11.31-.45.48-.77.37-.31-.11-.48-.45-.37-.77.44-1.25,1.34-2.25,2.54-2.83,1.2-.57,2.54-.65,3.79-.21,1.99.7,3.32,2.58,3.31,4.69,0,2.46-2.34,3.91-3.79,4.57v2.63c0,.33-.27.6-.6.6ZM13.21,19.1c0-.66-.54-1.2-1.2-1.2h-.03c-.66,0-1.19.54-1.19,1.2s.55,1.2,1.21,1.2,1.2-.54,1.2-1.2Z\"/></svg></i>\n </div>\n <div>Help</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"report\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-appreciate\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M20.47,16.72l-6.66-11.53c-.37-.65-1.07-1.05-1.81-1.05s-1.44.4-1.81,1.05l-6.66,11.53c-.37.65-.37,1.45,0,2.09.37.65,1.07,1.05,1.81,1.05h13.32c.75,0,1.44-.4,1.81-1.05.37-.64.37-1.45,0-2.09ZM19.17,18.06c-.11.18-.3.3-.51.3H5.34c-.21,0-.41-.11-.51-.3-.1-.18-.1-.41,0-.59l6.66-11.53h0c.11-.18.3-.3.51-.3s.41.11.51.3l6.66,11.53c.11.18.11.41,0,.59Z\"/><path d=\"M12.35,13.9s.37-4.72.37-4.72c.05-1.08-1.58-1.06-1.5.02l.48,4.71c.03.38.62.37.64,0Z\"/><path d=\"M11.97,15.06c-.52,0-.94.42-.94.94s.42.94.94.94.94-.42.94-.94-.42-.94-.94-.94Z\"/></svg></i>\n </div>\n <div>Report</div>\n </div>\n </div>\n <div id=\"zasdkFeedbackForm\" class=\"zasdk-form\">\n <label class=\"zasdkdesclbl\">User<span class=\"zasdkmadfeld\">*</span></label>\n <div id=\"zasdkEmailDropdown\" class=\"zasdk-custom-select\">\n <div id=\"zasdkEmailTrigger\" class=\"zasdk-select-trigger\">\n <span id=\"zasdkEmailLabel\" class=\"zasdk-select-label\">Anonymous</span>\n <svg class=\"zasdk-select-arrow\" viewBox=\"0 0 12 8\" width=\"12\" height=\"8\"><path d=\"M1 1l5 5 5-5\" stroke=\"#999\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg>\n </div>\n <div id=\"zasdkEmailPanel\" class=\"zasdk-select-panel\" style=\"display:none\">\n <ul id=\"zasdkEmailList\" class=\"zasdk-select-list\"></ul>\n </div>\n </div>\n <label class=\"zasdkdesclbl\" for=\"zasdkDescription\">Add details here<span class=\"zasdkmadfeld\">*</span> <span class=\"zaleftcharspan\"><span class=\"zaleftcharcnt\">5000</span><span class=\"zaleftchartxt\">characters left</span></span></label>\n <textarea id=\"zasdkDescription\" name=\"description\" placeholder=\"Please provide more details for us to help you better.\" reqname=\"name\" maxlength=\"5000\"></textarea>\n <div id=\"zasdkreccheckcnt\" class=\"zasdkqz-container\">\n <div class=\"zasdkqz-checkbox-wrapper\">\n <input type=\"checkbox\" id=\"zasdkqz-consent\" class=\"zasdkqz-checkbox\">\n <label for=\"zasdkqz-consent\">By agreeing to record screen, I allow the collection of the required information for further analysis.</label>\n </div>\n <div id=\"zasdkqz-content\" class=\"zasdkqz-content\">\n <div class=\"zasdkqz-prop-content\">Data collected while screen recording.\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container zasdk_rec_hdr\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip-top zasdk-prop-info\">\n <ul>\n <li>- A recording of the window or region specified.</li>\n <li>- Audio captured during recording. (You can mute or re-record)</li>\n <li>- IP address.</li>\n <li>- Browser console logs generated while recording.</li>\n <li>- Device details (screen resolution, OS, and browser version).</li>\n <li>- Client-side performance metrics (DNS lookup time, TCP connection time, etc.).</li>\n </ul>\n </div>\n </div>\n </div>\n <div id=\"zasdkqz_rec_button\" class=\"zasdkqz-button\">Start screen recording</div>\n </div>\n </div>\n <div id=\"editRecordedVideo\" class=\"zasdk_recordedClipArea\" style=\"\">\n <div id=\"recordScreenDesc\" class=\"zasdk_rec_hdr\"> Recorded Clip\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip\">This recording will be sent along with your feedback for further analysis.</div>\n </div>\n </div>\n <div class=\"zasdk_playEdit\">\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"preivewPlayButton\" class=\"zasdk_clipAreaButton\" title=\"Preview\">\n <svg viewBox=\"0 0 24 24\"><path d=\"M6.24,20.6c-.2,0-.39-.05-.57-.15-.38-.21-.62-.61-.62-1.05V4.59c0-.44.24-.84.62-1.05.38-.21.85-.19,1.22.04l11.52,7.41c.34.22.55.6.55,1,0,.41-.2.78-.55,1l-11.52,7.41c-.2.13-.42.19-.64.19ZM6.56,4.1l-.33.5v14.81s11.52-7.41,11.52-7.41L6.23,4.6l.33-.5Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Preview</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoEditButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M20.6,7.18c0-.58-.23-1.13-.65-1.54l-1.53-1.51c-.83-.83-2.29-.83-3.12,0l-1.31,1.3h0S4.88,14.41,4.88,14.41c-.12.12-.21.27-.26.44l-1.19,4.4c-.09.34,0,.7.26.95.19.18.44.29.7.29.09,0,.17-.01.26-.04l4.44-1.2c.16-.05.31-.13.44-.25l8.54-8.43h0s1.88-1.86,1.88-1.86c.06-.06.12-.12.17-.19h0c.31-.39.48-.86.48-1.36ZM8.72,18.12l-4.03,1.09,1.08-3.98L13.97,7.12l2.88,2.97-8.13,8.03ZM17.71,9.25l-2.88-2.97,1.32-1.3c.38-.38,1.04-.38,1.43,0l1.53,1.51c.19.18.29.43.29.69,0,.22-.08.43-.21.6h0s-.04.05-.08.08l-1.4,1.39Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Edit</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoDelButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M19.2,6.6h-3.4v-1c0-1.21-.99-2.2-2.2-2.2h-3.2c-1.21,0-2.2.99-2.2,2.2v1h-3.4c-.33,0-.6.27-.6.6s.27.6.6.6h1v10.6c0,1.21.99,2.2,2.2,2.2h8c1.21,0,2.2-.99,2.2-2.2V7.8h1c.33,0,.6-.27.6-.6s-.27-.6-.6-.6ZM9.4,5.6c0-.55.45-1,1-1h3.2c.55,0,1,.45,1,1v1h-5.2v-1ZM17,18.4c0,.55-.45,1-1,1h-8c-.55,0-1-.45-1-1V7.8h10v10.6ZM11,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6ZM14.2,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Delete</div>\n </div>\n </div>\n <div class=\"zasdk_videoPrev\">\n <video id=\"previewVideoElemId\" width=\"320\" height=\"240\" src=\"\"></video>\n </div>\n </div>\n\n <div class=\"zasdk-buttons\">\n <div class=\"zasdk-btncnt\">\n <div id=\"zasdkattachinfo\" class=\"zasdkattachinf\">Maximum 5 attachments with a total file size of 10MB is allowed</div>\n <input type=\"file\" id=\"zasdkFileInput\" class=\"zasdk-file-input\" multiple accept=\".png, .jpg, .txt\">\n <label id=\"zasdkAttachBtn\" class=\"zasdk-btn zasdk-attach-btn\" for=\"zasdkFileInput\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\" style=\" width: 25px; \"><path d=\"M12,20.6c-2.63,0-4.78-2.14-4.78-4.78V6.78c0-1.87,1.52-3.38,3.38-3.38s3.38,1.52,3.38,3.38v9.04c0,1.1-.9,1.99-2,1.99s-1.99-.89-1.99-1.99V7.48c0-.33.27-.6.6-.6h0c.33,0,.6.27.6.6v8.35c0,.44.35.79.79.79s.79-.36.79-.79V6.78c0-1.2-.98-2.18-2.18-2.18s-2.18.98-2.18,2.18v9.04c0,1.97,1.6,3.58,3.58,3.58s3.58-1.6,3.58-3.58V6.78c0-.33.27-.6.6-.6s.6.27.6.6v9.04c0,2.63-2.14,4.78-4.78,4.78Z\"/></svg>\n <span>Attachments</span>\n </label>\n <div id=\"zasdkfilesizeinfo\" class=\"zasdkfilesizeinf\"></div>\n <ul id=\"zasakfileList\" class=\"zasakfilelstcnt\"></ul>\n </div>\n </div>\n </div>\n <div class=\"zasdk-toggles-section\">\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include System Logs</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewLogsBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeLogToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n <div class=\"zasdk-toggle-separator\"></div>\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include Diagnostic Information</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewDiagBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeDiagToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n </div>\n <div class=\"zasdk_submit_btncnt\">\n <div id=\"zasdksubmitstatus\" class=\"zasdkstsmsg\" style=\"display:none;\" ></div>\n <div id=\"zasdk_submit_btnsubcnt\" class=\"zasdk_submit_btnsubcnt\">\n <input type=\"button\" id=\"zasdk_submit_btn\" class=\"zasdk-btn zasdk-send-btn zasdkbtndisableclr\" value=\"Send\">\n </div>\n </div>\n <div id=\"zasdkDataViewer\" class=\"zasdk-data-viewer\" style=\"display:none\">\n <div class=\"zasdk-viewer-hdr\">\n <span id=\"zasdkViewerClose\" class=\"zasdk-viewer-back\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"><path d=\"M15 19l-7-7 7-7\" stroke=\"#333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span>\n <span id=\"zasdkViewerTitle\" class=\"zasdk-viewer-title\"></span>\n </div>\n <pre id=\"zasdkViewerContent\" class=\"zasdk-viewer-content\"></pre>\n </div>\n </div>";
2
2
  export declare const timerHtml = "<div id=\"zasdkrectimer\" class=\"zasdk-timer-container zasdk-tooltip-container\">\n <div class=\"zasdk-timer-control\" id=\"zasdkRecordButton\"><div class=\"zasdk-timer-stopcricle\"></div></div>\n <span class=\"zasdk-timer-display\" id=\"zasdkTimerDisplay\">05:00</span>\n <div class=\"zasdk-tooltip-top\">Stop Recording</div>\n </div>";