UNPKG

survey-pdf

Version:

survey.pdf.js is a SurveyJS PDF Library. It is a easy way to export SurveyJS surveys to PDF. It uses JSON for survey metadata.

1 lines 1.99 MB
{"version":3,"file":"survey.pdf.mjs","sources":["../../node_modules/tslib/tslib.es6.js","../../src/pdf_render/pdf_composite.ts","../../src/pdf_render/pdf_rowline.ts","../../src/event_handler/adorners.ts","../../src/flat_layout/flat_survey.ts","../../src/pdf_render/pdf_brick.ts","../../src/pdf_render/pdf_text.ts","../../src/flat_layout/flat_question.ts","../../src/flat_layout/flat_default.ts","../../src/flat_layout/flat_repository.ts","../../src/pdf_render/pdf_textbold.ts","../../src/pdf_render/pdf_titlepanel.ts","../../src/pdf_render/pdf_description.ts","../../src/pdf_render/pdf_textfield.ts","../../src/pdf_render/pdf_textbox.ts","../../src/pdf_render/pdf_comment.ts","../../src/pdf_render/pdf_link.ts","../../src/pdf_render/pdf_html.ts","../../src/pdf_render/pdf_image.ts","../../src/pdf_render/pdf_empty.ts","../../src/helper_survey.ts","../../src/jspdf_plugins/acroform_radio.ts","../../src/jspdf_plugins/acroform.js","../../src/jspdf_plugins/from_html.js","../../src/doc_controller.ts","../../node_modules/shallowequal/index.js","../../node_modules/node-interval-tree/lib/index.js","../../src/page_layout/page_packer.ts","../../src/event_handler/draw_canvas.ts","../../src/event_handler/event_handler.ts","../../src/survey.ts","../../src/pdf_render/pdf_checkitem.ts","../../src/pdf_render/pdf_booleanitem.ts","../../src/pdf_render/pdf_radioitem.ts","../../src/flat_layout/flat_selectbase.ts","../../src/flat_layout/flat_radiogroup.ts","../../src/flat_layout/flat_boolean.ts","../../src/pdf_render/pdf_checkboxitem.ts","../../src/flat_layout/flat_checkbox.ts","../../src/flat_layout/flat_custom_model.ts","../../src/flat_layout/flat_comment.ts","../../src/pdf_render/pdf_dropdown.ts","../../src/flat_layout/flat_dropdown.ts","../../src/flat_layout/flat_expression.ts","../../src/flat_layout/flat_file.ts","../../src/flat_layout/flat_html.ts","../../src/flat_layout/flat_image.ts","../../src/flat_layout/flat_imagepicker.ts","../../src/flat_layout/flat_paneldynamic.ts","../../src/pdf_render/pdf_rankingitem.ts","../../src/pdf_render/pdf_coloredbrick.ts","../../src/flat_layout/flat_ranking.ts","../../src/flat_layout/flat_rating.ts","../../src/flat_layout/flat_signaturepad.ts","../../src/flat_layout/flat_textbox.ts","../../src/flat_layout/flat_matrix.ts","../../src/flat_layout/flat_matrixmultiple.ts","../../src/flat_layout/flat_matrixdynamic.ts","../../src/flat_layout/flat_multipletext.ts","../../src/pdf_render/pdf_custom.ts","../../src/entries/pdf.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { IPdfBrick, TranslateXFunction } from './pdf_brick';\nimport { SurveyHelper } from '../helper_survey';\n\nexport class CompositeBrick implements IPdfBrick {\n private bricks: IPdfBrick[] = [];\n private _xLeft: number;\n private _xRight: number;\n private _yTop: number;\n private _yBot: number;\n public isPageBreak: boolean = false;\n public constructor(...bricks: IPdfBrick[]) {\n this._xLeft = 0.0;\n this._xRight = 0.0;\n this._yTop = 0.0;\n this._yBot = 0.0;\n this.addBrick(...bricks);\n }\n get xLeft(): number { return this._xLeft; }\n set xLeft(xLeft: number) {\n this.shift(xLeft - this.xLeft, 0.0, 0.0, 0.0);\n this._xLeft = xLeft;\n }\n get xRight(): number { return this._xRight; }\n set xRight(xRight: number) {\n this.shift(0.0, xRight - this.xRight, 0.0, 0.0);\n this._xRight = xRight;\n }\n get yTop(): number { return this._yTop; }\n set yTop(yTop: number) {\n this.shift(0.0, 0.0, yTop - this.yTop, 0.0);\n this._yTop = yTop;\n }\n get yBot(): number { return this._yBot; }\n set yBot(yBot: number) {\n this.shift(0.0, 0.0, 0.0, yBot - this.yBot);\n this._yBot = yBot;\n }\n private shift(leftShift: number, rightShift: number,\n topShift: number, botShift: number) {\n this.bricks.forEach((brick: IPdfBrick) => {\n brick.xLeft += leftShift;\n brick.xRight += rightShift;\n brick.yTop += topShift;\n brick.yBot += botShift;\n });\n }\n public get width(): number {\n return this.xRight - this.xLeft;\n }\n public get height(): number {\n return this.yBot - this.yTop;\n }\n public async render(): Promise<void> {\n for (let i: number = 0; i < this.bricks.length; i++) {\n await this.bricks[i].render();\n }\n }\n public get isEmpty(): boolean {\n return this.bricks.length === 0;\n }\n public addBrick(...bricks: IPdfBrick[]) {\n if (bricks.length != 0) {\n this.bricks.push(...bricks);\n let mergeRect = SurveyHelper.mergeRects(...this.bricks);\n this._xLeft = mergeRect.xLeft;\n this._xRight = mergeRect.xRight;\n this._yTop = mergeRect.yTop;\n this._yBot = mergeRect.yBot;\n }\n }\n public unfold(): IPdfBrick[] {\n const unfoldBricks: IPdfBrick[] = [];\n this.bricks.forEach((brick: IPdfBrick) => {\n unfoldBricks.push(...brick.unfold());\n });\n return unfoldBricks;\n }\n translateX(func: TranslateXFunction): void {\n this.bricks.forEach(brick => brick.translateX(func));\n const res = func(this.xLeft, this.xRight);\n this._xLeft = res.xLeft;\n this._xRight = res.xRight;\n }\n}","import { IRect, DocController } from '../doc_controller';\nimport { IPdfBrick, TranslateXFunction } from './pdf_brick';\n\nexport class RowlineBrick implements IPdfBrick {\n xLeft: number;\n xRight: number;\n yTop: number;\n yBot: number;\n public isPageBreak: boolean = false;\n public constructor(protected controller: DocController,\n rect: IRect, public color: string) {\n this.xLeft = rect.xLeft;\n this.xRight = rect.xRight;\n this.yTop = rect.yTop;\n this.yBot = rect.yBot;\n }\n public get width(): number {\n return this.xRight - this.xLeft;\n }\n public get height(): number {\n return this.yBot - this.yTop;\n }\n public async render(): Promise<void> {\n if (this.color !== null) {\n let oldDrawColor: string = this.controller.doc.getDrawColor();\n this.controller.doc.setDrawColor(this.color);\n this.controller.doc.line(this.xLeft, this.yTop, this.xRight, this.yTop);\n this.controller.doc.setDrawColor(oldDrawColor);\n }\n }\n public unfold(): IPdfBrick[] {\n return [this];\n }\n translateX(_: TranslateXFunction): void {}\n}","import { IQuestion, PanelModel, PageModel, Question } from 'survey-core';\nimport { IPoint, DocController } from '../doc_controller';\nimport { FlatRepository } from '../flat_layout/flat_repository';\nimport { IPdfBrick } from '../pdf_render/pdf_brick';\n\nexport class AdornersBaseOptions {\n public point: IPoint;\n public bricks: IPdfBrick[];\n public controller: DocController;\n public repository: FlatRepository;\n public module: any;\n\n public constructor(point: IPoint, bricks: IPdfBrick[],\n controller: DocController, repository: FlatRepository, module: any) {\n this.point = point;\n this.bricks = bricks;\n this.controller = controller;\n this.repository = repository;\n this.module = module;\n }\n}\nexport class AdornersOptions extends AdornersBaseOptions {\n public question: Question;\n public constructor(point: IPoint, bricks: IPdfBrick[],\n question: Question, controller: DocController,\n repository: FlatRepository, module: any) {\n super(point, bricks, controller, repository, module);\n this.question = question;\n }\n}\nexport class AdornersPanelOptions extends AdornersBaseOptions {\n public panel: PanelModel;\n public constructor(point: IPoint, bricks: IPdfBrick[],\n panel: PanelModel, controller: DocController,\n repository: FlatRepository, module: any) {\n super(point, bricks, controller, repository, module);\n this.panel = panel;\n }\n}\n\nexport class AdornersPageOptions extends AdornersBaseOptions {\n public page: PageModel;\n public constructor(point: IPoint, bricks: IPdfBrick[],\n page: PageModel, controller: DocController,\n repository: FlatRepository, module: any) {\n super(point, bricks, controller, repository, module);\n this.page = page;\n }\n}\n\n","import { IElement, Question, PanelModelBase, PanelModel } from 'survey-core';\nimport { SurveyPDF } from '../survey';\nimport { IPoint, DocController } from '../doc_controller';\nimport { IPdfBrick } from '../pdf_render/pdf_brick';\nimport { CompositeBrick } from '../pdf_render/pdf_composite';\nimport { RowlineBrick } from '../pdf_render/pdf_rowline';\nimport { SurveyHelper } from '../helper_survey';\nimport { AdornersPanelOptions, AdornersPageOptions } from '../event_handler/adorners';\nimport { FlatRepository } from '../entries/pdf';\nimport * as SurveyPDFModule from '../entries/pdf';\n\nexport class FlatSurvey {\n public static QUES_GAP_VERT_SCALE: number = 1.5;\n public static PANEL_CONT_GAP_SCALE: number = 1.0;\n public static PANEL_DESC_GAP_SCALE: number = 0.25;\n public static async generateFlatsPanel(survey: SurveyPDF, controller: DocController,\n panel: PanelModel, point: IPoint): Promise<IPdfBrick[]> {\n const panelFlats: IPdfBrick[] = [];\n const panelContentPoint: IPoint = SurveyHelper.clone(point);\n controller.pushMargins();\n controller.margins.left += controller.measureText(panel.innerIndent).width;\n panelContentPoint.xLeft += controller.measureText(panel.innerIndent).width;\n panelFlats.push(...await this.generateFlatsPagePanel(survey,\n controller, panel, panelContentPoint));\n controller.popMargins();\n const adornersOptions: AdornersPanelOptions = new AdornersPanelOptions(point,\n panelFlats, panel, controller, FlatRepository.getInstance(), SurveyPDFModule);\n await survey.onRenderPanel.fire(survey, adornersOptions);\n return [...adornersOptions.bricks];\n }\n private static async generateFlatsPagePanel(survey: SurveyPDF, controller: DocController,\n pagePanel: PanelModelBase, point: IPoint): Promise<IPdfBrick[]> {\n if (!pagePanel.isVisible) return;\n pagePanel.onFirstRendering();\n const pagePanelFlats: IPdfBrick[] = [];\n let currPoint: IPoint = SurveyHelper.clone(point);\n if (pagePanel.getType() !== 'page' || survey.showPageTitles) {\n const compositeFlat: CompositeBrick = new CompositeBrick();\n if (pagePanel.title) {\n if (pagePanel instanceof PanelModel && pagePanel.no) {\n const noFlat: IPdfBrick = await SurveyHelper.createTitlePanelFlat(\n currPoint, controller, pagePanel.no, pagePanel.getType() === 'page');\n compositeFlat.addBrick(noFlat);\n currPoint.xLeft = noFlat.xRight + controller.measureText(' ').width;\n }\n const pagelPanelTitleFlat: IPdfBrick = await SurveyHelper.createTitlePanelFlat(\n currPoint, controller, pagePanel.locTitle, pagePanel.getType() === 'page');\n compositeFlat.addBrick(pagelPanelTitleFlat);\n currPoint = SurveyHelper.createPoint(pagelPanelTitleFlat);\n }\n if (pagePanel.description) {\n if (pagePanel.title) {\n currPoint.yTop += controller.unitWidth * FlatSurvey.PANEL_DESC_GAP_SCALE;\n }\n const pagePanelDescFlat: IPdfBrick = await SurveyHelper.createDescFlat(\n currPoint, null, controller, pagePanel.locDescription);\n compositeFlat.addBrick(pagePanelDescFlat);\n currPoint = SurveyHelper.createPoint(pagePanelDescFlat);\n }\n if (!compositeFlat.isEmpty) {\n const rowLinePoint: IPoint = SurveyHelper.createPoint(compositeFlat);\n compositeFlat.addBrick(SurveyHelper.createRowlineFlat(rowLinePoint, controller));\n pagePanelFlats.push(compositeFlat);\n currPoint.yTop += controller.unitHeight * FlatSurvey.PANEL_CONT_GAP_SCALE + SurveyHelper.EPSILON;\n }\n }\n for (const row of pagePanel.rows) {\n if (!row.visible) continue;\n controller.pushMargins();\n const width: number = SurveyHelper.getPageAvailableWidth(controller);\n let nextMarginLeft: number = controller.margins.left;\n const rowFlats: IPdfBrick[] = [];\n const visibleElements = row.elements.filter(el => el.isVisible);\n for (let i: number = 0; i < visibleElements.length; i++) {\n let element: IElement = visibleElements[i];\n if (!element.isVisible) continue;\n const persWidth: number = SurveyHelper.parseWidth(element.renderWidth,\n width - (visibleElements.length - 1) * controller.unitWidth,\n visibleElements.length);\n controller.margins.left = nextMarginLeft + ((i !== 0) ? controller.unitWidth : 0);\n controller.margins.right = controller.paperWidth - controller.margins.left - persWidth;\n currPoint.xLeft = controller.margins.left;\n nextMarginLeft = controller.margins.left + persWidth;\n if (element instanceof PanelModel) {\n rowFlats.push(...await this.generateFlatsPanel(\n survey, controller, element, currPoint));\n }\n else {\n rowFlats.push(...await SurveyHelper.generateQuestionFlats(survey,\n controller, <Question>element, currPoint));\n }\n }\n controller.popMargins();\n currPoint.xLeft = controller.margins.left;\n if (rowFlats.length !== 0) {\n currPoint.yTop = SurveyHelper.mergeRects(...rowFlats).yBot;\n currPoint.xLeft = point.xLeft;\n currPoint.yTop += controller.unitHeight * FlatSurvey.QUES_GAP_VERT_SCALE;\n pagePanelFlats.push(...rowFlats);\n pagePanelFlats.push(SurveyHelper.createRowlineFlat(currPoint, controller));\n currPoint.yTop += SurveyHelper.EPSILON;\n }\n }\n return pagePanelFlats;\n }\n private static popRowlines(flats: IPdfBrick[]) {\n while (flats.length > 0 && flats[flats.length - 1] instanceof RowlineBrick) {\n flats.pop();\n }\n }\n private static async generateFlatTitle(survey: SurveyPDF, controller: DocController,\n point: IPoint): Promise<CompositeBrick> {\n const compositeFlat: CompositeBrick = new CompositeBrick();\n if (survey.showTitle) {\n if (survey.title) {\n const surveyTitleFlat: IPdfBrick = await SurveyHelper.createTitleSurveyFlat(\n point, controller, survey.locTitle);\n compositeFlat.addBrick(surveyTitleFlat);\n point = SurveyHelper.createPoint(surveyTitleFlat);\n }\n if (survey.description) {\n if (survey.title) {\n point.yTop += controller.unitWidth * FlatSurvey.PANEL_DESC_GAP_SCALE;\n }\n compositeFlat.addBrick(await SurveyHelper.createDescFlat(\n point, null, controller, survey.locDescription));\n }\n }\n return compositeFlat;\n }\n private static async generateFlatLogoImage(survey: SurveyPDF, controller: DocController,\n point: IPoint): Promise<IPdfBrick> {\n const logoUrl = SurveyHelper.getLocString(survey.locLogo);\n const logoSize = await SurveyHelper.getCorrectedImageSize(controller, { imageLink: logoUrl, imageHeight: survey.logoHeight, imageWidth: survey.logoWidth, defaultImageWidth: '300px', defaultImageHeight: '200px' });\n const logoFlat: IPdfBrick = await SurveyHelper.createImageFlat(\n point, null, controller, { link: logoUrl,\n width: logoSize.width, height: logoSize.height });\n let shift: number = 0;\n if (survey.logoPosition === 'right') {\n shift = SurveyHelper.getPageAvailableWidth(controller) - logoFlat.width;\n }\n else if (survey.logoPosition !== 'left') {\n shift = SurveyHelper.getPageAvailableWidth(controller) / 2.0 - logoFlat.width / 2.0;\n }\n logoFlat.xLeft += shift;\n logoFlat.xRight += shift;\n return logoFlat;\n }\n public static async generateFlats(survey: SurveyPDF, controller: DocController): Promise<IPdfBrick[][]> {\n const flats: IPdfBrick[][] = [];\n if (!survey.hasLogo) {\n const titleFlat: CompositeBrick = await this.generateFlatTitle(\n survey, controller, controller.leftTopPoint);\n if (!titleFlat.isEmpty) flats.push([titleFlat]);\n }\n else if (survey.isLogoBefore) {\n const logoFlat: IPdfBrick = await this.generateFlatLogoImage(\n survey, controller, controller.leftTopPoint);\n flats.push([logoFlat]);\n const titlePoint: IPoint = SurveyHelper.createPoint(logoFlat,\n survey.logoPosition === 'top', survey.logoPosition !== 'top');\n if (survey.logoPosition !== 'top') {\n controller.pushMargins();\n titlePoint.xLeft += controller.unitWidth;\n controller.margins.left += logoFlat.width + controller.unitWidth;\n }\n else {\n titlePoint.xLeft = controller.leftTopPoint.xLeft;\n titlePoint.yTop += controller.unitHeight / 2.0;\n }\n const titleFlat: CompositeBrick = await this.generateFlatTitle(\n survey, controller, titlePoint);\n if (survey.logoPosition !== 'top') controller.popMargins();\n if (!titleFlat.isEmpty) flats[0].push(titleFlat);\n }\n else {\n if (survey.logoPosition === 'right') {\n const logoFlat: IPdfBrick = await this.generateFlatLogoImage(\n survey, controller, controller.leftTopPoint);\n flats.push([logoFlat]);\n controller.pushMargins();\n controller.margins.right += logoFlat.width + controller.unitWidth;\n const titleFlat: CompositeBrick = await this.generateFlatTitle(\n survey, controller, controller.leftTopPoint);\n if (!titleFlat.isEmpty) flats[0].unshift(titleFlat);\n controller.popMargins();\n }\n else {\n const titleFlat: CompositeBrick = await this.generateFlatTitle(\n survey, controller, controller.leftTopPoint);\n let logoPoint: IPoint = controller.leftTopPoint;\n if (!titleFlat.isEmpty) {\n flats.push([titleFlat]);\n logoPoint = SurveyHelper.createPoint(titleFlat);\n logoPoint.yTop += controller.unitHeight / 2.0;\n }\n const logoFlat: IPdfBrick = await this.generateFlatLogoImage(\n survey, controller, logoPoint);\n if (flats.length !== 0) flats[0].push(logoFlat);\n else flats.push([logoFlat]);\n }\n }\n let point: IPoint = controller.leftTopPoint;\n if (flats.length !== 0) {\n point.yTop = SurveyHelper.createPoint(SurveyHelper.mergeRects(...flats[0])).yTop;\n flats[0].push(SurveyHelper.createRowlineFlat(point, controller));\n point.yTop += controller.unitHeight * FlatSurvey.PANEL_CONT_GAP_SCALE + SurveyHelper.EPSILON;\n }\n for (let i: number = 0; i < survey.visiblePages.length; i++) {\n survey.currentPage = survey.visiblePages[i];\n let pageFlats: IPdfBrick[] = [];\n pageFlats.push(...await this.generateFlatsPagePanel(\n survey, controller, survey.visiblePages[i], point));\n const adornersOptions: AdornersPageOptions = new AdornersPageOptions(point,\n pageFlats, survey.visiblePages[i], controller, FlatRepository.getInstance(), SurveyPDFModule);\n await survey.onRenderPage.fire(survey, adornersOptions);\n pageFlats = [...adornersOptions.bricks];\n if (i === 0 && flats.length !== 0) {\n flats[0].push(...pageFlats);\n }\n else flats.push(pageFlats);\n this.popRowlines(flats[flats.length - 1]);\n point.yTop = controller.leftTopPoint.yTop;\n }\n return flats;\n }\n}","import { IRect, ISize, DocController } from '../doc_controller';\nimport { IQuestion, Question } from 'survey-core';\nimport { SurveyHelper } from '../helper_survey';\n\nexport type TranslateXFunction = (xLeft: number, xRight : number) => { xLeft: number, xRight: number};\nexport interface IPdfBrick extends IRect, ISize {\n render(): Promise<void>;\n unfold(): IPdfBrick[];\n translateX(func: TranslateXFunction): void;\n isPageBreak: boolean;\n}\n/**\n * An object that describes a PDF brick&mdash;a simple element with specified content, size, and location. Bricks are fundamental elements used to construct a PDF document.\n *\n * You can access `PdfBrick` objects within functions that handle `SurveyPDF`'s [`onRenderQuestion`](https://surveyjs.io/pdf-generator/documentation/api-reference/surveypdf#onRenderQuestion), [`onRenderPanel`](https://surveyjs.io/pdf-generator/documentation/api-reference/surveypdf#onRenderPanel), and [`onRenderPage`](https://surveyjs.io/pdf-generator/documentation/api-reference/surveypdf#onRenderPage) events.\n *\n * [View Demo](https://surveyjs.io/pdf-generator/examples/add-markup-to-customize-pdf-forms/ (linkStyle))\n */\nexport class PdfBrick implements IPdfBrick {\n protected _xLeft: number;\n protected _xRight: number;\n protected _yTop: number;\n protected _yBot: number;\n\n /**\n * An X-coordinate for the left brick edge.\n */\n public get xLeft(): number {\n return this._xLeft;\n }\n public set xLeft(val: number) {\n this.setXLeft(val);\n }\n /**\n * An X-coordinate for the right brick edge.\n */\n public get xRight(): number {\n return this._xRight;\n }\n public set xRight(val: number) {\n this.setXRight(val);\n }\n /**\n * A Y-coordinate for the top brick edge.\n */\n public get yTop(): number {\n return this._yTop;\n }\n public set yTop(val: number) {\n this.setYTop(val);\n }\n /**\n * A Y-coordinate for the bottom brick edge.\n */\n public get yBot(): number {\n return this._yBot;\n }\n public set yBot(val: number) {\n this.setYBottom(val);\n }\n /**\n * Font size in points.\n *\n * Default value: 14 (inherited from the parent PDF document)\n */\n public fontSize: number;\n /**\n * The color of text within the brick.\n *\n * Default value: `\"#404040\"`\n */\n public textColor: string = SurveyHelper.TEXT_COLOR;\n public formBorderColor: string = SurveyHelper.FORM_BORDER_COLOR;\n public isPageBreak: boolean = false;\n public constructor(protected question: IQuestion,\n protected controller: DocController, rect: IRect) {\n this.xLeft = rect.xLeft;\n this.xRight = rect.xRight;\n this.yTop = rect.yTop;\n this.yBot = rect.yBot;\n this.fontSize = !!controller ?\n controller.fontSize : DocController.FONT_SIZE;\n }\n translateX(func: TranslateXFunction): void {\n const res = func(this.xLeft, this.xRight);\n this.xLeft = res.xLeft;\n this.xRight = res.xRight;\n }\n /**\n * The brick's width in pixels.\n */\n public get width(): number {\n return this.xRight - this.xLeft;\n }\n /**\n * The brick's height in pixels.\n */\n public get height(): number {\n return this.yBot - this.yTop;\n }\n protected getShouldRenderReadOnly(): boolean {\n return SurveyHelper.shouldRenderReadOnly(this.question, this.controller);\n }\n public afterRenderCallback: () => void;\n public async render(): Promise<void> {\n if (this.getShouldRenderReadOnly()) {\n await this.renderReadOnly();\n }\n else await this.renderInteractive();\n this.afterRenderCallback && this.afterRenderCallback();\n }\n public async renderInteractive(): Promise<void> { }\n public async renderReadOnly(): Promise<void> {\n await this.renderInteractive();\n }\n /**\n * Allows you to get a flat array of nested PDF bricks.\n * @returns A flat array of nested PDF bricks.\n */\n public unfold(): IPdfBrick[] {\n return [this];\n }\n protected getCorrectedText(val: string): string {\n return this.controller.isRTL ? (val || '').split('').reverse().join(''): val;\n }\n protected setXLeft(val: number): void {\n this._xLeft = val;\n }\n protected setXRight(val: number): void {\n this._xRight = val;\n }\n protected setYTop(val: number): void {\n this._yTop = val;\n }\n protected setYBottom(val: number): void {\n this._yBot = val;\n }\n}\n","import { IQuestion, } from 'survey-core';\nimport { IPoint, IRect, DocController } from '../doc_controller';\nimport { PdfBrick } from './pdf_brick';\n\nexport class TextBrick extends PdfBrick {\n protected align: any;\n public constructor(question: IQuestion, controller: DocController,\n rect: IRect, protected text: string) {\n super(question, controller, rect);\n this.align = {\n isInputRtl: false,\n isOutputRtl: controller.isRTL,\n align: controller.isRTL ? 'right': 'left',\n baseline: 'middle'\n };\n }\n private escapeText() {\n while (this.text.indexOf('\\t') > -1) {\n this.text = this.text.replace('\\t', Array(5).join(String.fromCharCode(160)));\n }\n return this.text;\n }\n public async renderInteractive(): Promise<void> {\n let alignPoint: IPoint = this.alignPoint(this);\n let oldFontSize: number = this.controller.fontSize;\n this.controller.fontSize = this.fontSize;\n let oldTextColor: string = this.controller.doc.getTextColor();\n this.controller.doc.setTextColor(this.textColor);\n this.controller.doc.text(this.escapeText(), alignPoint.xLeft, alignPoint.yTop, this.align);\n this.controller.doc.setTextColor(oldTextColor);\n this.controller.fontSize = oldFontSize;\n }\n protected alignPoint(rect: IRect): IPoint {\n return {\n xLeft: this.controller.isRTL ? rect.xRight : rect.xLeft,\n yTop: rect.yTop + (rect.yBot - rect.yTop) / 2.0\n };\n }\n}","import { IQuestion, Question, LocalizableString, Serializer } from 'survey-core';\nimport { SurveyPDF } from '../survey';\nimport { IPoint, DocController } from '../doc_controller';\nimport { FlatSurvey } from './flat_survey';\nimport { IPdfBrick } from '../pdf_render/pdf_brick';\nimport { TextBrick } from '../pdf_render/pdf_text';\nimport { CompositeBrick } from '../pdf_render/pdf_composite';\nimport { SurveyHelper } from '../helper_survey';\n\nexport interface IFlatQuestion {\n generateFlatsContent(point: IPoint): Promise<IPdfBrick[]>;\n generateFlats(point: IPoint): Promise<IPdfBrick[]>;\n}\nexport class FlatQuestion implements IFlatQuestion {\n public static CONTENT_GAP_VERT_SCALE: number = 0.5;\n public static CONTENT_GAP_HOR_SCALE: number = 1.0;\n public static CONTENT_INDENT_SCALE: number = 1.0;\n public static DESC_GAP_SCALE: number = 0.0625;\n protected question: Question;\n public constructor(protected survey: SurveyPDF,\n question: IQuestion, protected controller: DocController) {\n this.question = <Question>question;\n }\n private async generateFlatTitle(point: IPoint): Promise<IPdfBrick> {\n return await SurveyHelper.createTitleFlat(point,\n this.question, this.controller);\n }\n private async generateFlatDescription(point: IPoint): Promise<IPdfBrick> {\n return await SurveyHelper.createDescFlat(point, this.question, this.controller, this.question.locDescription);\n }\n private async generateFlatHeader(point: IPoint): Promise<CompositeBrick> {\n const titleFlat: IPdfBrick = await this.generateFlatTitle(point);\n const compositeFlat: CompositeBrick = new CompositeBrick(titleFlat);\n if(this.question.hasDescriptionUnderTitle) {\n const descPoint: IPoint = SurveyHelper.createPoint(titleFlat, true, false);\n descPoint.yTop += FlatQuestion.DESC_GAP_SCALE * this.controller.unitHeight;\n descPoint.xLeft += this.controller.unitWidth * FlatQuestion.CONTENT_INDENT_SCALE;\n compositeFlat.addBrick(await this.generateFlatDescription(descPoint));\n }\n return compositeFlat;\n }\n private async generateFlatsComment(point: IPoint): Promise<IPdfBrick> {\n const text: LocalizableString = this.question.locCommentText;\n const otherTextFlat: IPdfBrick = await SurveyHelper.createTextFlat(\n point, this.question, this.controller, text, TextBrick);\n