@roqua/quby-frontend 0.11.2 → 0.12.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.
- package/dist/components/AnswerPage.d.ts +1 -2
- package/dist/components/Footer.d.ts +1 -0
- package/dist/components/QuestionDescription.d.ts +3 -4
- package/dist/components/TranslationCurlies.d.ts +8 -0
- package/dist/core/calculations.d.ts +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/quby_context.d.ts +2 -1
- package/dist/core/questionnaire.d.ts +9 -3
- package/dist/core/questionnaire_json.d.ts +9 -22
- package/dist/core/questionnaire_translations_curlies.d.ts +21 -0
- package/dist/core/response.d.ts +9 -1
- package/dist/logic/index.d.ts +1 -0
- package/dist/logic/use_translation_curlies_for.d.ts +2 -0
- package/dist/quby-frontend.es.js +390 -368
- package/dist/stories/_helpers.d.ts +8 -2
- package/package.json +2 -1
- package/dist/components/questions/OldSliderQuestion.d.ts +0 -9
- package/dist/core/curlies_interpolator.d.ts +0 -9
package/dist/quby-frontend.es.js
CHANGED
|
@@ -6651,7 +6651,7 @@ class AlwaysCondition extends BaseCondition {
|
|
|
6651
6651
|
}
|
|
6652
6652
|
class AnsweredCondition extends BaseCondition {
|
|
6653
6653
|
match(response) {
|
|
6654
|
-
const fieldState = response.
|
|
6654
|
+
const fieldState = response.getVisibilityFieldState(this.condition.fieldKey);
|
|
6655
6655
|
if (fieldState.hidden && !this.condition.evenWhenHidden) {
|
|
6656
6656
|
return false;
|
|
6657
6657
|
}
|
|
@@ -6738,7 +6738,6 @@ class Questionnaire {
|
|
|
6738
6738
|
constructor(data) {
|
|
6739
6739
|
__publicField(this, "key");
|
|
6740
6740
|
__publicField(this, "panels");
|
|
6741
|
-
__publicField(this, "footer");
|
|
6742
6741
|
__publicField(this, "questions");
|
|
6743
6742
|
__publicField(this, "validations");
|
|
6744
6743
|
__publicField(this, "visibilityRules");
|
|
@@ -6748,11 +6747,12 @@ class Questionnaire {
|
|
|
6748
6747
|
// type checked on response.
|
|
6749
6748
|
__publicField(this, "cssVars");
|
|
6750
6749
|
__publicField(this, "layoutVersion");
|
|
6750
|
+
__publicField(this, "defaultLanguage");
|
|
6751
|
+
__publicField(this, "translations", {});
|
|
6751
6752
|
__privateAdd(this, _flatOptions, {});
|
|
6752
6753
|
this.key = data.key;
|
|
6753
6754
|
this.questions = data.questions;
|
|
6754
6755
|
this.panels = data.panels;
|
|
6755
|
-
this.footer = data.footer;
|
|
6756
6756
|
this.validations = data.validations;
|
|
6757
6757
|
this.visibilityRules = data.visibilityRules.map((rule) => buildVisibilityRule(rule));
|
|
6758
6758
|
this.textvars = Object.values(data.textvars);
|
|
@@ -6760,6 +6760,8 @@ class Questionnaire {
|
|
|
6760
6760
|
this.defaultAnswerValue = data.defaultAnswerValue;
|
|
6761
6761
|
this.cssVars = data.cssVars;
|
|
6762
6762
|
this.layoutVersion = data.layoutVersion || "v1";
|
|
6763
|
+
this.defaultLanguage = data.language || "nl";
|
|
6764
|
+
this.translations = data.translations;
|
|
6763
6765
|
}
|
|
6764
6766
|
getField(key) {
|
|
6765
6767
|
return this.questions[key];
|
|
@@ -6774,10 +6776,19 @@ class Questionnaire {
|
|
|
6774
6776
|
return [question];
|
|
6775
6777
|
}
|
|
6776
6778
|
}
|
|
6779
|
+
getChildQuestionKeys(questionKey) {
|
|
6780
|
+
const question = this.getField(questionKey);
|
|
6781
|
+
if (question.type === "radio" || question.type === "check_box") {
|
|
6782
|
+
return question.children.flatMap((child) => "questions" in child ? child.questions.map((q) => q.key) : []);
|
|
6783
|
+
} else {
|
|
6784
|
+
return [];
|
|
6785
|
+
}
|
|
6786
|
+
}
|
|
6787
|
+
// get all options for the question, including those in optgroups, excludes other children.
|
|
6777
6788
|
getFlatOptions(questionKey) {
|
|
6778
6789
|
var _a;
|
|
6779
6790
|
const question = this.getField(questionKey);
|
|
6780
|
-
if (question.type !== "select" && question.type !== "radio" && question.type !== "scale") {
|
|
6791
|
+
if (question.type !== "select" && question.type !== "radio" && question.type !== "scale" && question.type !== "check_box") {
|
|
6781
6792
|
throw new Error(`Question ${questionKey} does not have options.`);
|
|
6782
6793
|
}
|
|
6783
6794
|
return (_a = __privateGet(this, _flatOptions))[questionKey] ?? (_a[questionKey] = question.children.flatMap((option_or_group) => {
|
|
@@ -6793,7 +6804,7 @@ class Questionnaire {
|
|
|
6793
6804
|
getOptionNumberValue(questionKey, optionKey) {
|
|
6794
6805
|
var _a;
|
|
6795
6806
|
const option = (_a = this.getFlatOptions(questionKey)) == null ? void 0 : _a.find((opt) => opt.key === optionKey);
|
|
6796
|
-
if (option && typeof option.value === "number") {
|
|
6807
|
+
if (option && "value" in option && typeof option.value === "number") {
|
|
6797
6808
|
return option.value;
|
|
6798
6809
|
} else {
|
|
6799
6810
|
return null;
|
|
@@ -12567,11 +12578,13 @@ const _Calculations = class _Calculations {
|
|
|
12567
12578
|
}
|
|
12568
12579
|
return this.results[key] ?? null;
|
|
12569
12580
|
}
|
|
12570
|
-
|
|
12581
|
+
// returns the keys of the calculations that have changed.
|
|
12582
|
+
handleValueChanged(questionKey) {
|
|
12571
12583
|
var _a;
|
|
12572
|
-
(_a = this.questionKeyToCalculationKeys[
|
|
12584
|
+
(_a = this.questionKeyToCalculationKeys[questionKey]) == null ? void 0 : _a.forEach((calculationKey) => {
|
|
12573
12585
|
delete this.results[calculationKey];
|
|
12574
12586
|
});
|
|
12587
|
+
return this.questionKeyToCalculationKeys[questionKey] ? Array.from(this.questionKeyToCalculationKeys[questionKey]) : [];
|
|
12575
12588
|
}
|
|
12576
12589
|
calculate(calculation) {
|
|
12577
12590
|
return z(calculation).with({ op: "string_value" }, ({ key }) => this.stringValue(key)).with({ op: N.union("number", "number_value", "sum", "subtract", "multiply", "divide", "round") }, this.calculateNumber).with({ op: N.union(...ICalcBooleanOpsSchema.options) }, this.calculateBoolean).exhaustive();
|
|
@@ -12925,6 +12938,12 @@ class Response {
|
|
|
12925
12938
|
__publicField(this, "errors");
|
|
12926
12939
|
__publicField(this, "visibility");
|
|
12927
12940
|
__publicField(this, "changeHandlers");
|
|
12941
|
+
__publicField(this, "questionCallbacks");
|
|
12942
|
+
// useSyncExternalStore callback per question key.
|
|
12943
|
+
// useSyncExternalStore subscribe method for each key. Same method if key use used multiple times.
|
|
12944
|
+
__publicField(this, "subscribeMethods");
|
|
12945
|
+
__publicField(this, "fieldStates");
|
|
12946
|
+
// cache for field states to prevent rerenders.
|
|
12928
12947
|
__publicField(this, "flags");
|
|
12929
12948
|
__publicField(this, "textvars");
|
|
12930
12949
|
__publicField(this, "activeQuestionKey");
|
|
@@ -12936,10 +12955,13 @@ class Response {
|
|
|
12936
12955
|
this.errors = /* @__PURE__ */ new Map();
|
|
12937
12956
|
this.visibility = /* @__PURE__ */ new Map();
|
|
12938
12957
|
this.changeHandlers = [];
|
|
12958
|
+
this.fieldStates = /* @__PURE__ */ new Map();
|
|
12939
12959
|
this.flags = answer.flags;
|
|
12940
12960
|
this.textvars = this.initTextvars(answer.textvars);
|
|
12941
12961
|
this.activeQuestionKey = null;
|
|
12942
12962
|
this.calculations = new Calculations(questionnaire.sexpVariables, this);
|
|
12963
|
+
this.questionCallbacks = /* @__PURE__ */ new Map();
|
|
12964
|
+
this.subscribeMethods = /* @__PURE__ */ new Map();
|
|
12943
12965
|
this.validate();
|
|
12944
12966
|
this.calculateVisibility();
|
|
12945
12967
|
}
|
|
@@ -12962,26 +12984,61 @@ class Response {
|
|
|
12962
12984
|
offChange(callback) {
|
|
12963
12985
|
lodashExports.pull(this.changeHandlers, callback);
|
|
12964
12986
|
}
|
|
12987
|
+
// first argument of useSyncExternalStore
|
|
12988
|
+
subscribeToQuestion(questionKey) {
|
|
12989
|
+
if (!this.subscribeMethods.has(questionKey)) {
|
|
12990
|
+
this.subscribeMethods.set(questionKey, (callback) => {
|
|
12991
|
+
this.questionCallbacks.set(questionKey, callback);
|
|
12992
|
+
return () => {
|
|
12993
|
+
this.questionCallbacks.delete(questionKey);
|
|
12994
|
+
};
|
|
12995
|
+
});
|
|
12996
|
+
}
|
|
12997
|
+
return this.subscribeMethods.get(questionKey);
|
|
12998
|
+
}
|
|
12999
|
+
// Cached, so react can prevent rerenders when nothing changes.
|
|
12965
13000
|
getFieldState(key) {
|
|
12966
|
-
|
|
13001
|
+
if (!this.fieldStates.has(key)) {
|
|
13002
|
+
const errors = this.errors.get(key) || [];
|
|
13003
|
+
this.fieldStates.set(key, {
|
|
13004
|
+
// comment is where the cache is deleted.
|
|
13005
|
+
key,
|
|
13006
|
+
// constant
|
|
13007
|
+
value: this.values[key],
|
|
13008
|
+
// setValue
|
|
13009
|
+
showErrors: this.beenActives.has(key) && !this.isDisabled(key) && errors.length > 0,
|
|
13010
|
+
// setValue, only way to change errors.
|
|
13011
|
+
valid: errors.length === 0,
|
|
13012
|
+
// setValue, only way to change errors.
|
|
13013
|
+
errors,
|
|
13014
|
+
// // setValue, only way to change errors.
|
|
13015
|
+
hidden: !this.isVisible(key),
|
|
13016
|
+
// calculateVisibility when visibity changes.
|
|
13017
|
+
disabled: this.isDisabled(key),
|
|
13018
|
+
// Only for children, setValue also triggers all the children.
|
|
13019
|
+
isActiveQuestion: this.activeQuestionKey === key,
|
|
13020
|
+
// setActiveQuestion
|
|
13021
|
+
setAsActiveQuestion: () => this.setActiveQuestion(key),
|
|
13022
|
+
// constant
|
|
13023
|
+
setValue: (newValue) => this.setValue(key, newValue)
|
|
13024
|
+
// constant
|
|
13025
|
+
});
|
|
13026
|
+
}
|
|
13027
|
+
return this.fieldStates.get(key);
|
|
13028
|
+
}
|
|
13029
|
+
getValidationFieldState(key) {
|
|
12967
13030
|
return {
|
|
12968
|
-
key,
|
|
12969
13031
|
value: this.values[key],
|
|
12970
|
-
|
|
12971
|
-
showErrors: this.beenActives.has(key) && !this.isDisabled(key) && errors.length > 0,
|
|
12972
|
-
valid: errors.length === 0,
|
|
12973
|
-
errors,
|
|
12974
|
-
hidden: !this.isVisible(key),
|
|
12975
|
-
disabled: this.isDisabled(key),
|
|
12976
|
-
isActiveQuestion: this.activeQuestionKey === key,
|
|
12977
|
-
setAsActiveQuestion: () => this.setActiveQuestion(key),
|
|
12978
|
-
setValue: (newValue) => this.setValue(key, newValue)
|
|
13032
|
+
addError: (error) => this.addError(key, error)
|
|
12979
13033
|
};
|
|
12980
13034
|
}
|
|
12981
|
-
|
|
13035
|
+
getVisibilityFieldState(key) {
|
|
12982
13036
|
return {
|
|
12983
13037
|
value: this.values[key],
|
|
12984
|
-
|
|
13038
|
+
hidden: !this.isVisible(key),
|
|
13039
|
+
// calculateVisibility when visibity changes.
|
|
13040
|
+
disabled: this.isDisabled(key)
|
|
13041
|
+
// Only for children, setValue also triggers all the children.
|
|
12985
13042
|
};
|
|
12986
13043
|
}
|
|
12987
13044
|
setTextvar(key, value) {
|
|
@@ -12990,6 +13047,7 @@ class Response {
|
|
|
12990
13047
|
} else {
|
|
12991
13048
|
this.textvars.set(key, this.questionnaire.textvars.find((textvar) => textvar.key === key).default);
|
|
12992
13049
|
}
|
|
13050
|
+
this.changeHandlers.forEach((handler) => handler(this, "textvarChanged", key));
|
|
12993
13051
|
}
|
|
12994
13052
|
// Set to coupled question-value, then to passed textvars, then to default.
|
|
12995
13053
|
// Edits fromServer, since we copied it
|
|
@@ -13013,17 +13071,37 @@ class Response {
|
|
|
13013
13071
|
this.setTextvar(question.setsTextvar, value);
|
|
13014
13072
|
}
|
|
13015
13073
|
this.validate();
|
|
13016
|
-
this.
|
|
13074
|
+
this.handleCalculations(key);
|
|
13017
13075
|
this.calculateVisibility();
|
|
13076
|
+
this.fieldStateChanged(key);
|
|
13018
13077
|
this.changeHandlers.forEach((handler) => handler(this, "valueChanged"));
|
|
13019
13078
|
}
|
|
13079
|
+
// Called on value change, to handle invalidating calculations and then curly strings that depend on those.
|
|
13080
|
+
handleCalculations(questionKey) {
|
|
13081
|
+
this.calculations.handleValueChanged(questionKey).forEach((variableKey) => {
|
|
13082
|
+
this.changeHandlers.forEach((handler) => handler(this, "sexpVariableChanged", variableKey));
|
|
13083
|
+
});
|
|
13084
|
+
}
|
|
13085
|
+
// called on value/active/visibility change, remove cache for question and it children and notify listeners.
|
|
13086
|
+
fieldStateChanged(key) {
|
|
13087
|
+
var _a;
|
|
13088
|
+
this.fieldStates.delete(key);
|
|
13089
|
+
this.questionnaire.getChildQuestionKeys(key).forEach((childKey) => {
|
|
13090
|
+
this.fieldStates.delete(childKey);
|
|
13091
|
+
});
|
|
13092
|
+
(_a = this.questionCallbacks.get(key)) == null ? void 0 : _a();
|
|
13093
|
+
}
|
|
13020
13094
|
setActiveQuestion(key) {
|
|
13021
13095
|
if (this.activeQuestionKey === key) return;
|
|
13022
13096
|
if (this.activeQuestionKey) {
|
|
13023
13097
|
this.touchField(this.activeQuestionKey);
|
|
13024
13098
|
}
|
|
13099
|
+
const oldActive = this.activeQuestionKey;
|
|
13025
13100
|
this.activeQuestionKey = key;
|
|
13026
|
-
|
|
13101
|
+
if (oldActive) this.fieldStateChanged(oldActive);
|
|
13102
|
+
if (this.activeQuestionKey) {
|
|
13103
|
+
this.fieldStateChanged(this.activeQuestionKey);
|
|
13104
|
+
}
|
|
13027
13105
|
}
|
|
13028
13106
|
addError(key, error) {
|
|
13029
13107
|
const questionErrors = this.errors.get(key) || [];
|
|
@@ -13098,22 +13176,25 @@ class Response {
|
|
|
13098
13176
|
// This has to be in order, since those calculations can then cause visibility changes in later questions.
|
|
13099
13177
|
// Dis/enabling question is not yet considered for this.
|
|
13100
13178
|
calculateVisibility() {
|
|
13101
|
-
const
|
|
13102
|
-
|
|
13103
|
-
|
|
13104
|
-
}, {});
|
|
13179
|
+
const rules = this.questionnaire.visibilityRules;
|
|
13180
|
+
if (rules.length === 0) return;
|
|
13181
|
+
const old_visibility = Array.from(this.visibility.keys()).reduce((m2, key) => (m2.set(key, this.isVisible(key)), m2), /* @__PURE__ */ new Map());
|
|
13105
13182
|
this.visibility = /* @__PURE__ */ new Map();
|
|
13106
|
-
let
|
|
13107
|
-
|
|
13108
|
-
|
|
13109
|
-
if (rule.questionKey !== currentQuestionKey) {
|
|
13110
|
-
if (calcDepsVisible[currentQuestionKey] && calcDepsVisible[currentQuestionKey] !== this.isVisible(currentQuestionKey)) {
|
|
13111
|
-
this.calculations.handleValueChanged(currentQuestionKey);
|
|
13112
|
-
}
|
|
13113
|
-
currentQuestionKey = rule.questionKey;
|
|
13114
|
-
}
|
|
13183
|
+
let anyChange = false;
|
|
13184
|
+
rules.forEach((rule, count) => {
|
|
13185
|
+
var _a;
|
|
13115
13186
|
rule.runAgainst(this);
|
|
13187
|
+
if (rule.questionKey !== ((_a = rules[count + 1]) == null ? void 0 : _a.questionKey)) {
|
|
13188
|
+
if (old_visibility.get(rule.questionKey) !== this.isVisible(rule.questionKey)) {
|
|
13189
|
+
this.calculations.handleValueChanged(rule.questionKey);
|
|
13190
|
+
this.fieldStateChanged(rule.questionKey);
|
|
13191
|
+
anyChange = true;
|
|
13192
|
+
}
|
|
13193
|
+
}
|
|
13116
13194
|
});
|
|
13195
|
+
if (anyChange) {
|
|
13196
|
+
this.changeHandlers.forEach((handler) => handler(this, "visibilityChanged"));
|
|
13197
|
+
}
|
|
13117
13198
|
}
|
|
13118
13199
|
markShown(fieldKey) {
|
|
13119
13200
|
const visibility = this.visibility.get(fieldKey) || { shown: false, hidden: false };
|
|
@@ -13167,6 +13248,98 @@ function presenceValue(v2) {
|
|
|
13167
13248
|
}
|
|
13168
13249
|
return v2;
|
|
13169
13250
|
}
|
|
13251
|
+
const TEXTVAR_REGEX = /\{\{((?<type>[a-z_]+)\.(?<textvar>[a-z0-9_]+)|(?<textvaronly>[a-z0-9_]+))\}\}/g;
|
|
13252
|
+
class QuestionnaireTranslationsCurlies {
|
|
13253
|
+
constructor(response, questionnaire, language) {
|
|
13254
|
+
__publicField(this, "response");
|
|
13255
|
+
__publicField(this, "questionnaire");
|
|
13256
|
+
__publicField(this, "keyToInterpolatedString");
|
|
13257
|
+
__publicField(this, "keyToInterpolatedStringArray");
|
|
13258
|
+
__publicField(this, "variableToKeys");
|
|
13259
|
+
__publicField(this, "language");
|
|
13260
|
+
__publicField(this, "translations");
|
|
13261
|
+
// useSyncExternalStore callbacks for each key.
|
|
13262
|
+
__publicField(this, "callbacks");
|
|
13263
|
+
// useSyncExternalStore subscribe method for each key. Same method if key use used multiple times.
|
|
13264
|
+
__publicField(this, "subscribeMethods");
|
|
13265
|
+
this.response = response;
|
|
13266
|
+
this.questionnaire = questionnaire;
|
|
13267
|
+
this.language = language;
|
|
13268
|
+
this.translations = questionnaire.translations[language] || {};
|
|
13269
|
+
this.keyToInterpolatedString = /* @__PURE__ */ new Map();
|
|
13270
|
+
this.keyToInterpolatedStringArray = /* @__PURE__ */ new Map();
|
|
13271
|
+
this.variableToKeys = /* @__PURE__ */ new Map();
|
|
13272
|
+
this.callbacks = /* @__PURE__ */ new Map();
|
|
13273
|
+
this.subscribeMethods = /* @__PURE__ */ new Map();
|
|
13274
|
+
this.fetch = this.fetch.bind(this);
|
|
13275
|
+
this.buildVariableToKeys();
|
|
13276
|
+
this.response.onChange((_response, type, key) => {
|
|
13277
|
+
var _a;
|
|
13278
|
+
if (type === "textvarChanged" || type === "sexpVariableChanged") {
|
|
13279
|
+
(_a = this.variableToKeys.get(key)) == null ? void 0 : _a.forEach((i18nKey) => {
|
|
13280
|
+
var _a2;
|
|
13281
|
+
this.keyToInterpolatedString.delete(i18nKey);
|
|
13282
|
+
(_a2 = this.callbacks.get(i18nKey)) == null ? void 0 : _a2.forEach((callback) => callback());
|
|
13283
|
+
});
|
|
13284
|
+
}
|
|
13285
|
+
});
|
|
13286
|
+
}
|
|
13287
|
+
// first argument to useSyncExternalStore
|
|
13288
|
+
// needs to be the same function ref everytime.
|
|
13289
|
+
subscribeToKey(key) {
|
|
13290
|
+
if (!this.subscribeMethods.has(key)) {
|
|
13291
|
+
this.subscribeMethods.set(key, (callback) => {
|
|
13292
|
+
if (!this.callbacks.has(key)) this.callbacks.set(key, /* @__PURE__ */ new Set());
|
|
13293
|
+
this.callbacks.get(key).add(callback);
|
|
13294
|
+
return () => {
|
|
13295
|
+
this.callbacks.get(key).delete(callback);
|
|
13296
|
+
};
|
|
13297
|
+
});
|
|
13298
|
+
}
|
|
13299
|
+
return this.subscribeMethods.get(key);
|
|
13300
|
+
}
|
|
13301
|
+
fetch(key) {
|
|
13302
|
+
if (!this.keyToInterpolatedString.has(key)) {
|
|
13303
|
+
if (!this.translations[key]) return void 0;
|
|
13304
|
+
this.keyToInterpolatedString.set(key, this.interpolateCurlies(this.translations[key]));
|
|
13305
|
+
}
|
|
13306
|
+
return this.keyToInterpolatedString.get(key);
|
|
13307
|
+
}
|
|
13308
|
+
// TODO: change array whenever any of the values changes.
|
|
13309
|
+
// only used for sliders right now, that did not support variables anyway.
|
|
13310
|
+
fetchArray(key) {
|
|
13311
|
+
if (!this.keyToInterpolatedStringArray.has(key)) {
|
|
13312
|
+
const array = [];
|
|
13313
|
+
for (let index = 0; ; index++) {
|
|
13314
|
+
const interpolated = this.fetch(`${key}.${index}`);
|
|
13315
|
+
if (interpolated === void 0) break;
|
|
13316
|
+
array.push(interpolated);
|
|
13317
|
+
}
|
|
13318
|
+
this.keyToInterpolatedStringArray.set(key, array);
|
|
13319
|
+
}
|
|
13320
|
+
return this.keyToInterpolatedStringArray.get(key);
|
|
13321
|
+
}
|
|
13322
|
+
interpolateCurlies(str) {
|
|
13323
|
+
return str.replace(TEXTVAR_REGEX, (...args) => {
|
|
13324
|
+
var _a;
|
|
13325
|
+
const { type, textvar, textvaronly } = args[args.length - 1];
|
|
13326
|
+
const value = type === "calculation" ? (_a = this.response.calculations.getResult(textvar)) == null ? void 0 : _a.toString() : this.response.textvars.get(`${this.questionnaire.key}_${textvar || textvaronly}`);
|
|
13327
|
+
return lodashExports.escape(value || "");
|
|
13328
|
+
});
|
|
13329
|
+
}
|
|
13330
|
+
buildVariableToKeys() {
|
|
13331
|
+
for (const [key, value] of Object.entries(this.translations)) {
|
|
13332
|
+
Array.from(value.matchAll(TEXTVAR_REGEX)).forEach((match) => {
|
|
13333
|
+
const { type, textvar, textvaronly } = match.groups;
|
|
13334
|
+
const variable = type === "calculation" ? textvar : `${this.questionnaire.key}_${textvar || textvaronly}`;
|
|
13335
|
+
if (!this.variableToKeys.has(variable)) {
|
|
13336
|
+
this.variableToKeys.set(variable, []);
|
|
13337
|
+
}
|
|
13338
|
+
this.variableToKeys.get(variable).push(key);
|
|
13339
|
+
});
|
|
13340
|
+
}
|
|
13341
|
+
}
|
|
13342
|
+
}
|
|
13170
13343
|
const defaultQuestionnaire = new Questionnaire({
|
|
13171
13344
|
key: "test",
|
|
13172
13345
|
title: "test",
|
|
@@ -13175,13 +13348,19 @@ const defaultQuestionnaire = new Questionnaire({
|
|
|
13175
13348
|
questions: {},
|
|
13176
13349
|
visibilityRules: [],
|
|
13177
13350
|
textvars: {},
|
|
13178
|
-
validations: []
|
|
13351
|
+
validations: [],
|
|
13352
|
+
translations: {}
|
|
13179
13353
|
});
|
|
13180
13354
|
const defaultResponse = new Response(defaultQuestionnaire, {
|
|
13181
13355
|
value: {},
|
|
13182
13356
|
flags: {},
|
|
13183
13357
|
textvars: /* @__PURE__ */ new Map()
|
|
13184
13358
|
});
|
|
13359
|
+
const defaultQuestionnaireTranslationsCurlies = new QuestionnaireTranslationsCurlies(
|
|
13360
|
+
defaultResponse,
|
|
13361
|
+
defaultQuestionnaire,
|
|
13362
|
+
"nl"
|
|
13363
|
+
);
|
|
13185
13364
|
const defaultDisplayOptions = {
|
|
13186
13365
|
displayMode: "paged",
|
|
13187
13366
|
darkMode: false,
|
|
@@ -13193,7 +13372,8 @@ const QubyContext = React__default.createContext({
|
|
|
13193
13372
|
questionnaire: defaultQuestionnaire,
|
|
13194
13373
|
response: defaultResponse,
|
|
13195
13374
|
setQuestionRef: defaultSetQuestionRef,
|
|
13196
|
-
displayOptions: defaultDisplayOptions
|
|
13375
|
+
displayOptions: defaultDisplayOptions,
|
|
13376
|
+
translationsCurlies: defaultQuestionnaireTranslationsCurlies
|
|
13197
13377
|
});
|
|
13198
13378
|
class ResponseParseError extends Error {
|
|
13199
13379
|
}
|
|
@@ -13252,32 +13432,6 @@ const parseMultiSelectAnswer = (answer, question) => {
|
|
|
13252
13432
|
});
|
|
13253
13433
|
return answerSet;
|
|
13254
13434
|
};
|
|
13255
|
-
const TEXTVAR_REGEX = /\{\{((?<type>[a-z_]+)\.(?<textvar>[a-z0-9_]+)|(?<textvaronly>[a-z0-9_]+))\}\}/g;
|
|
13256
|
-
class CurliesInterpolator {
|
|
13257
|
-
constructor(response, questionnaire) {
|
|
13258
|
-
__publicField(this, "response");
|
|
13259
|
-
__publicField(this, "questionnaire");
|
|
13260
|
-
__publicField(this, "stringToVariables");
|
|
13261
|
-
this.response = response;
|
|
13262
|
-
this.questionnaire = questionnaire;
|
|
13263
|
-
this.stringToVariables = /* @__PURE__ */ new Map();
|
|
13264
|
-
this.interpolateCurlies = this.interpolateCurlies.bind(this);
|
|
13265
|
-
}
|
|
13266
|
-
interpolateCurlies(str) {
|
|
13267
|
-
if (!this.stringToVariables.has(str)) {
|
|
13268
|
-
this.stringToVariables.set(str, Array.from(str.matchAll(TEXTVAR_REGEX)).map((match) => match.groups.textvar));
|
|
13269
|
-
}
|
|
13270
|
-
if (this.stringToVariables.get(str).length == 0) {
|
|
13271
|
-
return str;
|
|
13272
|
-
}
|
|
13273
|
-
return str.replace(TEXTVAR_REGEX, (...args) => {
|
|
13274
|
-
var _a;
|
|
13275
|
-
const { type, textvar, textvaronly } = args[args.length - 1];
|
|
13276
|
-
const value = type === "calculation" ? (_a = this.response.calculations.getResult(textvar)) == null ? void 0 : _a.toString() : this.response.textvars.get(`${this.questionnaire.key}_${textvar || textvaronly}`);
|
|
13277
|
-
return lodashExports.escape(value || "");
|
|
13278
|
-
});
|
|
13279
|
-
}
|
|
13280
|
-
}
|
|
13281
13435
|
var classnames = { exports: {} };
|
|
13282
13436
|
/*!
|
|
13283
13437
|
Copyright (c) 2018 Jed Watson.
|
|
@@ -13438,6 +13592,22 @@ const ALLOWED_CSS_VARS = [
|
|
|
13438
13592
|
"question-mb-factor"
|
|
13439
13593
|
];
|
|
13440
13594
|
const mapCssVars = (cssVars) => cssVars && lodashExports.mapKeys(lodashExports.pick(cssVars, ALLOWED_CSS_VARS), (_2, key) => `--${key}`);
|
|
13595
|
+
const useTranslationCurliesFor = (i18nKey) => {
|
|
13596
|
+
const { translationsCurlies } = React__default.useContext(QubyContext);
|
|
13597
|
+
const interpolatedString = React__default.useSyncExternalStore(
|
|
13598
|
+
translationsCurlies.subscribeToKey(i18nKey),
|
|
13599
|
+
() => translationsCurlies.fetch(i18nKey)
|
|
13600
|
+
);
|
|
13601
|
+
return interpolatedString;
|
|
13602
|
+
};
|
|
13603
|
+
const useTranslationCurliesArrayFor = (i18nKey) => {
|
|
13604
|
+
const { translationsCurlies } = React__default.useContext(QubyContext);
|
|
13605
|
+
const interpolatedStringArray = React__default.useSyncExternalStore(
|
|
13606
|
+
translationsCurlies.subscribeToKey(i18nKey),
|
|
13607
|
+
() => translationsCurlies.fetchArray(i18nKey)
|
|
13608
|
+
);
|
|
13609
|
+
return interpolatedStringArray;
|
|
13610
|
+
};
|
|
13441
13611
|
const ProgressBar = ({
|
|
13442
13612
|
max,
|
|
13443
13613
|
current
|
|
@@ -13472,40 +13642,42 @@ const ProgressBar = ({
|
|
|
13472
13642
|
] }) });
|
|
13473
13643
|
};
|
|
13474
13644
|
const HtmlItem = ({ item }) => {
|
|
13475
|
-
const
|
|
13476
|
-
|
|
13645
|
+
const html = useTranslationCurliesFor(`${item.key}`);
|
|
13646
|
+
if (!html) throw new Error(`HtmlItem with key ${item.key} has no translation`);
|
|
13647
|
+
return /* @__PURE__ */ jsx("div", { className: "item", children: /* @__PURE__ */ jsx("div", { className: "prose text", dangerouslySetInnerHTML: { __html: html } }) });
|
|
13477
13648
|
};
|
|
13478
13649
|
const MainLabel = ({ question }) => {
|
|
13479
|
-
const
|
|
13480
|
-
if (!
|
|
13481
|
-
const titleText = interpolateCurlies(question.title);
|
|
13650
|
+
const titleText = useTranslationCurliesFor(`${question.key}.title`);
|
|
13651
|
+
if (!titleText) return null;
|
|
13482
13652
|
const labelFor = `answer_${question.key}`;
|
|
13483
|
-
|
|
13484
|
-
return /* @__PURE__ */ jsx("div", { className: `${mb} main`, children: /* @__PURE__ */ jsx("label", { htmlFor: labelFor, dangerouslySetInnerHTML: { __html: titleText } }) });
|
|
13653
|
+
return /* @__PURE__ */ jsx("div", { className: "main", children: /* @__PURE__ */ jsx("label", { htmlFor: labelFor, dangerouslySetInnerHTML: { __html: titleText } }) });
|
|
13485
13654
|
};
|
|
13486
13655
|
const QuestionDescription = (props) => {
|
|
13487
|
-
const
|
|
13488
|
-
if (!
|
|
13489
|
-
const description = interpolateCurlies(props.question.description);
|
|
13656
|
+
const description = useTranslationCurliesFor(`${props.question.key}.description`);
|
|
13657
|
+
if (!description) return null;
|
|
13490
13658
|
return /* @__PURE__ */ jsx("div", { className: "font-light description prose", dangerouslySetInnerHTML: { __html: description } });
|
|
13491
13659
|
};
|
|
13492
13660
|
const ValidationErrors = ({ fieldState }) => {
|
|
13493
13661
|
if (!fieldState.showErrors) return null;
|
|
13494
|
-
return /* @__PURE__ */ jsx(Fragment, { children: fieldState.errors.map((error) => /* @__PURE__ */ jsx(Error$1, { error }, error.type)) });
|
|
13662
|
+
return /* @__PURE__ */ jsx(Fragment, { children: fieldState.errors.map((error) => /* @__PURE__ */ jsx(Error$1, { error, fieldKey: fieldState.key }, error.type)) });
|
|
13495
13663
|
};
|
|
13496
|
-
const Error$1 = ({ error }) => {
|
|
13664
|
+
const Error$1 = ({ error, fieldKey }) => {
|
|
13497
13665
|
const className = classNames("error", error.type);
|
|
13498
|
-
const message = useMessageAsString(error
|
|
13666
|
+
const message = useMessageAsString(error, fieldKey);
|
|
13499
13667
|
return /* @__PURE__ */ jsx("div", { className, children: message });
|
|
13500
13668
|
};
|
|
13501
|
-
function useMessageAsString(
|
|
13669
|
+
function useMessageAsString(error, fieldKey) {
|
|
13502
13670
|
const { t: t2 } = useTranslation();
|
|
13503
|
-
|
|
13504
|
-
|
|
13671
|
+
const tMessage = useTranslationCurliesFor(`${fieldKey}.validation.${error.type}.explanation`);
|
|
13672
|
+
if (tMessage) {
|
|
13673
|
+
return tMessage;
|
|
13674
|
+
} else if (typeof error.message === "string") {
|
|
13675
|
+
return error.message;
|
|
13676
|
+
} else {
|
|
13677
|
+
const args = { ...error.message };
|
|
13678
|
+
delete args.t;
|
|
13679
|
+
return t2(`validations.${error.message.t}`, args);
|
|
13505
13680
|
}
|
|
13506
|
-
const args = { ...message };
|
|
13507
|
-
delete args.t;
|
|
13508
|
-
return t2(`validations.${message.t}`, args);
|
|
13509
13681
|
}
|
|
13510
13682
|
const QuestionWrapper = (props) => {
|
|
13511
13683
|
const { question, fieldState, setQuestionRef } = props;
|
|
@@ -13517,16 +13689,17 @@ const QuestionWrapper = (props) => {
|
|
|
13517
13689
|
indent: (question.indent || 0) > 0
|
|
13518
13690
|
});
|
|
13519
13691
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13520
|
-
|
|
13692
|
+
/* @__PURE__ */ jsx(ContextDescriptionItem, { i18nKey: `${question.key}.context_description` }),
|
|
13521
13693
|
/* @__PURE__ */ jsxs("div", { className, ref: questionRef, style: mapCssVars(question.cssVars), children: [
|
|
13522
13694
|
/* @__PURE__ */ jsx(ValidationErrors, { fieldState }),
|
|
13523
13695
|
props.children
|
|
13524
13696
|
] })
|
|
13525
13697
|
] });
|
|
13526
13698
|
};
|
|
13527
|
-
const ContextDescriptionItem = ({
|
|
13528
|
-
const
|
|
13529
|
-
|
|
13699
|
+
const ContextDescriptionItem = ({ i18nKey }) => {
|
|
13700
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
13701
|
+
if (!interpolatedString) return null;
|
|
13702
|
+
return /* @__PURE__ */ jsx("div", { className: "context-description prose", dangerouslySetInnerHTML: { __html: interpolatedString } });
|
|
13530
13703
|
};
|
|
13531
13704
|
const StringQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
13532
13705
|
var _a;
|
|
@@ -13618,15 +13791,14 @@ const Option$4 = ({ question, option, index, fieldState }) => {
|
|
|
13618
13791
|
onFocus: fieldState.setAsActiveQuestion
|
|
13619
13792
|
}
|
|
13620
13793
|
),
|
|
13621
|
-
/* @__PURE__ */ jsx(ShowDescription$1, { option })
|
|
13794
|
+
/* @__PURE__ */ jsx(ShowDescription$1, { question, option })
|
|
13622
13795
|
] })
|
|
13623
13796
|
] });
|
|
13624
13797
|
};
|
|
13625
|
-
const ShowDescription$1 = ({ option }) => {
|
|
13626
|
-
const
|
|
13627
|
-
|
|
13628
|
-
|
|
13629
|
-
return /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: interpolateCurlies(description) } }) });
|
|
13798
|
+
const ShowDescription$1 = ({ question, option }) => {
|
|
13799
|
+
const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
|
|
13800
|
+
if (!label) return null;
|
|
13801
|
+
return /* @__PURE__ */ jsx("label", { htmlFor: option.viewId, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) });
|
|
13630
13802
|
};
|
|
13631
13803
|
const ShowValue$2 = ({ question, option }) => {
|
|
13632
13804
|
if (!question.showValues) return null;
|
|
@@ -13654,14 +13826,7 @@ const RadioQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
13654
13826
|
fieldState
|
|
13655
13827
|
},
|
|
13656
13828
|
child.key
|
|
13657
|
-
) : /* @__PURE__ */ jsx(
|
|
13658
|
-
"div",
|
|
13659
|
-
{
|
|
13660
|
-
className: "inner-title",
|
|
13661
|
-
dangerouslySetInnerHTML: { __html: child.html }
|
|
13662
|
-
},
|
|
13663
|
-
child.key
|
|
13664
|
-
)) })
|
|
13829
|
+
) : /* @__PURE__ */ jsx(InnerTitle$1, { i18nKey: `${question.key}.${child.key}.html` }, child.key)) })
|
|
13665
13830
|
] })
|
|
13666
13831
|
] });
|
|
13667
13832
|
};
|
|
@@ -13697,18 +13862,22 @@ const Option$3 = ({ question, option, fieldState }) => {
|
|
|
13697
13862
|
}
|
|
13698
13863
|
) }),
|
|
13699
13864
|
/* @__PURE__ */ jsx(ShowValue$1, { question, option }),
|
|
13700
|
-
/* @__PURE__ */ jsx(ShowDescription, { option }),
|
|
13865
|
+
/* @__PURE__ */ jsx(ShowDescription, { question, option }),
|
|
13701
13866
|
/* @__PURE__ */ jsx(SubQuestions, { questions: option.questions })
|
|
13702
13867
|
] });
|
|
13703
13868
|
};
|
|
13704
|
-
const
|
|
13705
|
-
const
|
|
13706
|
-
if (!
|
|
13707
|
-
|
|
13708
|
-
|
|
13869
|
+
const InnerTitle$1 = ({ i18nKey }) => {
|
|
13870
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
13871
|
+
if (!interpolatedString) return null;
|
|
13872
|
+
return /* @__PURE__ */ jsx("div", { className: "inner-title", dangerouslySetInnerHTML: { __html: interpolatedString } });
|
|
13873
|
+
};
|
|
13874
|
+
const ShowDescription = ({ question, option }) => {
|
|
13875
|
+
const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
|
|
13876
|
+
const description = useTranslationCurliesFor(`${question.key}.${option.key}.description`);
|
|
13877
|
+
if (!label) return null;
|
|
13709
13878
|
return /* @__PURE__ */ jsxs("div", { className: "inline labelwrapper", children: [
|
|
13710
|
-
/* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html:
|
|
13711
|
-
description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html:
|
|
13879
|
+
/* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) }),
|
|
13880
|
+
description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: description } })
|
|
13712
13881
|
] });
|
|
13713
13882
|
};
|
|
13714
13883
|
const ShowValue$1 = ({ question, option }) => {
|
|
@@ -13737,20 +13906,27 @@ const SelectQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
13737
13906
|
id: `answer_${question.key}`,
|
|
13738
13907
|
name: question.key,
|
|
13739
13908
|
children: [
|
|
13740
|
-
|
|
13741
|
-
question.children.map((child) => child.type === "optgroup" ? /* @__PURE__ */ jsx(Optgroup, {
|
|
13909
|
+
/* @__PURE__ */ jsx(Placeholder, { i18nKey: `${question.key}.placeholder` }),
|
|
13910
|
+
question.children.map((child) => child.type === "optgroup" ? /* @__PURE__ */ jsx(Optgroup, { question, optgroup: child, fieldState }, child.key) : /* @__PURE__ */ jsx(Option$2, { question, option: child, fieldState }, child.key))
|
|
13742
13911
|
]
|
|
13743
13912
|
}
|
|
13744
13913
|
) })
|
|
13745
13914
|
] })
|
|
13746
13915
|
] });
|
|
13747
13916
|
};
|
|
13748
|
-
const
|
|
13749
|
-
|
|
13917
|
+
const Placeholder = ({ i18nKey }) => {
|
|
13918
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
13919
|
+
if (!interpolatedString) return null;
|
|
13920
|
+
return /* @__PURE__ */ jsx("option", { className: "placeholder", children: interpolatedString }, "placeholder");
|
|
13921
|
+
};
|
|
13922
|
+
const Optgroup = ({ question, optgroup, fieldState }) => {
|
|
13923
|
+
const label = useTranslationCurliesFor(`${question.key}.${optgroup.key}.label`);
|
|
13924
|
+
return /* @__PURE__ */ jsx("optgroup", { label, children: optgroup.options.map((option) => /* @__PURE__ */ jsx(Option$2, { question, option, fieldState }, option.key)) });
|
|
13750
13925
|
};
|
|
13751
|
-
const Option$2 = ({ option, fieldState }) => {
|
|
13926
|
+
const Option$2 = ({ question, option, fieldState }) => {
|
|
13927
|
+
const interpolatedString = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
|
|
13752
13928
|
if (option.hidden && fieldState.value !== option.key) return null;
|
|
13753
|
-
return /* @__PURE__ */ jsx("option", { value: option.key, disabled: false, children:
|
|
13929
|
+
return /* @__PURE__ */ jsx("option", { value: option.key, disabled: false, children: interpolatedString });
|
|
13754
13930
|
};
|
|
13755
13931
|
function htmlId$7(question) {
|
|
13756
13932
|
return `answer_${question.key}_input`;
|
|
@@ -13769,6 +13945,7 @@ const DatePartsQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
13769
13945
|
};
|
|
13770
13946
|
const DateParts = ({ question, parts, fieldState }) => {
|
|
13771
13947
|
const { t: t2 } = useTranslation();
|
|
13948
|
+
const questionTitle = useTranslationCurliesFor(`${question.key}.title`);
|
|
13772
13949
|
const handleChange = (event, component) => {
|
|
13773
13950
|
const newValue = new Map(fieldState.value || []);
|
|
13774
13951
|
const componentValue = event.target.value.trim();
|
|
@@ -13797,7 +13974,7 @@ const DateParts = ({ question, parts, fieldState }) => {
|
|
|
13797
13974
|
{
|
|
13798
13975
|
id: `answer_${question.key}_${datePart.part}`,
|
|
13799
13976
|
name: `${question.key}_${datePart.part}`,
|
|
13800
|
-
"aria-label": `${
|
|
13977
|
+
"aria-label": `${questionTitle} ${t2(datePart.part)}`,
|
|
13801
13978
|
type: "text",
|
|
13802
13979
|
className: "me-1",
|
|
13803
13980
|
value: ((_a = fieldState.value) == null ? void 0 : _a.get(datePart.part)) || "",
|
|
@@ -14886,14 +15063,15 @@ const LABEL_MX = 16;
|
|
|
14886
15063
|
const LABEL_ROW_SPACING = 4;
|
|
14887
15064
|
const LABEL_BORDER = 1;
|
|
14888
15065
|
const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
15066
|
+
const labels = useTranslationCurliesArrayFor(question.labelsI18nKey || `${question.key}.labels`) || [];
|
|
14889
15067
|
const handleChange = (newValues) => {
|
|
14890
15068
|
fieldState.setValue(newValues[0]);
|
|
14891
15069
|
};
|
|
14892
15070
|
const parentRef = React__default.useRef(null);
|
|
14893
|
-
const labelPositioning = useLabelPositioning(
|
|
15071
|
+
const labelPositioning = useLabelPositioning(labels, parentRef);
|
|
14894
15072
|
const blank = fieldState.value == null;
|
|
14895
15073
|
const value = fieldState.value ?? question.defaultPosition;
|
|
14896
|
-
const markerLabels = calculateMarkerLabels
|
|
15074
|
+
const markerLabels = calculateMarkerLabels(question, labels);
|
|
14897
15075
|
return /* @__PURE__ */ jsxs(QuestionWrapper, { question, fieldState, setQuestionRef, children: [
|
|
14898
15076
|
/* @__PURE__ */ jsx(MainLabel, { question }),
|
|
14899
15077
|
/* @__PURE__ */ jsxs("div", { className: "description-and-fields", dir: "ltr", children: [
|
|
@@ -14907,8 +15085,8 @@ const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
14907
15085
|
max: question.maximum,
|
|
14908
15086
|
step: question.step,
|
|
14909
15087
|
disabled: fieldState.disabled,
|
|
14910
|
-
renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles
|
|
14911
|
-
renderThumb: (thumbProps) => renderThumb
|
|
15088
|
+
renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles }, children }),
|
|
15089
|
+
renderThumb: (thumbProps) => renderThumb({
|
|
14912
15090
|
...thumbProps,
|
|
14913
15091
|
id: `answer_${question.key}`,
|
|
14914
15092
|
blank: blank || fieldState.disabled,
|
|
@@ -14917,13 +15095,13 @@ const SliderQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
14917
15095
|
isActiveQuestion: fieldState.isActiveQuestion,
|
|
14918
15096
|
onFocus: fieldState.setAsActiveQuestion
|
|
14919
15097
|
}),
|
|
14920
|
-
renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark
|
|
15098
|
+
renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark(props, markerLabels[index], labelPositioning) : null
|
|
14921
15099
|
}
|
|
14922
15100
|
) })
|
|
14923
15101
|
] })
|
|
14924
15102
|
] });
|
|
14925
15103
|
};
|
|
14926
|
-
const renderThumb
|
|
15104
|
+
const renderThumb = ({ props, id, value, isDragged, blank, showTooltip, startThumbHidden, isActiveQuestion, onFocus }) => {
|
|
14927
15105
|
if (startThumbHidden && blank) {
|
|
14928
15106
|
return /* @__PURE__ */ createElement("div", { ...props, key: props.key, onFocus });
|
|
14929
15107
|
}
|
|
@@ -14936,10 +15114,10 @@ const renderThumb$1 = ({ props, id, value, isDragged, blank, showTooltip, startT
|
|
|
14936
15114
|
key: props.key,
|
|
14937
15115
|
style: {
|
|
14938
15116
|
...props.style,
|
|
14939
|
-
...baseThumbStyles
|
|
14940
|
-
...isDragged && isDraggedThumbStyles
|
|
15117
|
+
...baseThumbStyles,
|
|
15118
|
+
...isDragged && isDraggedThumbStyles,
|
|
14941
15119
|
...isActiveQuestion && activeThumbStyles,
|
|
14942
|
-
...blank && invalidThumbStyles
|
|
15120
|
+
...blank && invalidThumbStyles
|
|
14943
15121
|
},
|
|
14944
15122
|
onFocus
|
|
14945
15123
|
},
|
|
@@ -14950,10 +15128,10 @@ const renderThumb$1 = ({ props, id, value, isDragged, blank, showTooltip, startT
|
|
|
14950
15128
|
border: "1px solid oklch(var(--foreground))",
|
|
14951
15129
|
borderWidth: "0 1px 0 1px"
|
|
14952
15130
|
} }),
|
|
14953
|
-
showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles
|
|
15131
|
+
showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles, children: value })
|
|
14954
15132
|
);
|
|
14955
15133
|
};
|
|
14956
|
-
const renderMark
|
|
15134
|
+
const renderMark = (props, label, { info, setRef }) => {
|
|
14957
15135
|
const top = LABEL_MIN_ARROW_HEIGHT + (info.tops[label.idx] || 0);
|
|
14958
15136
|
const labelBorderRadius = label.first ? "0 4px 4px" : label.last ? "4px 0 4px 4px" : "4px";
|
|
14959
15137
|
return /* @__PURE__ */ createElement(
|
|
@@ -15007,24 +15185,25 @@ const LabelArrow = ({ top, label }) => {
|
|
|
15007
15185
|
/* @__PURE__ */ jsx("path", { d: arrow, fill: "oklch(var(--slider-track))", strokeLinecap: "square", stroke: "oklch(var(--foreground))" })
|
|
15008
15186
|
] }) });
|
|
15009
15187
|
};
|
|
15010
|
-
const calculateMarkerLabels
|
|
15011
|
-
if (question.labels.length === 0) return {};
|
|
15188
|
+
const calculateMarkerLabels = (question, labels) => {
|
|
15012
15189
|
const nroMarkers = (question.maximum - question.minimum) / question.step;
|
|
15190
|
+
if (labels.length === 0) return {};
|
|
15191
|
+
if (labels.length === 1) return { [Math.floor(nroMarkers / 2)]: { text: labels[0], first: false, last: false, idx: 0 } };
|
|
15013
15192
|
const markerLabels = {};
|
|
15014
|
-
|
|
15015
|
-
const markerIdx = Math.floor(idx * nroMarkers / (
|
|
15016
|
-
markerLabels[markerIdx] = { text: label, first: idx === 0, last: idx ===
|
|
15193
|
+
labels.forEach((label, idx) => {
|
|
15194
|
+
const markerIdx = Math.floor(idx * nroMarkers / (labels.length - 1));
|
|
15195
|
+
markerLabels[markerIdx] = { text: label, first: idx === 0, last: idx === labels.length - 1, idx };
|
|
15017
15196
|
});
|
|
15018
15197
|
return markerLabels;
|
|
15019
15198
|
};
|
|
15020
|
-
const trackStyles
|
|
15199
|
+
const trackStyles = {
|
|
15021
15200
|
border: `${TRACK_BORDER}px solid oklch(var(--foreground))`,
|
|
15022
15201
|
background: "oklch(var(--slider-track))",
|
|
15023
15202
|
height: TRACK_HEIGHT,
|
|
15024
15203
|
borderRadius: "2px",
|
|
15025
15204
|
marginBottom: "18px"
|
|
15026
15205
|
};
|
|
15027
|
-
const baseThumbStyles
|
|
15206
|
+
const baseThumbStyles = {
|
|
15028
15207
|
height: "28px",
|
|
15029
15208
|
width: "34px",
|
|
15030
15209
|
backgroundColor: "oklch(var(--background))",
|
|
@@ -15034,16 +15213,16 @@ const baseThumbStyles$1 = {
|
|
|
15034
15213
|
const activeThumbStyles = {
|
|
15035
15214
|
backgroundColor: "rgba(27,124,194,0.7)"
|
|
15036
15215
|
};
|
|
15037
|
-
const isDraggedThumbStyles
|
|
15216
|
+
const isDraggedThumbStyles = {
|
|
15038
15217
|
boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB"
|
|
15039
15218
|
};
|
|
15040
|
-
const invalidThumbStyles
|
|
15219
|
+
const invalidThumbStyles = {
|
|
15041
15220
|
backgroundColor: "transparent",
|
|
15042
15221
|
border: "none",
|
|
15043
15222
|
padding: "1px",
|
|
15044
15223
|
boxShadow: "inset 0 0 1px oklch(var(--foreground)), inset 0 1px 7px oklch(var(--foreground) / 0.5), 0 3px 6px -3px oklch(var(--foreground) / 0.3)"
|
|
15045
15224
|
};
|
|
15046
|
-
const labelStyles
|
|
15225
|
+
const labelStyles = {
|
|
15047
15226
|
position: "absolute",
|
|
15048
15227
|
top: "-29px",
|
|
15049
15228
|
left: "16px",
|
|
@@ -15134,136 +15313,6 @@ function maxHeight(nodes) {
|
|
|
15134
15313
|
function overlaps(nodes) {
|
|
15135
15314
|
return nodes.some((node, idx) => idx > 0 && node.getBoundingClientRect().left - LABEL_MX < nodes[idx - 1].getBoundingClientRect().right);
|
|
15136
15315
|
}
|
|
15137
|
-
const OldSliderQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
15138
|
-
const handleChange = (newValues) => {
|
|
15139
|
-
fieldState.setValue(newValues[0]);
|
|
15140
|
-
};
|
|
15141
|
-
const blank = fieldState.value == null;
|
|
15142
|
-
const value = fieldState.value || question.defaultPosition;
|
|
15143
|
-
const markerLabels = calculateMarkerLabels(question);
|
|
15144
|
-
return /* @__PURE__ */ jsxs(QuestionWrapper, { question, fieldState, setQuestionRef, children: [
|
|
15145
|
-
/* @__PURE__ */ jsx(MainLabel, { question }),
|
|
15146
|
-
/* @__PURE__ */ jsxs("div", { className: "description-and-fields", children: [
|
|
15147
|
-
/* @__PURE__ */ jsx(QuestionDescription, { question }),
|
|
15148
|
-
/* @__PURE__ */ jsx("div", { className: "fields mt-3", children: /* @__PURE__ */ jsx(
|
|
15149
|
-
libExports.Range,
|
|
15150
|
-
{
|
|
15151
|
-
values: [value],
|
|
15152
|
-
onChange: handleChange,
|
|
15153
|
-
min: question.minimum,
|
|
15154
|
-
max: question.maximum,
|
|
15155
|
-
step: question.step,
|
|
15156
|
-
disabled: fieldState.disabled,
|
|
15157
|
-
renderTrack: ({ props, children }) => /* @__PURE__ */ jsx("div", { ...props, style: { ...props.style, ...trackStyles }, children }),
|
|
15158
|
-
renderThumb: (thumbProps) => renderThumb({
|
|
15159
|
-
...thumbProps,
|
|
15160
|
-
blank: blank || fieldState.disabled,
|
|
15161
|
-
showTooltip: question.valueTooltip,
|
|
15162
|
-
startThumbHidden: question.startThumbHidden,
|
|
15163
|
-
onFocus: fieldState.setAsActiveQuestion
|
|
15164
|
-
}),
|
|
15165
|
-
renderMark: ({ props, index }) => markerLabels[index] !== void 0 ? renderMark(props, markerLabels[index]) : null
|
|
15166
|
-
}
|
|
15167
|
-
) })
|
|
15168
|
-
] })
|
|
15169
|
-
] });
|
|
15170
|
-
};
|
|
15171
|
-
const renderThumb = ({ props, value, isDragged, blank, showTooltip, startThumbHidden, onFocus }) => {
|
|
15172
|
-
if (startThumbHidden && blank) {
|
|
15173
|
-
return /* @__PURE__ */ jsx("div", { ...props });
|
|
15174
|
-
}
|
|
15175
|
-
return /* @__PURE__ */ jsxs(
|
|
15176
|
-
"div",
|
|
15177
|
-
{
|
|
15178
|
-
...props,
|
|
15179
|
-
style: {
|
|
15180
|
-
...props.style,
|
|
15181
|
-
...baseThumbStyles,
|
|
15182
|
-
...isDragged && isDraggedThumbStyles,
|
|
15183
|
-
...blank && invalidThumbStyles
|
|
15184
|
-
},
|
|
15185
|
-
onFocus,
|
|
15186
|
-
children: [
|
|
15187
|
-
"||",
|
|
15188
|
-
showTooltip && isDragged && /* @__PURE__ */ jsx("div", { style: labelStyles, children: value })
|
|
15189
|
-
]
|
|
15190
|
-
}
|
|
15191
|
-
);
|
|
15192
|
-
};
|
|
15193
|
-
const renderMark = (props, label) => /* @__PURE__ */ jsx(
|
|
15194
|
-
"div",
|
|
15195
|
-
{
|
|
15196
|
-
...props,
|
|
15197
|
-
style: {
|
|
15198
|
-
...props.style,
|
|
15199
|
-
top: "18px",
|
|
15200
|
-
marginTop: 0,
|
|
15201
|
-
// override from props.style
|
|
15202
|
-
height: "9px",
|
|
15203
|
-
width: "1px",
|
|
15204
|
-
backgroundColor: "#d3d3d3"
|
|
15205
|
-
},
|
|
15206
|
-
children: /* @__PURE__ */ jsx(
|
|
15207
|
-
"div",
|
|
15208
|
-
{
|
|
15209
|
-
style: {
|
|
15210
|
-
position: "absolute",
|
|
15211
|
-
top: "8px",
|
|
15212
|
-
width: "max-content",
|
|
15213
|
-
textAlign: label.first ? "left" : label.last ? "right" : "center",
|
|
15214
|
-
transform: label.first ? void 0 : label.last ? "translateX(-100%)" : "translateX(-50%)"
|
|
15215
|
-
},
|
|
15216
|
-
dangerouslySetInnerHTML: { __html: label.text }
|
|
15217
|
-
}
|
|
15218
|
-
)
|
|
15219
|
-
}
|
|
15220
|
-
);
|
|
15221
|
-
const calculateMarkerLabels = (question) => {
|
|
15222
|
-
if (question.labels.length === 0) return {};
|
|
15223
|
-
const nroMarkers = (question.maximum - question.minimum) / question.step;
|
|
15224
|
-
const markerLabels = {};
|
|
15225
|
-
question.labels.forEach((label, labelIndex) => {
|
|
15226
|
-
const markerIdx = Math.floor(labelIndex * nroMarkers / (question.labels.length - 1));
|
|
15227
|
-
markerLabels[markerIdx] = { text: label, first: labelIndex === 0, last: labelIndex === question.labels.length - 1 };
|
|
15228
|
-
});
|
|
15229
|
-
return markerLabels;
|
|
15230
|
-
};
|
|
15231
|
-
const trackStyles = {
|
|
15232
|
-
border: "1px solid #d3d3d3",
|
|
15233
|
-
background: "#fafafa",
|
|
15234
|
-
height: "18px",
|
|
15235
|
-
borderRadius: "4px",
|
|
15236
|
-
marginBottom: "18px",
|
|
15237
|
-
boxShadow: "inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB"
|
|
15238
|
-
};
|
|
15239
|
-
const baseThumbStyles = {
|
|
15240
|
-
height: "28px",
|
|
15241
|
-
width: "34px",
|
|
15242
|
-
textAlign: "center",
|
|
15243
|
-
lineHeight: "27px",
|
|
15244
|
-
backgroundColor: "rgba(27,124,194,0.7)",
|
|
15245
|
-
color: "#E8E7E6",
|
|
15246
|
-
border: "1px solid #9AC1DD",
|
|
15247
|
-
borderRadius: "3px",
|
|
15248
|
-
boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #9AC1DD, 0 3px 6px -3px #9AC1DD"
|
|
15249
|
-
};
|
|
15250
|
-
const isDraggedThumbStyles = {
|
|
15251
|
-
boxShadow: "inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB"
|
|
15252
|
-
};
|
|
15253
|
-
const invalidThumbStyles = {
|
|
15254
|
-
backgroundColor: "rgba(255, 255, 255, .5)",
|
|
15255
|
-
boxShadow: "none",
|
|
15256
|
-
border: "1px solid #D9D9D9"
|
|
15257
|
-
};
|
|
15258
|
-
const labelStyles = {
|
|
15259
|
-
position: "absolute",
|
|
15260
|
-
top: "-28px",
|
|
15261
|
-
left: "17px",
|
|
15262
|
-
transform: "translateX(-50%)",
|
|
15263
|
-
color: "#000",
|
|
15264
|
-
fontWeight: "bold",
|
|
15265
|
-
padding: "4px"
|
|
15266
|
-
};
|
|
15267
15316
|
const TextareaQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
15268
15317
|
var _a;
|
|
15269
15318
|
const mbvArgs = useMightBecomeValid((_a = fieldState.value) == null ? void 0 : _a.toString(), (newValue) => {
|
|
@@ -15315,19 +15364,13 @@ const CheckBoxQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
15315
15364
|
fieldState
|
|
15316
15365
|
},
|
|
15317
15366
|
child.key
|
|
15318
|
-
) : /* @__PURE__ */ jsx(
|
|
15319
|
-
"div",
|
|
15320
|
-
{
|
|
15321
|
-
className: "text-lg font-medium my-1 inner-title",
|
|
15322
|
-
dangerouslySetInnerHTML: { __html: child.html }
|
|
15323
|
-
},
|
|
15324
|
-
child.key
|
|
15325
|
-
)) })
|
|
15367
|
+
) : /* @__PURE__ */ jsx(InnerTitle, { i18nKey: `${question.key}.${child.key}.html` }, child.key)) })
|
|
15326
15368
|
] })
|
|
15327
15369
|
] });
|
|
15328
15370
|
};
|
|
15329
15371
|
const Option$1 = ({ question, option, fieldState }) => {
|
|
15330
|
-
const
|
|
15372
|
+
const label = useTranslationCurliesFor(`${question.key}.${option.key}.label`);
|
|
15373
|
+
const description = useTranslationCurliesFor(`${question.key}.${option.key}.description`);
|
|
15331
15374
|
const value = fieldState.value || /* @__PURE__ */ new Set();
|
|
15332
15375
|
const checked = value.has(option.key) || false;
|
|
15333
15376
|
if (option.hidden && !checked) return null;
|
|
@@ -15340,8 +15383,6 @@ const Option$1 = ({ question, option, fieldState }) => {
|
|
|
15340
15383
|
// TODO
|
|
15341
15384
|
});
|
|
15342
15385
|
const handleChange = (_event) => option.key && fieldState.setValue(toggleValue(fieldState, option.key, question));
|
|
15343
|
-
const label = option.label || option.description;
|
|
15344
|
-
const description = option.label ? option.description : void 0;
|
|
15345
15386
|
return /* @__PURE__ */ jsxs("div", { className: divClassNames, children: [
|
|
15346
15387
|
/* @__PURE__ */ jsx("div", { className: "inline radiocheckwrapper", children: /* @__PURE__ */ jsx(
|
|
15347
15388
|
"input",
|
|
@@ -15358,12 +15399,17 @@ const Option$1 = ({ question, option, fieldState }) => {
|
|
|
15358
15399
|
) }),
|
|
15359
15400
|
/* @__PURE__ */ jsx(ShowValue, { question, option }),
|
|
15360
15401
|
/* @__PURE__ */ jsxs("div", { className: "inline labelwrapper", children: [
|
|
15361
|
-
/* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html:
|
|
15362
|
-
description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html:
|
|
15402
|
+
/* @__PURE__ */ jsx("label", { htmlFor: option.viewId, "aria-describedby": description && `${option.viewId}_description`, children: /* @__PURE__ */ jsx("span", { dangerouslySetInnerHTML: { __html: label } }) }),
|
|
15403
|
+
description && /* @__PURE__ */ jsx("div", { className: "de-em", id: `${option.viewId}_description`, dangerouslySetInnerHTML: { __html: description } })
|
|
15363
15404
|
] }),
|
|
15364
15405
|
/* @__PURE__ */ jsx(SubQuestions, { questions: option.questions })
|
|
15365
15406
|
] });
|
|
15366
15407
|
};
|
|
15408
|
+
const InnerTitle = ({ i18nKey }) => {
|
|
15409
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
15410
|
+
if (!interpolatedString) return null;
|
|
15411
|
+
return /* @__PURE__ */ jsx("div", { className: "text-lg font-medium my-1 inner-title", dangerouslySetInnerHTML: { __html: interpolatedString } });
|
|
15412
|
+
};
|
|
15367
15413
|
const ShowValue = () => {
|
|
15368
15414
|
return null;
|
|
15369
15415
|
};
|
|
@@ -17568,6 +17614,7 @@ const Option = ({ option }) => {
|
|
|
17568
17614
|
};
|
|
17569
17615
|
const SplitToUnitsQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
17570
17616
|
const { t: t2 } = useTranslation();
|
|
17617
|
+
const questionTitle = useTranslationCurliesFor(`${question.key}.title`);
|
|
17571
17618
|
const valueHash = makeValueHash(question, fieldState.value ?? null);
|
|
17572
17619
|
const setValue = (key, value) => {
|
|
17573
17620
|
fieldState.setValue(calcValue(question, valueHash.set(key, value)));
|
|
@@ -17581,7 +17628,7 @@ const SplitToUnitsQuestion = ({ question, fieldState, setQuestionRef }) => {
|
|
|
17581
17628
|
"input",
|
|
17582
17629
|
{
|
|
17583
17630
|
type: "text",
|
|
17584
|
-
"aria-label": `${
|
|
17631
|
+
"aria-label": `${questionTitle} ${t2(`units.${unit}`, { defaultValue: unit })}`,
|
|
17585
17632
|
id: `answer_${question.key}_${unit}`,
|
|
17586
17633
|
name: `${question.key}_${unit}`,
|
|
17587
17634
|
value: (valueHash == null ? void 0 : valueHash.get(unit)) ?? "",
|
|
@@ -17617,74 +17664,43 @@ function calcValue(question, values) {
|
|
|
17617
17664
|
function htmlId(question) {
|
|
17618
17665
|
return `answer_${question.key}_input`;
|
|
17619
17666
|
}
|
|
17667
|
+
const RenderWithFieldState = ({ Component, question }) => {
|
|
17668
|
+
const { response, setQuestionRef } = React__default.useContext(QubyContext);
|
|
17669
|
+
const fieldState = React__default.useSyncExternalStore(
|
|
17670
|
+
response.subscribeToQuestion(question.key),
|
|
17671
|
+
() => response.getFieldState(question.key)
|
|
17672
|
+
);
|
|
17673
|
+
if (fieldState.hidden) return null;
|
|
17674
|
+
return /* @__PURE__ */ jsx(Component, { question, fieldState, setQuestionRef }, question.key);
|
|
17675
|
+
};
|
|
17620
17676
|
const QuestionItem = ({ fieldKey }) => {
|
|
17621
|
-
const { questionnaire
|
|
17677
|
+
const { questionnaire } = React__default.useContext(QubyContext);
|
|
17622
17678
|
const question = questionnaire.getField(fieldKey);
|
|
17623
17679
|
switch (question.as) {
|
|
17624
|
-
case "string":
|
|
17625
|
-
|
|
17626
|
-
|
|
17627
|
-
return /* @__PURE__ */ jsx(
|
|
17628
|
-
|
|
17629
|
-
|
|
17630
|
-
|
|
17631
|
-
|
|
17632
|
-
|
|
17633
|
-
|
|
17634
|
-
case "
|
|
17635
|
-
|
|
17636
|
-
|
|
17637
|
-
return /* @__PURE__ */ jsx(
|
|
17638
|
-
|
|
17639
|
-
|
|
17640
|
-
|
|
17641
|
-
|
|
17642
|
-
|
|
17643
|
-
|
|
17644
|
-
case "
|
|
17645
|
-
|
|
17646
|
-
|
|
17647
|
-
return /* @__PURE__ */ jsx(
|
|
17648
|
-
}
|
|
17649
|
-
case "date_parts": {
|
|
17650
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17651
|
-
if (fieldState.hidden) return null;
|
|
17652
|
-
return /* @__PURE__ */ jsx(DatePartsQuestion, { question, fieldState, setQuestionRef });
|
|
17653
|
-
}
|
|
17654
|
-
case "integer": {
|
|
17655
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17656
|
-
if (fieldState.hidden) return null;
|
|
17657
|
-
return /* @__PURE__ */ jsx(IntegerQuestion, { question, fieldState, setQuestionRef });
|
|
17658
|
-
}
|
|
17659
|
-
case "float": {
|
|
17660
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17661
|
-
if (fieldState.hidden) return null;
|
|
17662
|
-
return /* @__PURE__ */ jsx(FloatQuestion, { question, fieldState, setQuestionRef });
|
|
17663
|
-
}
|
|
17664
|
-
case "slider": {
|
|
17665
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17666
|
-
if (fieldState.hidden) return null;
|
|
17667
|
-
if (displayOptions.newLayout) {
|
|
17668
|
-
return /* @__PURE__ */ jsx(SliderQuestion, { question, fieldState, setQuestionRef });
|
|
17669
|
-
} else {
|
|
17670
|
-
return /* @__PURE__ */ jsx(OldSliderQuestion, { question, fieldState, setQuestionRef });
|
|
17671
|
-
}
|
|
17672
|
-
}
|
|
17673
|
-
case "split_to_units": {
|
|
17674
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17675
|
-
if (fieldState.hidden) return null;
|
|
17676
|
-
return /* @__PURE__ */ jsx(SplitToUnitsQuestion, { question, fieldState, setQuestionRef });
|
|
17677
|
-
}
|
|
17678
|
-
case "textarea": {
|
|
17679
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17680
|
-
if (fieldState.hidden) return null;
|
|
17681
|
-
return /* @__PURE__ */ jsx(TextareaQuestion, { question, fieldState, setQuestionRef });
|
|
17682
|
-
}
|
|
17683
|
-
case "check_box": {
|
|
17684
|
-
const fieldState = response.getFieldState(fieldKey);
|
|
17685
|
-
if (fieldState.hidden) return null;
|
|
17686
|
-
return /* @__PURE__ */ jsx(CheckBoxQuestion, { question, fieldState, setQuestionRef });
|
|
17687
|
-
}
|
|
17680
|
+
case "string":
|
|
17681
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: StringQuestion, question }, fieldKey);
|
|
17682
|
+
case "country_select":
|
|
17683
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: CountrySelectQuestion, question }, fieldKey);
|
|
17684
|
+
case "scale":
|
|
17685
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: ScaleQuestion, question }, fieldKey);
|
|
17686
|
+
case "radio":
|
|
17687
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: RadioQuestion, question }, fieldKey);
|
|
17688
|
+
case "select":
|
|
17689
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SelectQuestion, question }, fieldKey);
|
|
17690
|
+
case "date_parts":
|
|
17691
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: DatePartsQuestion, question }, fieldKey);
|
|
17692
|
+
case "integer":
|
|
17693
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: IntegerQuestion, question }, fieldKey);
|
|
17694
|
+
case "float":
|
|
17695
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: FloatQuestion, question }, fieldKey);
|
|
17696
|
+
case "slider":
|
|
17697
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SliderQuestion, question }, fieldKey);
|
|
17698
|
+
case "split_to_units":
|
|
17699
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: SplitToUnitsQuestion, question }, fieldKey);
|
|
17700
|
+
case "textarea":
|
|
17701
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: TextareaQuestion, question }, fieldKey);
|
|
17702
|
+
case "check_box":
|
|
17703
|
+
return /* @__PURE__ */ jsx(RenderWithFieldState, { Component: CheckBoxQuestion, question }, fieldKey);
|
|
17688
17704
|
}
|
|
17689
17705
|
throw new Error(`unknown question type`);
|
|
17690
17706
|
};
|
|
@@ -17852,6 +17868,16 @@ function useInView({
|
|
|
17852
17868
|
result.entry = result[2];
|
|
17853
17869
|
return result;
|
|
17854
17870
|
}
|
|
17871
|
+
const TranslationCurlies = ({ i18nKey, Component }) => {
|
|
17872
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
17873
|
+
if (!interpolatedString) return null;
|
|
17874
|
+
return /* @__PURE__ */ jsx(Component, { children: interpolatedString });
|
|
17875
|
+
};
|
|
17876
|
+
const TranslationCurliesHtml = ({ i18nKey, Component }) => {
|
|
17877
|
+
const interpolatedString = useTranslationCurliesFor(i18nKey);
|
|
17878
|
+
if (!interpolatedString) return null;
|
|
17879
|
+
return /* @__PURE__ */ jsx(Component, { dangerouslySetInnerHTML: { __html: interpolatedString } });
|
|
17880
|
+
};
|
|
17855
17881
|
const InfoItem = ({ item }) => {
|
|
17856
17882
|
const [open, setOpen] = React__default.useState(item.startOpen);
|
|
17857
17883
|
const [opening, setOpening] = React__default.useState(false);
|
|
@@ -17889,12 +17915,12 @@ const InfoItem = ({ item }) => {
|
|
|
17889
17915
|
onKeyDown: iconClick,
|
|
17890
17916
|
"aria-haspopup": "dialog",
|
|
17891
17917
|
"aria-expanded": open || item.startOpen && inView,
|
|
17892
|
-
"aria-controls":
|
|
17918
|
+
"aria-controls": `%{item.key}`,
|
|
17893
17919
|
tabIndex: item.startOpen ? -1 : 0,
|
|
17894
17920
|
children: item.subtype == "question-bar" ? null : /* @__PURE__ */ jsx(InfoSvg, {})
|
|
17895
17921
|
}
|
|
17896
17922
|
),
|
|
17897
|
-
open && /* @__PURE__ */ jsx("div", { id: item.key, className: classNames("info-html prose", { "open": open, "opening": opening }), children: /* @__PURE__ */ jsx(
|
|
17923
|
+
open && /* @__PURE__ */ jsx("div", { id: item.key, className: classNames("info-html prose", { "open": open, "opening": opening }), children: /* @__PURE__ */ jsx(TranslationCurliesHtml, { i18nKey: `${item.key}.html`, Component: "div" }) }),
|
|
17898
17924
|
item.items.map((subItem, idx) => /* @__PURE__ */ jsx(PanelItem, { item: subItem }, idx))
|
|
17899
17925
|
] });
|
|
17900
17926
|
};
|
|
@@ -17915,7 +17941,7 @@ const PanelItem = (props) => {
|
|
|
17915
17941
|
return /* @__PURE__ */ jsx(HtmlItem, { item: props.item });
|
|
17916
17942
|
}
|
|
17917
17943
|
case "question": {
|
|
17918
|
-
return /* @__PURE__ */ jsx(QuestionItem, { fieldKey: props.item.key });
|
|
17944
|
+
return /* @__PURE__ */ jsx(QuestionItem, { fieldKey: props.item.key }, props.item.key);
|
|
17919
17945
|
}
|
|
17920
17946
|
case "info": {
|
|
17921
17947
|
return /* @__PURE__ */ jsx(InfoItem, { item: props.item });
|
|
@@ -17927,17 +17953,10 @@ const PanelItem = (props) => {
|
|
|
17927
17953
|
};
|
|
17928
17954
|
const PanelContent = ({ panel }) => {
|
|
17929
17955
|
return /* @__PURE__ */ jsxs("div", { className: "m-panel-padding", children: [
|
|
17930
|
-
/* @__PURE__ */ jsx(
|
|
17956
|
+
/* @__PURE__ */ jsx(TranslationCurlies, { i18nKey: `${panel.key}.title`, Component: "h1" }),
|
|
17931
17957
|
panel.items.map((item, idx) => /* @__PURE__ */ jsx(PanelItem, { item }, idx))
|
|
17932
17958
|
] });
|
|
17933
17959
|
};
|
|
17934
|
-
const Title = ({ title }) => {
|
|
17935
|
-
if (title) {
|
|
17936
|
-
return /* @__PURE__ */ jsx("h1", { children: title });
|
|
17937
|
-
} else {
|
|
17938
|
-
return null;
|
|
17939
|
-
}
|
|
17940
|
-
};
|
|
17941
17960
|
const buttonsClassName = "buttons bg-slate-100 dark:bg-slate-700 p-panel-padding";
|
|
17942
17961
|
const Paginator = (props) => {
|
|
17943
17962
|
const [activeIndex, setActiveIndex] = React__default.useState(props.panelLogic.firstPanelIndexToActivate());
|
|
@@ -18020,15 +18039,19 @@ const Button = ({ value, onClick, onFocus, variant }) => {
|
|
|
18020
18039
|
const Hotkeys = () => {
|
|
18021
18040
|
return null;
|
|
18022
18041
|
};
|
|
18023
|
-
const
|
|
18042
|
+
const Footer = () => {
|
|
18043
|
+
const footerHtml = useTranslationCurliesFor("footer");
|
|
18044
|
+
if (!footerHtml) return null;
|
|
18045
|
+
return /* @__PURE__ */ jsx("footer", { className: "quby-footer", dangerouslySetInnerHTML: { __html: footerHtml } });
|
|
18046
|
+
};
|
|
18024
18047
|
const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidation, onSave, onAbort, onPreviousQuestionnaire }) => {
|
|
18025
18048
|
useRerenderOnResponseChange(response);
|
|
18026
18049
|
const [nextSavePressWillOnlyRunMinimalValidations, setNextSavePressWillOnlyRunMinimalValidations] = useNextSavePressWillOnlyRunMinimalValidations(response);
|
|
18027
18050
|
const qubyRef = React__default.useRef(null);
|
|
18051
|
+
const questionRefs = React__default.useMemo(() => /* @__PURE__ */ new Map(), [questionnaire]);
|
|
18052
|
+
const translationsCurlies = React__default.useMemo(() => new QuestionnaireTranslationsCurlies(response, questionnaire, questionnaire.defaultLanguage), [response, questionnaire, questionnaire.defaultLanguage]);
|
|
18028
18053
|
useQuestionShortkeys(response, questionnaire, qubyRef);
|
|
18029
18054
|
const displayMode = displayOptions.displayMode;
|
|
18030
|
-
const questionRefs = /* @__PURE__ */ new Map();
|
|
18031
|
-
const curliesInterpolator = new CurliesInterpolator(response, questionnaire);
|
|
18032
18055
|
const panelLogic = new PanelLogic(response, questionnaire.panels);
|
|
18033
18056
|
const beforeNext = (panelIndex) => {
|
|
18034
18057
|
const panel = questionnaire.panels[panelIndex];
|
|
@@ -18067,13 +18090,13 @@ const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidati
|
|
|
18067
18090
|
scrollToAndFocus(ref);
|
|
18068
18091
|
}
|
|
18069
18092
|
} : void 0;
|
|
18070
|
-
const setQuestionRef = (key, ref) => {
|
|
18093
|
+
const setQuestionRef = React__default.useCallback((key, ref) => {
|
|
18071
18094
|
questionRefs.set(key, ref);
|
|
18072
|
-
};
|
|
18095
|
+
}, [questionRefs]);
|
|
18073
18096
|
const topClassName = classNames({
|
|
18074
18097
|
dark: displayOptions.darkMode
|
|
18075
18098
|
});
|
|
18076
|
-
return /* @__PURE__ */ jsx(
|
|
18099
|
+
return /* @__PURE__ */ jsx(QubyContext.Provider, { value: { questionnaire, response, displayOptions, setQuestionRef, translationsCurlies }, children: /* @__PURE__ */ jsxs("div", { ref: qubyRef, className: topClassName, style: mapCssVars(questionnaire.cssVars), dir: displayOptions.dir, children: [
|
|
18077
18100
|
/* @__PURE__ */ jsx("form", { className: "paged", onSubmit: (event) => event.preventDefault(), children: /* @__PURE__ */ jsx(
|
|
18078
18101
|
Paginator,
|
|
18079
18102
|
{
|
|
@@ -18087,13 +18110,13 @@ const AnswerPage = ({ questionnaire, response, displayOptions, allowSkipValidati
|
|
|
18087
18110
|
onFocus: () => response.setActiveQuestion(null)
|
|
18088
18111
|
}
|
|
18089
18112
|
) }),
|
|
18090
|
-
|
|
18091
|
-
] }) })
|
|
18113
|
+
/* @__PURE__ */ jsx(Footer, {})
|
|
18114
|
+
] }) });
|
|
18092
18115
|
};
|
|
18093
18116
|
const useRerenderOnResponseChange = (response) => {
|
|
18094
18117
|
const [_2, setCounter] = React__default.useState(0);
|
|
18095
18118
|
React__default.useEffect(() => {
|
|
18096
|
-
const handleChange = (_response) => setCounter((number) => number + 1);
|
|
18119
|
+
const handleChange = (_response, type) => ["visibilityChanged"].includes(type) && setCounter((number) => number + 1);
|
|
18097
18120
|
response.onChange(handleChange);
|
|
18098
18121
|
return () => response.offChange(handleChange);
|
|
18099
18122
|
});
|
|
@@ -18118,7 +18141,7 @@ const scrollToAndFocus = (ref) => {
|
|
|
18118
18141
|
firstInput.focus();
|
|
18119
18142
|
}
|
|
18120
18143
|
};
|
|
18121
|
-
const styles = '/*\n! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: \'\';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n5. Use the user\'s configured `sans` font-feature-settings by default.\n6. Use the user\'s configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n em {\n font-style: italic;\n font-weight: 500;\n }\n\n strong {\n font-weight: bolder;\n }\n strong em {\n font-weight: inherit;\n }\n\n em.clean {\n font-style: inherit;\n }\n\n strong.clean { \n font-weight: inherit;\n }\n\n .underline { /* mostly for <strong class="clean underline"> */\n text-decoration: underline;\n }\n\n /* de-emphasize the text */\n .de-em {\n font-weight: 300;\n}\n .de-em em {\n font-weight: 400;\n}\n .de-em strong {\n font-weight: 600;\n}\n\n a {\n color: oklch(var(--primary));\n text-decoration: underline;\n }\n\n .serif {\n font-family: Georgia, serif;\n }\n\n small {\n font-size: 0.8rem;\n }\n .text-center img, .text-center svg, .text-center input[type="radio"] { /* These are made display block by tailwind, but we want to center when scaled */\n margin-inline: auto;\n }\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n font-weight: 700;\n}\n\n h1 em, h2 em, h3 em, h4 em, .h1 em, .h2 em, .h3 em, .h4 em {\n font-weight: inherit;\n }\n\n h1 strong, h2 strong, h3 strong, h4 strong, .h1 strong, .h2 strong, .h3 strong, .h4 strong {\n font-weight: 900;\n}\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n margin: 1.5rem 0 1rem;\n }\n\n h1, .h1 {\n font-size: 1.75rem;\n margin: 1.5rem 0 2rem;\n }\n\n h2, .h2 {\n font-size: 1.5rem;\n }\n\n h3, .h3 {\n font-size: 1.25rem;\n }\n\n h4, .h4 {\n font-size: 1rem;\n }\n :host {\n --page: 1 0 0;\n --background: 1 0 0;\n --foreground: .21 .04 266; /* text color */\n --foreground-80: .38 .04 266;\n --foreground-60: .55 .04 266;\n --muted: var(--foreground-60); /* text color muted */\n --super-muted: .95 .04 266;\n --primary: .454 .135 254;\n --primary-muted: .5 .135 254;\n --primary-hover: 0.5 0.16 254;\n --primary-inv: var(--background);\n --error-bar: .64 .24 27;\n --error-background: var(--error-bar) / .4;\n --slider-track: .91 0 0;\n --info-block-bg: .87 .055 223;\n --info-block-fg: var(--foreground);\n\n --panel-padding: 1rem;\n --default-radius: 0.25rem;\n --checkradio-size: 1rem;\n --checkradio-padding: 0.75rem;\n --question-padding: 2rem;\n --question-bar-padding: 8px;\n --question-bar-width: 4px;\n --list-indent: 1.5rem;\n\n /* To change in questionnaires */\n --option-gap-y: 0; /* vertical gap between options, 1, 2, 3, 4 */\n --question-mb-factor: 1; /* vertical gap to the next question, 0, 0.5, 1, 1.5, 2 */\n --max-page-width: 75rem;\n }\n\n @media(min-width: 800px) {\n :host {\n --panel-padding: 2rem;\n --question-bar-padding: 10px;\n }\n }\n\n .dark {\n --page: .186 .031 272;\n --background: 0 0 0;\n --foreground: 1 0 0;\n --foreground-80: .8 0 0;\n --foreground-60: .6 0 0;\n --foreground-40: .4 0 0;\n --muted: var(--foreground-60);\n --super-muted: .3 0 0;\n --primary: .68 .16 254;\n --primary-hover: 0.5 0.16 254;\n --primary-muted: .3 .135 254;\n --primary-inv: var(--foreground);\n --slider-track: .23 0 197;\n --info-block-bg: .4342 .052 233;\n --info-block-fg: var(--foreground);\n }\n\n :host {\n all: initial;\n display: block;\n position: relative; /* fix absolute children when quby lives in a scrolling container */\n /* Copied from tailwind html css. */\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n\n /* Made normal font thinner (300) in tailwind.conf */\n\n font-weight: 400;\n }\n\n input, textarea, select {\n border: 1px solid oklch(var(--foreground));\n border-radius: var(--default-radius);\n }\n input:focus, textarea:focus, select:focus {\n box-shadow: 0 0 0 6px oklch(var(--primary) / .2);\n outline: 3px solid transparent; /* replace shadow when forced colors */\n border-color: oklch(var(--primary));\n }\n input:disabled, textarea:disabled, select:disabled {\n color: oklch(var(--foreground-60));\n border-color: oklch(var(--foreground-60));\n cursor: not-allowed;\n }\n\n input:not([type=checkbox]):not([type=radio]), textarea, select {\n padding: .4rem;\n background-color: oklch(var(--background));\n color: var(--foreground);\n caret-color: oklch(var(--primary));\n }\n\n input[type=checkbox], input[type=radio] {\n --check-color: var(--foreground); /* when active changes to primary */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n position: relative;\n display: grid; /* easiest way to perfectly center the ::before */\n place-content: center;\n width: var(--checkradio-size);\n height: var(--checkradio-size);\n margin: .25rem 0;\n } /* center vertically, (line-height-height)/2 */\n input[type=checkbox]:hover, input[type=radio]:hover {\n border-color: oklch(var(--primary)); /* minimal feedback that clicking radio/label will do something */\n border-width: 2px;\n }\n input[type=checkbox]::before, input[type=radio]::before {\n content: "";\n width: calc(var(--checkradio-size) - 6px);\n height: calc(var(--checkradio-size) - 6px);\n transform: scale(0); /* hide when not checked */\n transition: 125ms transform ease-in-out;\n box-shadow: inset 1em 1em oklch(var(--check-color)); /* bg instead of bgcolor to enable printing */\n background-color: CanvasText; /* replace shadow when forced colors */\n }\n input[type=checkbox]::after, input[type=radio]::after {\n content: "";\n position: absolute;\n top: -4px;\n inset-inline-start: -4px;\n height: 24px;\n width: 24px;\n }\n input[type=checkbox]:checked::before, input[type=radio]:checked::before {\n transform: scale(1);\n }\n\n input[type=checkbox] {\n border-radius: var(--default-radius);\n }\n input[type=checkbox]::before {\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); /* checkmark */\n } \n input[type=radio] {\n border-radius: 50%;\n }\n input[type=radio]::before {\n border-radius: 50%;\n }\n .active input[type=checkbox]:not(:disabled), .active input[type=radio]:not(:disabled) {\n --check-color: var(--primary);\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.progress-bar {\n margin: var(--panel-padding);\n }\n.progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n height: 12px;\n border: 1px solid #ccc;\n border-radius: 6px;\n padding: 1px;\n }\n.panel .progress-bar .progress-wrapper {\n text-align: center;\n }\n.progress-bar .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: none;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: inline-start;\n }\n.progress-bar .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n }\n.progress-bar .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.active {\n background: oklch(var(--muted));\n }\n.progress-bar .progress-stop.current {\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.current.first-child {\n border-radius: 5px;\n }\n.progress-bar .progress-details {\n color: has(var(--muted));\n font-size: 9px;\n }\n.prose p {\n margin: 0 0 1rem 0;\n }\n/* for things like description we want less, so the parent will determine the outer margin. */\n/* if only margin-trim was more widely supported */\n.prose > *:first-child {\n margin-top: 0;\n }\n.prose > *:last-child {\n margin-bottom: 0;\n }\n.prose ul {\n list-style-type: disc;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol {\n list-style-type: lower-alpha;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol.list-decimal {\n list-style-type: decimal;\n }\n.prose li {\n padding-inline-start: 0.5rem;\n }\n.prose hr {\n margin: var(--question-padding) 1rem;\n border: none;\n height: 0.125rem;\n background-color: oklch(var(--muted));\n }\n.prose hr.compact {\n margin: 1rem;\n }\nblockquote {\n margin: 1em 2em;\n }\nblockquote >* {\n font-style: italic;\n }\nblockquote >p::before,\n blockquote >p:last-child::after,\n blockquote >ul::before,\n blockquote >ul:last-child > li:last-child::after {\n content: "“";\n font-family: Georgia;\n font-size: 2.5rem;\n margin-block: -.8rem 0;\n margin-inline: -1.4rem 0;\n position: absolute;\n color: #666;\n }\nblockquote >ul::before {\n margin-inline-start: calc(-1.1rem - var(--list-indent));\n }\nblockquote >p:last-child::after,\n blockquote >ul:last-child > li:last-child::after {\n content: "”";\n margin: 0;\n margin-inline-start: -.1rem\n }\nblockquote.blue-quotes p::before,\n blockquote.blue-quotes p:last-child::after {\n color: #298ED5;\n }\n.visible {\n visibility: visible;\n}\n.absolute {\n position: absolute;\n}\n.sticky {\n position: sticky;\n}\n.order-last {\n order: 9999;\n}\n.float-right {\n float: right;\n}\n.m-panel-padding {\n margin: var(--panel-padding);\n}\n.mx-1 {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-1 {\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.me-1 {\n margin-inline-end: 0.25rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.hidden {\n display: none;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-1\\/4 {\n width: 25%;\n}\n.w-1\\/5 {\n width: 20%;\n}\n.w-1\\/6 {\n width: 16.666667%;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-2\\/5 {\n width: 40%;\n}\n.w-3\\/4 {\n width: 75%;\n}\n.w-3\\/5 {\n width: 60%;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-5\\/6 {\n width: 83.333333%;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.justify-between {\n justify-content: space-between;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-warning {\n --tw-border-opacity: 1;\n border-color: rgb(255 165 0 / var(--tw-border-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.p-panel-padding {\n padding: var(--panel-padding);\n}\n.text-center {\n text-align: center;\n}\n.align-top {\n vertical-align: top;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.underline {\n text-decoration-line: underline;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n:host > div {\n background-color: oklch(var(--page));\n color: oklch(var(--foreground));\n min-height: 100cqh;\n}\n:host > div > * {\n max-width: var(--max-page-width);\n margin: 0 auto;\n}\n.panel + .panel {\n margin-top: 5rem;\n}\n.option .labelwrapper p {\n display: inline; /* temp fix, should be stripped by quby-compiler */\n}\n.item.question, .question-bar {\n --question-bar-color: var(--super-muted);\n box-shadow: calc(-1 * var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(0px - var(--question-bar-width) - var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n}\n.item.question:dir(rtl), .question-bar:dir(rtl) {\n box-shadow: calc(var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(var(--question-bar-width) + var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n }\n.item.question.active, .item.question .item:has(.active), .question-bar.active, .question-bar .item:has(.active) {\n --question-bar-color: var(--primary);\n }\n.item.question.errors, .question-bar.errors {\n --question-bar-color: var(--error-background);\n }\n.item.question.errors.active, .question-bar.errors.active {\n --question-bar-color: var(--error-bar);\n }\n.item .main {\n font-weight: 700;\n}\n.item .main em {\n font-weight: inherit;\n }\n.item .main strong {\n font-weight: 900;\n}\n.item .inner-title {\n margin: 1rem 0 0.5rem;\n font-weight: 600;\n }\n.item .inner-title em {\n font-weight: 700;\n}\n.item .inner-title strong {\n font-weight: 800;\n}\n.item .description-and-fields > .description {\n font-weight: 300;\n}\n.item .description-and-fields > .description em {\n font-weight: 400;\n}\n.item .description-and-fields > .description strong {\n font-weight: 600;\n}\n.item .description-and-fields > .description {\n margin-bottom: 0.5rem;\n}\n.item .description-and-fields > .description .instruction {\n font-weight: 400;\n}\n.item .description-and-fields > .description .example {}\n.item .description-and-fields > .description .explanation {}\nbutton {\n border-radius: 0.375rem;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-weight: 600;\n}\nbutton:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\nbutton.secondary {\n border-width: 2px;\n border-color: oklch(var(--primary));\n background-color: oklch(var(--background));\n color: oklch(var(--primary));\n}\nbutton.secondary:hover {\n border-color: oklch(var(--primary-hover));\n color: oklch(var(--primary-hover));\n }\nbutton.primary {\n background-color: oklch(var(--primary));\n color: oklch(var(--background));\n}\nbutton.primary:hover {\n background-color: oklch(var(--primary-hover));\n }\n.info-item {\n --icon-size: 20px;\n --icon-margin: 8px;\n}\n.info-item .info-html {\n margin-bottom: var(--question-padding);\n z-index: 1; /* prevent showing under slider */\n padding-inline-end: calc(var(--icon-size) + 2 * var(--icon-margin));\n }\n.info-item .info-html.open { /* opened by clicking icon */\n position: sticky;\n top: 0;\n }\n.info-item .info-html>div { /* actual content, extra div needed to animate scale. */\n transform-origin: center top;\n transition: inherit;\n }\n.info-item .info-html>div :first-child {\n margin-top: 0;\n }\n.info-item .info-html>div :last-child {\n margin-bottom: 0;\n }\n.info-item .info-html.opening {\n height: 0;\n margin-bottom: 0;\n }\n.info-item .info-html.opening>div { \n transform: scale(1, 0); /* animating scale, since we can\'t both hide content and have the icon float */\n }\n.info-item .info-html {\n transition: all 0.3s linear;\n interpolate-size: allow-keywords;\n}\n/* gradient under info-html, to make text fade under it */\n.info-item .info-html::after {\n content: "";\n position: absolute;\n bottom: calc(-1 * var(--question-padding));\n height: var(--question-padding);\n width: 100%;\n left: 0;\n background: linear-gradient(in oklch, oklch(var(--page)), transparent);\n }\n.info-item .info-icon {\n position: relative; /* with z-index to make it appear above the info-html */\n z-index: 2;\n float: inline-end;\n top: 0;\n transition: margin 0.5s;\n position: sticky;\n }\n.info-item .info-icon:hover {\n cursor: pointer;\n }\n.info-item .info-icon.stuck {\n margin-right: calc(-1 * var(--panel-padding));\n }\n.info-item .info-icon svg {\n width: var(--icon-size);\n height: var(--icon-size);\n margin: var(--icon-margin);\n }\n/* default type */\n.info-item.info .info-html, .info-item.info .info-icon {\n background-color: oklch(var(--info-block-bg));\n }\n.info-item.info .info-html {\n padding: 0.5rem;\n color: oklch(var(--info-block-fg));\n}\n/* type actionbar */\n.info-item.question-bar .info-html, .info-item.question-bar info-icon {\n background-color: oklch(var(--page));\n }\n.info-item.question-bar .info-html {\n padding: 0;\n }\n.info-item.question-bar .info-html>div {\n max-height: 40vh; /* Just a precaution, should be shorter */\n overflow: auto;\n }\n.item.radio .option, .item.check_box .option {\n display: flex;\n flex-wrap: wrap;\n}\n.item.radio .option .radiocheckwrapper, .item.check_box .option .radiocheckwrapper {\n flex: 0 0 var(--checkradio-size);\n }\n.item.radio .option .value, .item.check_box .option .value {\n flex: 0 0 2rem;\n text-align: right;\n }\n.item.radio .option .labelwrapper, .item.check_box .option .labelwrapper {\n flex: 1 1 0;\n }\n.item.radio .option .labelwrapper>*, .item.check_box .option .labelwrapper>* {\n padding-inline-start: var(--checkradio-padding); /* padding in label, so no space between input and label */\n }\n.item.radio .option .subquestions, .item.check_box .option .subquestions {\n width: 100%; /* forces it to the next lines */\n }\n.item.radio .option + .option, .item.check_box .option + .option {\n margin-top: calc(var(--option-gap-y) * 0.25rem);\n }\n.subquestions {\n margin-inline-start: calc(var(--question-bar-padding) + var(--checkradio-size)/2 + 2px); /* align active bar under checkbox/radio */\n}\n/* context-description doesn\'t live under question, so doesn\'t react to a single question override. */\n.item, .context-description {\n position: relative;\n margin-bottom: calc(var(--question-padding) * var(--question-mb-factor));\n}\n.item:has(+.indent.question) {\n margin-bottom: 0;\n padding-bottom: calc(var(--question-padding) * var(--question-mb-factor) / 2);\n}\n.question.indent {\n padding-inline-start: calc(var(--checkradio-size) + var(--checkradio-padding));\n}\n/* align with option text, it\'s often below selects and a fine padding for other types */\n.question.indent::before {\n content: "";\n position: absolute;\n top: 10px;\n inset-inline-start: 0;\n margin-inline-start: calc(0px - var(--question-bar-padding));\n width: calc(var(--checkradio-size) + var(--question-bar-padding));\n height: var(--question-bar-width);\n background-color: oklch(var(--super-muted));\n }\n.question.indent.active::before {\n background-color: oklch(var(--primary));\n }\n.subquestions .item {\n margin-bottom: 0;\n}\n/* Distance from inputs feel than from text, since they don\'t have extra line-height padding.\n * So we add a bit of padding, but not for radio/checkbox, \n * since they do have line-height from the labels.\n * but also because it would prevent margin-collapsing when they have subquestions.\n * Let\'s hope someday text-box-trim will make this obsolete. */\n.item:not(.radio):not(.check_box) .description-and-fields {\n padding-bottom: 0.5em;\n}\n.item .error {\n background: oklch(var(--error-background));\n outline: 1px solid oklch(var(--error-bar));\n border-radius: var(--default-radius);\n margin: 0.25rem;\n padding: 0.25rem;\n}\nfooter {\n font-weight: 300;\n}\nfooter em {\n font-weight: 400;\n}\nfooter strong {\n font-weight: 600;\n}\nfooter {\n font-size: .875rem;\n padding: var(--panel-padding);\n color: oklch(var(--foreground-80));\n}\n:is(.dark .dark\\:bg-slate-700) {\n --tw-bg-opacity: 1;\n background-color: rgb(51 65 85 / var(--tw-bg-opacity));\n}\n';
|
|
18144
|
+
const styles = '/*\n! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: \'\';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user\'s configured `sans` font-family by default.\n5. Use the user\'s configured `sans` font-feature-settings by default.\n6. Use the user\'s configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user\'s configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type=\'button\'],\n[type=\'reset\'],\n[type=\'submit\'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type=\'search\'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user\'s configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role="button"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don\'t get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n display: none;\n}\n em {\n font-style: italic;\n font-weight: 500;\n }\n\n strong {\n font-weight: bolder;\n }\n strong em {\n font-weight: inherit;\n }\n\n em.clean {\n font-style: inherit;\n }\n\n strong.clean { \n font-weight: inherit;\n }\n\n .underline { /* mostly for <strong class="clean underline"> */\n text-decoration: underline;\n }\n\n /* de-emphasize the text */\n .de-em {\n font-weight: 300;\n}\n .de-em em {\n font-weight: 400;\n}\n .de-em strong {\n font-weight: 600;\n}\n\n a {\n color: oklch(var(--primary));\n text-decoration: underline;\n }\n\n .serif {\n font-family: Georgia, serif;\n }\n\n small {\n font-size: 0.8rem;\n }\n .text-center img, .text-center svg, .text-center input[type="radio"] { /* These are made display block by tailwind, but we want to center when scaled */\n margin-inline: auto;\n }\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n font-weight: 700;\n}\n\n h1 em, h2 em, h3 em, h4 em, .h1 em, .h2 em, .h3 em, .h4 em {\n font-weight: inherit;\n }\n\n h1 strong, h2 strong, h3 strong, h4 strong, .h1 strong, .h2 strong, .h3 strong, .h4 strong {\n font-weight: 900;\n}\n\n h1, h2, h3, h4, .h1, .h2, .h3, .h4 {\n margin: 1.5rem 0 1rem;\n }\n\n h1, .h1 {\n font-size: 1.75rem;\n margin: 1.5rem 0 2rem;\n }\n\n h2, .h2 {\n font-size: 1.5rem;\n }\n\n h3, .h3 {\n font-size: 1.25rem;\n }\n\n h4, .h4 {\n font-size: 1rem;\n }\n :host {\n --page: 1 0 0;\n --background: 1 0 0;\n --foreground: .21 .04 266; /* text color */\n --foreground-80: .38 .04 266;\n --foreground-60: .55 .04 266;\n --muted: var(--foreground-60); /* text color muted */\n --super-muted: .95 .04 266;\n --primary: .454 .135 254;\n --primary-muted: .5 .135 254;\n --primary-hover: 0.5 0.16 254;\n --primary-inv: var(--background);\n --error-bar: .64 .24 27;\n --error-background: var(--error-bar) / .4;\n --slider-track: .91 0 0;\n --info-block-bg: .87 .055 223;\n --info-block-fg: var(--foreground);\n\n --panel-padding: 1rem;\n --default-radius: 0.25rem;\n --checkradio-size: 1rem;\n --checkradio-padding: 0.75rem;\n --question-padding: 2rem;\n --question-bar-padding: 8px;\n --question-bar-width: 4px;\n --list-indent: 1.5rem;\n\n /* To change in questionnaires */\n --option-gap-y: 0; /* vertical gap between options, 1, 2, 3, 4 */\n --question-mb-factor: 1; /* vertical gap to the next question, 0, 0.5, 1, 1.5, 2 */\n --max-page-width: 75rem;\n }\n\n @media(min-width: 800px) {\n :host {\n --panel-padding: 2rem;\n --question-bar-padding: 10px;\n }\n }\n\n .dark {\n --page: .186 .031 272;\n --background: 0 0 0;\n --foreground: 1 0 0;\n --foreground-80: .8 0 0;\n --foreground-60: .6 0 0;\n --foreground-40: .4 0 0;\n --muted: var(--foreground-60);\n --super-muted: .3 0 0;\n --primary: .68 .16 254;\n --primary-hover: 0.5 0.16 254;\n --primary-muted: .3 .135 254;\n --primary-inv: var(--foreground);\n --slider-track: .23 0 197;\n --info-block-bg: .4342 .052 233;\n --info-block-fg: var(--foreground);\n }\n\n :host {\n all: initial;\n display: block;\n position: relative; /* fix absolute children when quby lives in a scrolling container */\n /* Copied from tailwind html css. */\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n\n /* Made normal font thinner (300) in tailwind.conf */\n\n font-weight: 400;\n }\n\n input, textarea, select {\n border: 1px solid oklch(var(--foreground));\n border-radius: var(--default-radius);\n }\n input:focus, textarea:focus, select:focus {\n box-shadow: 0 0 0 6px oklch(var(--primary) / .2);\n outline: 3px solid transparent; /* replace shadow when forced colors */\n border-color: oklch(var(--primary));\n }\n input:disabled, textarea:disabled, select:disabled {\n color: oklch(var(--foreground-60));\n border-color: oklch(var(--foreground-60));\n cursor: not-allowed;\n }\n\n input:not([type=checkbox]):not([type=radio]), textarea, select {\n padding: .4rem;\n background-color: oklch(var(--background));\n color: var(--foreground);\n caret-color: oklch(var(--primary));\n }\n\n input[type=checkbox], input[type=radio] {\n --check-color: var(--foreground); /* when active changes to primary */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n position: relative;\n display: grid; /* easiest way to perfectly center the ::before */\n place-content: center;\n width: var(--checkradio-size);\n height: var(--checkradio-size);\n margin: .25rem 0;\n } /* center vertically, (line-height-height)/2 */\n input[type=checkbox]:hover, input[type=radio]:hover {\n border-color: oklch(var(--primary)); /* minimal feedback that clicking radio/label will do something */\n border-width: 2px;\n }\n input[type=checkbox]::before, input[type=radio]::before {\n content: "";\n width: calc(var(--checkradio-size) - 6px);\n height: calc(var(--checkradio-size) - 6px);\n transform: scale(0); /* hide when not checked */\n transition: 125ms transform ease-in-out;\n box-shadow: inset 1em 1em oklch(var(--check-color)); /* bg instead of bgcolor to enable printing */\n background-color: CanvasText; /* replace shadow when forced colors */\n }\n input[type=checkbox]::after, input[type=radio]::after {\n content: "";\n position: absolute;\n top: -4px;\n inset-inline-start: -4px;\n height: 24px;\n width: 24px;\n }\n input[type=checkbox]:checked::before, input[type=radio]:checked::before {\n transform: scale(1);\n }\n\n input[type=checkbox] {\n border-radius: var(--default-radius);\n }\n input[type=checkbox]::before {\n clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%); /* checkmark */\n } \n input[type=radio] {\n border-radius: 50%;\n }\n input[type=radio]::before {\n border-radius: 50%;\n }\n .active input[type=checkbox]:not(:disabled), .active input[type=radio]:not(:disabled) {\n --check-color: var(--primary);\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.progress-bar {\n margin: var(--panel-padding);\n }\n.progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n height: 12px;\n border: 1px solid #ccc;\n border-radius: 6px;\n padding: 1px;\n }\n.panel .progress-bar .progress-wrapper {\n text-align: center;\n }\n.progress-bar .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: none;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: inline-start;\n }\n.progress-bar .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n }\n.progress-bar .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.active {\n background: oklch(var(--muted));\n }\n.progress-bar .progress-stop.current {\n border-radius: 0 5px 5px 0;\n }\n.progress-bar .progress-stop.current.first-child {\n border-radius: 5px;\n }\n.progress-bar .progress-details {\n color: has(var(--muted));\n font-size: 9px;\n }\n.prose p {\n margin: 0 0 1rem 0;\n }\n/* for things like description we want less, so the parent will determine the outer margin. */\n/* if only margin-trim was more widely supported */\n.prose > *:first-child {\n margin-top: 0;\n }\n.prose > *:last-child {\n margin-bottom: 0;\n }\n.prose ul {\n list-style-type: disc;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol {\n list-style-type: lower-alpha;\n margin-block: 0 1rem;\n margin-inline: var(--list-indent) 0;\n }\n.prose ol.list-decimal {\n list-style-type: decimal;\n }\n.prose li {\n padding-inline-start: 0.5rem;\n }\n.prose hr {\n margin: var(--question-padding) 1rem;\n border: none;\n height: 0.125rem;\n background-color: oklch(var(--muted));\n }\n.prose hr.compact {\n margin: 1rem;\n }\nblockquote {\n margin: 1em 2em;\n }\nblockquote >* {\n font-style: italic;\n }\nblockquote >p::before,\n blockquote >p:last-child::after,\n blockquote >ul::before,\n blockquote >ul:last-child > li:last-child::after {\n content: "“";\n font-family: Georgia;\n font-size: 2.5rem;\n margin-block: -.8rem 0;\n margin-inline: -1.4rem 0;\n position: absolute;\n color: #666;\n }\nblockquote >ul::before {\n margin-inline-start: calc(-1.1rem - var(--list-indent));\n }\nblockquote >p:last-child::after,\n blockquote >ul:last-child > li:last-child::after {\n content: "”";\n margin: 0;\n margin-inline-start: -.1rem\n }\nblockquote.blue-quotes p::before,\n blockquote.blue-quotes p:last-child::after {\n color: #298ED5;\n }\n.visible {\n visibility: visible;\n}\n.absolute {\n position: absolute;\n}\n.sticky {\n position: sticky;\n}\n.order-last {\n order: 9999;\n}\n.float-right {\n float: right;\n}\n.m-panel-padding {\n margin: var(--panel-padding);\n}\n.mx-1 {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n.me-1 {\n margin-inline-end: 0.25rem;\n}\n.mt-1 {\n margin-top: 0.25rem;\n}\n.mt-3 {\n margin-top: 0.75rem;\n}\n.block {\n display: block;\n}\n.inline-block {\n display: inline-block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.table {\n display: table;\n}\n.hidden {\n display: none;\n}\n.w-1\\/2 {\n width: 50%;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-1\\/4 {\n width: 25%;\n}\n.w-1\\/5 {\n width: 20%;\n}\n.w-1\\/6 {\n width: 16.666667%;\n}\n.w-2\\/3 {\n width: 66.666667%;\n}\n.w-2\\/5 {\n width: 40%;\n}\n.w-3\\/4 {\n width: 75%;\n}\n.w-3\\/5 {\n width: 60%;\n}\n.w-4\\/5 {\n width: 80%;\n}\n.w-5\\/6 {\n width: 83.333333%;\n}\n.w-full {\n width: 100%;\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.justify-between {\n justify-content: space-between;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-warning {\n --tw-border-opacity: 1;\n border-color: rgb(255 165 0 / var(--tw-border-opacity));\n}\n.bg-slate-100 {\n --tw-bg-opacity: 1;\n background-color: rgb(241 245 249 / var(--tw-bg-opacity));\n}\n.p-panel-padding {\n padding: var(--panel-padding);\n}\n.text-center {\n text-align: center;\n}\n.align-top {\n vertical-align: top;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.font-light {\n font-weight: 300;\n}\n.font-medium {\n font-weight: 500;\n}\n.underline {\n text-decoration-line: underline;\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n:host > div {\n background-color: oklch(var(--page));\n color: oklch(var(--foreground));\n min-height: 100cqh;\n}\n:host > div > * {\n max-width: var(--max-page-width);\n margin: 0 auto;\n}\n.panel + .panel {\n margin-top: 5rem;\n}\n.option .labelwrapper p {\n display: inline; /* temp fix, should be stripped by quby-compiler */\n}\n.item.question, .question-bar {\n --question-bar-color: var(--super-muted);\n box-shadow: calc(-1 * var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(0px - var(--question-bar-width) - var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n}\n.item.question:dir(rtl), .question-bar:dir(rtl) {\n box-shadow: calc(var(--question-bar-padding)) 0 0 0 oklch(var(--page)), calc(var(--question-bar-width) + var(--question-bar-padding)) 0px 0px 0px oklch(var(--question-bar-color));\n }\n.item.question.active, .item.question .item:has(.active), .question-bar.active, .question-bar .item:has(.active) {\n --question-bar-color: var(--primary);\n }\n.item.question.errors, .question-bar.errors {\n --question-bar-color: var(--error-background);\n }\n.item.question.errors.active, .question-bar.errors.active {\n --question-bar-color: var(--error-bar);\n }\n.item .main {\n font-weight: 700;\n}\n.item .main em {\n font-weight: inherit;\n }\n.item .main strong {\n font-weight: 900;\n}\n.item .main {\n margin-bottom: 0.25rem; /* margin to .description, collapses with .field if that is the next element */\n}\n.item .inner-title {\n margin: 1rem 0 0.5rem;\n font-weight: 600;\n }\n.item .inner-title em {\n font-weight: 700;\n}\n.item .inner-title strong {\n font-weight: 800;\n}\n.item .description-and-fields > .description {\n font-weight: 300;\n}\n.item .description-and-fields > .description em {\n font-weight: 400;\n}\n.item .description-and-fields > .description strong {\n font-weight: 600;\n}\n.item .description-and-fields > .description .instruction {\n font-weight: 400;\n}\n.item .description-and-fields > .description .example {}\n.item .description-and-fields > .description .explanation {}\n.item .fields {\n margin-top: 0.5rem;\n}\nbutton {\n border-radius: 0.375rem;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-weight: 600;\n}\nbutton:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\nbutton.secondary {\n border-width: 2px;\n border-color: oklch(var(--primary));\n background-color: oklch(var(--background));\n color: oklch(var(--primary));\n}\nbutton.secondary:hover {\n border-color: oklch(var(--primary-hover));\n color: oklch(var(--primary-hover));\n }\nbutton.primary {\n background-color: oklch(var(--primary));\n color: oklch(var(--background));\n}\nbutton.primary:hover {\n background-color: oklch(var(--primary-hover));\n }\n.info-item {\n --icon-size: 20px;\n --icon-margin: 8px;\n}\n.info-item .info-html {\n margin-bottom: var(--question-padding);\n z-index: 1; /* prevent showing under slider */\n padding-inline-end: calc(var(--icon-size) + 2 * var(--icon-margin));\n }\n.info-item .info-html.open { /* opened by clicking icon */\n position: sticky;\n top: 0;\n }\n.info-item .info-html>div { /* actual content, extra div needed to animate scale. */\n transform-origin: center top;\n transition: inherit;\n }\n.info-item .info-html>div :first-child {\n margin-top: 0;\n }\n.info-item .info-html>div :last-child {\n margin-bottom: 0;\n }\n.info-item .info-html.opening {\n height: 0;\n margin-bottom: 0;\n }\n.info-item .info-html.opening>div { \n transform: scale(1, 0); /* animating scale, since we can\'t both hide content and have the icon float */\n }\n.info-item .info-html {\n transition: all 0.3s linear;\n interpolate-size: allow-keywords;\n}\n/* gradient under info-html, to make text fade under it */\n.info-item .info-html::after {\n content: "";\n position: absolute;\n bottom: calc(-1 * var(--question-padding));\n height: var(--question-padding);\n width: 100%;\n left: 0;\n background: linear-gradient(in oklch, oklch(var(--page)), transparent);\n }\n.info-item .info-icon {\n position: relative; /* with z-index to make it appear above the info-html */\n z-index: 2;\n float: inline-end;\n top: 0;\n transition: margin 0.5s;\n position: sticky;\n }\n.info-item .info-icon:hover {\n cursor: pointer;\n }\n.info-item .info-icon.stuck {\n margin-right: calc(-1 * var(--panel-padding));\n }\n.info-item .info-icon svg {\n width: var(--icon-size);\n height: var(--icon-size);\n margin: var(--icon-margin);\n }\n/* default type */\n.info-item.info .info-html, .info-item.info .info-icon {\n background-color: oklch(var(--info-block-bg));\n }\n.info-item.info .info-html {\n padding: 0.5rem;\n color: oklch(var(--info-block-fg));\n}\n/* type actionbar */\n.info-item.question-bar .info-html, .info-item.question-bar info-icon {\n background-color: oklch(var(--page));\n }\n.info-item.question-bar .info-html {\n padding: 0;\n }\n.info-item.question-bar .info-html>div {\n max-height: 40vh; /* Just a precaution, should be shorter */\n overflow: auto;\n }\n.item.radio .option, .item.check_box .option {\n display: flex;\n flex-wrap: wrap;\n}\n.item.radio .option .radiocheckwrapper, .item.check_box .option .radiocheckwrapper {\n flex: 0 0 var(--checkradio-size);\n }\n.item.radio .option .value, .item.check_box .option .value {\n flex: 0 0 2rem;\n text-align: right;\n }\n.item.radio .option .labelwrapper, .item.check_box .option .labelwrapper {\n flex: 1 1 0;\n }\n.item.radio .option .labelwrapper>*, .item.check_box .option .labelwrapper>* {\n padding-inline-start: var(--checkradio-padding); /* padding in label, so no space between input and label */\n }\n.item.radio .option .subquestions, .item.check_box .option .subquestions {\n width: 100%; /* forces it to the next lines */\n }\n.item.radio .option + .option, .item.check_box .option + .option {\n margin-top: calc(var(--option-gap-y) * 0.25rem);\n }\n.subquestions {\n margin-inline-start: calc(var(--question-bar-padding) + var(--checkradio-size)/2 + 2px); /* align active bar under checkbox/radio */\n}\n/* context-description doesn\'t live under question, so doesn\'t react to a single question override. */\n.item, .context-description {\n position: relative;\n margin-bottom: calc(var(--question-padding) * var(--question-mb-factor));\n}\n.item:has(+.indent.question) {\n margin-bottom: 0;\n padding-bottom: calc(var(--question-padding) * var(--question-mb-factor) / 2);\n}\n.question.indent {\n padding-inline-start: calc(var(--checkradio-size) + var(--checkradio-padding));\n}\n/* align with option text, it\'s often below selects and a fine padding for other types */\n.question.indent::before {\n content: "";\n position: absolute;\n top: 10px;\n inset-inline-start: 0;\n margin-inline-start: calc(0px - var(--question-bar-padding));\n width: calc(var(--checkradio-size) + var(--question-bar-padding));\n height: var(--question-bar-width);\n background-color: oklch(var(--super-muted));\n }\n.question.indent.active::before {\n background-color: oklch(var(--primary));\n }\n.subquestions .item {\n margin-bottom: 0;\n}\n/* Distance from inputs feel than from text, since they don\'t have extra line-height padding.\n * So we add a bit of padding, but not for radio/checkbox, \n * since they do have line-height from the labels.\n * but also because it would prevent margin-collapsing when they have subquestions.\n * Let\'s hope someday text-box-trim will make this obsolete. */\n.item:not(.radio):not(.check_box) .description-and-fields {\n padding-bottom: 0.5em;\n}\n.item .error {\n background: oklch(var(--error-background));\n outline: 1px solid oklch(var(--error-bar));\n border-radius: var(--default-radius);\n margin: 0.25rem;\n padding: 0.25rem;\n}\nfooter {\n font-weight: 300;\n}\nfooter em {\n font-weight: 400;\n}\nfooter strong {\n font-weight: 600;\n}\nfooter {\n font-size: .875rem;\n padding: var(--panel-padding);\n color: oklch(var(--foreground-80));\n}\n:is(.dark .dark\\:bg-slate-700) {\n --tw-bg-opacity: 1;\n background-color: rgb(51 65 85 / var(--tw-bg-opacity));\n}\n';
|
|
18122
18145
|
const oldStyles = ':host {\n --background: 0 0% 100%;\n}\n\n.item.date_parts .mr-1 {\n margin-right: 0.125rem;\n}\n.item.date_parts .mb-2 { \n margin-bottom: 0.25rem;\n}\n\n\n/* line 5, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n}\n\n/* line 22, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nhtml {\n line-height: 1;\n}\n\n/* line 24, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nol, ul {\n list-style: none;\n}\n\n/* line 26, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\n/* line 28, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\ncaption, th, td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n}\n\n/* line 30, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nq, blockquote {\n quotes: none;\n}\n/* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\nq:before, q:after, blockquote:before, blockquote:after {\n content: "";\n content: none;\n}\n\n/* line 32, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\na img {\n border: none;\n}\n\n/* line 116, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\narticle, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n display: block;\n}\n\n/* line 3, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#modalFrameDialog {\n padding: 0;\n}\n\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#modalFrame {\n width: 100%;\n height: 99%;\n}\n\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.x_container {\n display: none;\n}\n\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsup, sub {\n font-size: 0.8em !important;\n position: relative;\n line-height: 0;\n}\n\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsup {\n top: -0.4em;\n}\n\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nsub {\n bottom: -0.25em;\n}\n\n/* line 29, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nhtml {\n overflow-x: hidden;\n}\n\n/* line 33, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nbody {\n font-family: Verdana, sans-serif;\n font-size: 0.8em;\n line-height: normal;\n background-color: #eeeeee;\n max-width: 100%;\n overflow-x: hidden;\n position: relative;\n}\n\n/* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.panel-action-links {\n text-align: right;\n margin-bottom: 1em;\n}\n\n/* line 48, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.panel-action-link {\n margin-left: 1em;\n}\n\n/* line 52, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot {\n margin: 0 auto;\n max-width: 900px;\n text-align: right;\n color: #aaaaaa;\n}\n/* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot:before {\n content: "\\2014";\n}\n/* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#mastfoot:after {\n content: "\\2014";\n}\n\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#noscript-warning {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n background: yellow;\n border: 4px solid red;\n color: red;\n font-size: 1.5em;\n text-align: center;\n}\n\n/* line 79, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.nowrap {\n white-space: nowrap;\n}\n\n/* line 83, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nselect {\n width: 100%;\n}\n\n/* line 87, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ni {\n font-style: italic !important;\n}\n\n/* line 91, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nem {\n font-weight: bold;\n}\n\n/* line 95, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content {\n margin-bottom: 4em;\n}\n/* line 98, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content input[disabled] {\n background-color: #ddd;\n}\n/* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash {\n max-width: 59em;\n _width: 59em;\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 1em;\n}\n/* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n#content .flash:after {\n content: "";\n display: table;\n clear: both;\n}\n/* line 106, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash div {\n padding: 5px;\n background: #333333;\n border: 1px solid black;\n}\n/* line 112, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .error {\n background: #ffbbbb;\n border: 1px solid #ff3333;\n}\n/* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .notice {\n background: #ffffcc;\n border: 1px solid #ffcc66;\n}\n/* line 120, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .flash .success {\n background-color: #ccffcc;\n border: 1px solid #11cc11;\n}\n/* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit {\n background: #ffffcc;\n border: 1px solid #ffcc66;\n padding: 3em;\n font-size: 1.2em;\n margin-bottom: 5em;\n}\n/* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit h1 {\n font-weight: bold;\n margin-bottom: 1em;\n}\n/* line 134, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content #force-submit p {\n margin-bottom: 1em;\n}\n/* line 137, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .specifier {\n margin: 0 !important;\n}\n/* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n#content .specifier.errors {\n width: auto !important;\n float: left;\n}\n\n/* line 148, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.evenRow {\n background-color: #eeeeee;\n}\n\n/* line 157, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.hotkeyDialog p {\n margin: 1em 0;\n}\n/* line 160, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.hotkeyDialog td {\n border: 0px;\n}\n\n/* line 165, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable {\n width: 100%;\n border-collapse: collapse;\n margin-bottom: 1.5em;\n}\n/* line 169, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable thead tr th {\n background: black;\n color: white;\n padding: 5px;\n}\n/* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable tr.even {\n background: #e9e9e9;\n}\n/* line 179, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ntable td {\n padding: 5px;\n border: 1px solid #cecece;\n vertical-align: top;\n}\n\n/* line 186, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.ui-dialog-buttonpane {\n overflow: hidden !important;\n}\n\n/* line 190, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\npre {\n font-family: "Deja Vu Sans Mono", "Courier New", "Courier", monospace;\n}\n\n/* line 194, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.question {\n background: #e5e5e5;\n margin: 2em;\n padding: 2em;\n}\n\n/* line 202, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nlabel.placeholder {\n cursor: text;\n padding: 4px 4px 4px 4px;\n color: #999999;\n}\n\n/* line 209, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n color: #999999;\n}\n\n/* line 213, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\ninput:placeholder, textarea:placeholder {\n color: #999999;\n}\n\n/* line 217, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.focus {\n background: #cce8ed !important;\n}\n\n/* line 221, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.print {\n width: 83.05085%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n margin-top: 2em;\n}\n/* line 224, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.print a {\n color: blue;\n text-decoration: underline;\n}\n\n/* line 230, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\n.error .stacktrace {\n color: #777;\n white-space: pre-line;\n}\n\n/* line 235, /home/marten/rgoc/quby/app/assets/stylesheets/quby/screen.scss */\nhtml.busy, html.busy * {\n cursor: wait !important;\n}\n\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.hidden {\n display: none;\n}\n\n/* line 7, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .noVisibleQuestions, .single-page .noVisibleQuestions {\n display: none;\n}\n/* line 9, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .hide, .single-page .hide {\n margin: 0 !important;\n outline: none !important;\n}\n/* line 14, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .hide > *, .single-page .hide > * {\n display: none !important;\n}\n/* line 34, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel, .single-page .panel {\n background: white;\n}\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .panel, .single-page .panel {\n max-width: 59em;\n _width: 59em;\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n padding-top: 20px;\n}\n/* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n.paged .panel:after, .single-page .panel:after {\n content: "";\n display: table;\n clear: both;\n}\n/* line 40, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table div, .single-page .panel .table div, .paged .panel .table span, .single-page .panel .table span, .paged .panel .table applet, .single-page .panel .table applet, .paged .panel .table object, .single-page .panel .table object, .paged .panel .table iframe, .single-page .panel .table iframe,\n.paged .panel .table h1,\n.single-page .panel .table h1, .paged .panel .table h2, .single-page .panel .table h2, .paged .panel .table h3, .single-page .panel .table h3, .paged .panel .table h4, .single-page .panel .table h4, .paged .panel .table h5, .single-page .panel .table h5, .paged .panel .table h6, .single-page .panel .table h6, .paged .panel .table p, .single-page .panel .table p, .paged .panel .table blockquote, .single-page .panel .table blockquote, .paged .panel .table pre, .single-page .panel .table pre,\n.paged .panel .table a,\n.single-page .panel .table a, .paged .panel .table abbr, .single-page .panel .table abbr, .paged .panel .table acronym, .single-page .panel .table acronym, .paged .panel .table address, .single-page .panel .table address, .paged .panel .table big, .single-page .panel .table big, .paged .panel .table cite, .single-page .panel .table cite, .paged .panel .table code, .single-page .panel .table code,\n.paged .panel .table del,\n.single-page .panel .table del, .paged .panel .table dfn, .single-page .panel .table dfn, .paged .panel .table em, .single-page .panel .table em, .paged .panel .table img, .single-page .panel .table img, .paged .panel .table ins, .single-page .panel .table ins, .paged .panel .table kbd, .single-page .panel .table kbd, .paged .panel .table q, .single-page .panel .table q, .paged .panel .table s, .single-page .panel .table s, .paged .panel .table samp, .single-page .panel .table samp,\n.paged .panel .table small,\n.single-page .panel .table small, .paged .panel .table strike, .single-page .panel .table strike, .paged .panel .table strong, .single-page .panel .table strong, .paged .panel .table sub, .single-page .panel .table sub, .paged .panel .table sup, .single-page .panel .table sup, .paged .panel .table tt, .single-page .panel .table tt, .paged .panel .table var, .single-page .panel .table var,\n.paged .panel .table b,\n.single-page .panel .table b, .paged .panel .table u, .single-page .panel .table u, .paged .panel .table i, .single-page .panel .table i, .paged .panel .table center, .single-page .panel .table center,\n.paged .panel .table dl,\n.single-page .panel .table dl, .paged .panel .table dt, .single-page .panel .table dt, .paged .panel .table dd, .single-page .panel .table dd, .paged .panel .table ol, .single-page .panel .table ol, .paged .panel .table ul, .single-page .panel .table ul, .paged .panel .table li, .single-page .panel .table li,\n.paged .panel .table fieldset,\n.single-page .panel .table fieldset, .paged .panel .table form, .single-page .panel .table form, .paged .panel .table label, .single-page .panel .table label, .paged .panel .table legend, .single-page .panel .table legend,\n.paged .panel .table table,\n.single-page .panel .table table, .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table tbody, .single-page .panel .table tbody, .paged .panel .table tfoot, .single-page .panel .table tfoot, .paged .panel .table thead, .single-page .panel .table thead, .paged .panel .table tr, .single-page .panel .table tr, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td,\n.paged .panel .table article,\n.single-page .panel .table article, .paged .panel .table aside, .single-page .panel .table aside, .paged .panel .table canvas, .single-page .panel .table canvas, .paged .panel .table details, .single-page .panel .table details, .paged .panel .table embed, .single-page .panel .table embed,\n.paged .panel .table figure,\n.single-page .panel .table figure, .paged .panel .table figcaption, .single-page .panel .table figcaption, .paged .panel .table footer, .single-page .panel .table footer, .paged .panel .table header, .single-page .panel .table header, .paged .panel .table hgroup, .single-page .panel .table hgroup,\n.paged .panel .table menu,\n.single-page .panel .table menu, .paged .panel .table nav, .single-page .panel .table nav, .paged .panel .table output, .single-page .panel .table output, .paged .panel .table ruby, .single-page .panel .table ruby, .paged .panel .table section, .single-page .panel .table section, .paged .panel .table summary, .single-page .panel .table summary,\n.paged .panel .table time,\n.single-page .panel .table time, .paged .panel .table mark, .single-page .panel .table mark, .paged .panel .table audio, .single-page .panel .table audio, .paged .panel .table video, .single-page .panel .table video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n}\n/* line 55, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table table, .single-page .panel .table table {\n border-collapse: collapse;\n border-spacing: 0;\n}\n/* line 57, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n}\n/* line 59, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table q, .single-page .panel .table q, .paged .panel .table blockquote, .single-page .panel .table blockquote {\n quotes: none;\n}\n/* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table q:before, .single-page .panel .table q:before, .paged .panel .table q:after, .single-page .panel .table q:after, .paged .panel .table blockquote:before, .single-page .panel .table blockquote:before, .paged .panel .table blockquote:after, .single-page .panel .table blockquote:after {\n content: "";\n content: none;\n}\n/* line 61, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n.paged .panel .table a img, .single-page .panel .table a img {\n border: none;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table p, .single-page .panel .table p, .paged .panel .table div, .single-page .panel .table div {\n display: inline;\n}\n/* line 8, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table caption, .single-page .panel .table caption {\n margin-bottom: 0.5em;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .errors, .single-page .panel .table .errors {\n outline: 2px solid red !important;\n}\n/* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .error, .single-page .panel .table .error {\n display: inline-block;\n background: #ffbbbb;\n outline: 1px solid #ff3333;\n}\n/* line 20, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .error.hidden, .single-page .panel .table .error.hidden {\n display: none;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table, .single-page .panel .table table {\n border-bottom: 1px solid black;\n border-collapse: collapse;\n margin: 0;\n}\n/* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table *, .single-page .panel .table table * {\n width: auto;\n}\n/* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .option, .single-page .panel .table table .option {\n white-space: normal;\n}\n/* line 36, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table td > div > *, .single-page .panel .table table td > div > * {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n/* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row, .single-page .panel .table table .row {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n float: none;\n display: table-row;\n}\n/* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row td, .single-page .panel .table table .row td, .paged .panel .table table .row th, .single-page .panel .table table .row th {\n display: table-cell;\n border: 0;\n border-bottom: 1px solid #bbb;\n vertical-align: top;\n float: none;\n}\n/* line 50, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row td.main, .single-page .panel .table table .row td.main, .paged .panel .table table .row th.main, .single-page .panel .table table .row th.main {\n vertical-align: middle;\n}\n/* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row.inner_row td, .single-page .panel .table table .row.inner_row td {\n border: 0;\n}\n/* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row:first-child td, .single-page .panel .table table .row:first-child td {\n border-top: 1px solid #bbb;\n}\n/* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input, .single-page .panel .table table .row input {\n /* These properties get overriden by our table reset, so we have to re-apply them with a more specific selector */\n}\n/* line 63, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.float, .single-page .panel .table table .row input.float, .paged .panel .table table .row input.integer, .single-page .panel .table table .row input.integer {\n width: 54px;\n}\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.string, .single-page .panel .table table .row input.string, .paged .panel .table table .row input.textarea, .single-page .panel .table table .row input.textarea {\n width: 92%;\n}\n/* line 73, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.sized, .single-page .panel .table table .row input.sized {\n width: auto;\n}\n/* line 76, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row input.fd-form-element-hidden, .single-page .panel .table table .row input.fd-form-element-hidden {\n display: none;\n}\n/* line 86, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table table .row .unit, .single-page .panel .table table .row .unit {\n vertical-align: -20%;\n padding-left: 4px;\n}\n/* line 93, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .item, .single-page .panel .table .item {\n float: none;\n width: auto;\n margin-right: auto;\n display: block;\n}\n/* line 96, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .main, .single-page .panel .table .main {\n width: 33.33333%;\n float: none !important;\n display: table-cell !important;\n}\n/* line 100, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .main label small, .single-page .panel .table .main label small {\n font-size: 0.7em;\n}\n/* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .description, .single-page .panel .table .description {\n text-align: right;\n}\n/* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .option_sets .option, .single-page .panel .table .option_sets .option {\n padding-left: 1em;\n padding-bottom: 0.5em;\n vertical-align: bottom;\n}\n/* line 113, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .dark, .single-page .panel .table .dark {\n background-color: #eee;\n}\n/* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n.paged .panel .table .light, .single-page .panel .table .light {\n background-color: #fff;\n}\n@media (max-width: 420px) {\n /* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n .paged .horizontal.item.scale table, .single-page .horizontal.item.scale table {\n table-layout: fixed;\n }\n /* line 18, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n .paged .horizontal.item.scale table td.last p, .single-page .horizontal.item.scale table td.last p {\n position: absolute;\n right: 20px;\n max-width: 5rem;\n text-align: right;\n }\n}\n/* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged tr, .single-page tr {\n border: 1px solid #aaa;\n}\n/* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item, .single-page .item {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-bottom: 18px;\n}\n/* line 41, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option, .single-page .item.horizontal.radio .option, .paged .item.horizontal.check_box .option, .single-page .item.horizontal.check_box .option,\n.paged .item.vertical.radio .option,\n.single-page .item.vertical.radio .option,\n.paged .item.vertical.check_box .option,\n.single-page .item.vertical.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option .radiocheckwrapper, .single-page .item.horizontal.radio .option .radiocheckwrapper, .paged .item.horizontal.check_box .option .radiocheckwrapper, .single-page .item.horizontal.check_box .option .radiocheckwrapper,\n.paged .item.vertical.radio .option .radiocheckwrapper,\n.single-page .item.vertical.radio .option .radiocheckwrapper,\n.paged .item.vertical.check_box .option .radiocheckwrapper,\n.single-page .item.vertical.check_box .option .radiocheckwrapper {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option .labelwrapper, .single-page .item.horizontal.radio .option .labelwrapper, .paged .item.horizontal.check_box .option .labelwrapper, .single-page .item.horizontal.check_box .option .labelwrapper,\n.paged .item.vertical.radio .option .labelwrapper,\n.single-page .item.vertical.radio .option .labelwrapper,\n.paged .item.vertical.check_box .option .labelwrapper,\n.single-page .item.vertical.check_box .option .labelwrapper {\n width: 91.52542%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 47, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option.show_values .value, .single-page .item.horizontal.radio .option.show_values .value, .paged .item.horizontal.check_box .option.show_values .value, .single-page .item.horizontal.check_box .option.show_values .value,\n.paged .item.vertical.radio .option.show_values .value,\n.single-page .item.vertical.radio .option.show_values .value,\n.paged .item.vertical.check_box .option.show_values .value,\n.single-page .item.vertical.check_box .option.show_values .value {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 48, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.radio .option.show_values .labelwrapper, .single-page .item.horizontal.radio .option.show_values .labelwrapper, .paged .item.horizontal.check_box .option.show_values .labelwrapper, .single-page .item.horizontal.check_box .option.show_values .labelwrapper,\n.paged .item.vertical.radio .option.show_values .labelwrapper,\n.single-page .item.vertical.radio .option.show_values .labelwrapper,\n.paged .item.vertical.check_box .option.show_values .labelwrapper,\n.single-page .item.vertical.check_box .option.show_values .labelwrapper {\n width: 83.05085%;\n float: right;\n margin-right: 0;\n display: inline;\n}\n/* line 66, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.string input, .single-page .item.horizontal.string input, .paged .item.horizontal.string textarea, .single-page .item.horizontal.string textarea, .paged .item.horizontal.textarea input, .single-page .item.horizontal.textarea input, .paged .item.horizontal.textarea textarea, .single-page .item.horizontal.textarea textarea,\n.paged .item.vertical.string input,\n.single-page .item.vertical.string input,\n.paged .item.vertical.string textarea,\n.single-page .item.vertical.string textarea,\n.paged .item.vertical.textarea input,\n.single-page .item.vertical.textarea input,\n.paged .item.vertical.textarea textarea,\n.single-page .item.vertical.textarea textarea {\n width: 100%;\n margin-right: 0;\n display: inline;\n}\n/* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .item.horizontal.string .sized, .single-page .item.horizontal.string .sized, .paged .item.horizontal.textarea .sized, .single-page .item.horizontal.textarea .sized,\n.paged .item.vertical.string .sized,\n.single-page .item.vertical.string .sized,\n.paged .item.vertical.textarea .sized,\n.single-page .item.vertical.textarea .sized {\n width: auto;\n}\n/* line 97, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar, .single-page .progress-bar {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-left: -20px;\n margin-right: -20px;\n padding: 1.5em 20px;\n}\n/* line 104, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider, .single-page .progress-bar .progress-wrapper .progress-slider {\n background-position: 0 3px;\n display: inline-block;\n zoom: 1;\n}\n/* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .progress-bar .progress-wrapper .progress-slider .progress-stop {\n margin: 0 2px;\n width: 8px;\n height: 8px;\n}\n/* line 112, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .progress-bar .progress-wrapper .progress-slider.long-list, .single-page .progress-bar .progress-wrapper .progress-slider.long-list {\n display: none;\n}\n/* line 119, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons, .single-page .buttons {\n width: 100%;\n float: right;\n margin-right: 0;\n display: inline;\n margin-left: -20px;\n margin-right: -20px;\n padding: 1.5em 20px;\n border-bottom: 1px dotted #d0d0d0;\n}\n/* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .back, .single-page .buttons .back {\n width: 49.15254%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 127, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .prev, .single-page .buttons .prev {\n width: 49.15254%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n}\n/* line 128, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .next, .single-page .buttons .next {\n width: 49.15254%;\n float: right;\n margin-right: 0;\n display: inline;\n text-align: right;\n}\n/* line 129, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .abort, .single-page .buttons .abort {\n display: none;\n}\n/* line 130, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .print, .single-page .buttons .print {\n display: none;\n}\n/* line 131, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .print, .single-page .buttons .print {\n width: 100%;\n float: left;\n margin-right: 1.69492%;\n display: inline;\n text-align: right;\n}\n/* line 132, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/mobile.scss */\n.paged .buttons .save, .single-page .buttons .save {\n width: 49.15254%;\n float: right;\n margin-right: 0;\n display: inline;\n text-align: right;\n}\n@media (min-width: 35em) {\n /* line 2, /home/marten/rgoc/quby/app/assets/stylesheets/quby/general/desktop.scss */\n .paged #content, .single-page #content {\n margin: 6em auto 0em auto;\n }\n /* line 9, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged tr, .single-page tr {\n border: none;\n }\n /* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .panel, .single-page .panel {\n padding-left: 1em;\n padding-right: 1em;\n margin-left: auto;\n margin-right: auto;\n /* Overwrite width. New susy version seems to break this */\n max-width: 49.5em;\n border: 4px solid #dddddd;\n margin-top: 6em;\n padding: 3em 2em 1.5em;\n }\n /* line 38, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/utilities/general/_clearfix.scss */\n .paged .panel:after, .single-page .panel:after {\n content: "";\n display: table;\n clear: both;\n }\n /* line 40, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table div, .single-page .panel .table div, .paged .panel .table span, .single-page .panel .table span, .paged .panel .table applet, .single-page .panel .table applet, .paged .panel .table object, .single-page .panel .table object, .paged .panel .table iframe, .single-page .panel .table iframe,\n .paged .panel .table h1,\n .single-page .panel .table h1, .paged .panel .table h2, .single-page .panel .table h2, .paged .panel .table h3, .single-page .panel .table h3, .paged .panel .table h4, .single-page .panel .table h4, .paged .panel .table h5, .single-page .panel .table h5, .paged .panel .table h6, .single-page .panel .table h6, .paged .panel .table p, .single-page .panel .table p, .paged .panel .table blockquote, .single-page .panel .table blockquote, .paged .panel .table pre, .single-page .panel .table pre,\n .paged .panel .table a,\n .single-page .panel .table a, .paged .panel .table abbr, .single-page .panel .table abbr, .paged .panel .table acronym, .single-page .panel .table acronym, .paged .panel .table address, .single-page .panel .table address, .paged .panel .table big, .single-page .panel .table big, .paged .panel .table cite, .single-page .panel .table cite, .paged .panel .table code, .single-page .panel .table code,\n .paged .panel .table del,\n .single-page .panel .table del, .paged .panel .table dfn, .single-page .panel .table dfn, .paged .panel .table em, .single-page .panel .table em, .paged .panel .table img, .single-page .panel .table img, .paged .panel .table ins, .single-page .panel .table ins, .paged .panel .table kbd, .single-page .panel .table kbd, .paged .panel .table q, .single-page .panel .table q, .paged .panel .table s, .single-page .panel .table s, .paged .panel .table samp, .single-page .panel .table samp,\n .paged .panel .table small,\n .single-page .panel .table small, .paged .panel .table strike, .single-page .panel .table strike, .paged .panel .table strong, .single-page .panel .table strong, .paged .panel .table sub, .single-page .panel .table sub, .paged .panel .table sup, .single-page .panel .table sup, .paged .panel .table tt, .single-page .panel .table tt, .paged .panel .table var, .single-page .panel .table var,\n .paged .panel .table b,\n .single-page .panel .table b, .paged .panel .table u, .single-page .panel .table u, .paged .panel .table i, .single-page .panel .table i, .paged .panel .table center, .single-page .panel .table center,\n .paged .panel .table dl,\n .single-page .panel .table dl, .paged .panel .table dt, .single-page .panel .table dt, .paged .panel .table dd, .single-page .panel .table dd, .paged .panel .table ol, .single-page .panel .table ol, .paged .panel .table ul, .single-page .panel .table ul, .paged .panel .table li, .single-page .panel .table li,\n .paged .panel .table fieldset,\n .single-page .panel .table fieldset, .paged .panel .table form, .single-page .panel .table form, .paged .panel .table label, .single-page .panel .table label, .paged .panel .table legend, .single-page .panel .table legend,\n .paged .panel .table table,\n .single-page .panel .table table, .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table tbody, .single-page .panel .table tbody, .paged .panel .table tfoot, .single-page .panel .table tfoot, .paged .panel .table thead, .single-page .panel .table thead, .paged .panel .table tr, .single-page .panel .table tr, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td,\n .paged .panel .table article,\n .single-page .panel .table article, .paged .panel .table aside, .single-page .panel .table aside, .paged .panel .table canvas, .single-page .panel .table canvas, .paged .panel .table details, .single-page .panel .table details, .paged .panel .table embed, .single-page .panel .table embed,\n .paged .panel .table figure,\n .single-page .panel .table figure, .paged .panel .table figcaption, .single-page .panel .table figcaption, .paged .panel .table footer, .single-page .panel .table footer, .paged .panel .table header, .single-page .panel .table header, .paged .panel .table hgroup, .single-page .panel .table hgroup,\n .paged .panel .table menu,\n .single-page .panel .table menu, .paged .panel .table nav, .single-page .panel .table nav, .paged .panel .table output, .single-page .panel .table output, .paged .panel .table ruby, .single-page .panel .table ruby, .paged .panel .table section, .single-page .panel .table section, .paged .panel .table summary, .single-page .panel .table summary,\n .paged .panel .table time,\n .single-page .panel .table time, .paged .panel .table mark, .single-page .panel .table mark, .paged .panel .table audio, .single-page .panel .table audio, .paged .panel .table video, .single-page .panel .table video {\n margin: 0;\n padding: 0;\n border: 0;\n font: inherit;\n font-size: 100%;\n vertical-align: baseline;\n }\n /* line 55, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table table, .single-page .panel .table table {\n border-collapse: collapse;\n border-spacing: 0;\n }\n /* line 57, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table caption, .single-page .panel .table caption, .paged .panel .table th, .single-page .panel .table th, .paged .panel .table td, .single-page .panel .table td {\n text-align: left;\n font-weight: normal;\n vertical-align: middle;\n }\n /* line 59, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table q, .single-page .panel .table q, .paged .panel .table blockquote, .single-page .panel .table blockquote {\n quotes: none;\n }\n /* line 103, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table q:before, .single-page .panel .table q:before, .paged .panel .table q:after, .single-page .panel .table q:after, .paged .panel .table blockquote:before, .single-page .panel .table blockquote:before, .paged .panel .table blockquote:after, .single-page .panel .table blockquote:after {\n content: "";\n content: none;\n }\n /* line 61, /home/marten/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/compass-core-1.0.3/stylesheets/compass/reset/_utilities.scss */\n .paged .panel .table a img, .single-page .panel .table a img {\n border: none;\n }\n /* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table p, .single-page .panel .table p, .paged .panel .table div, .single-page .panel .table div {\n display: inline;\n }\n /* line 8, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table caption, .single-page .panel .table caption {\n margin-bottom: 0.5em;\n }\n /* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .errors, .single-page .panel .table .errors {\n outline: 2px solid red !important;\n }\n /* line 16, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .error, .single-page .panel .table .error {\n display: inline-block;\n background: #ffbbbb;\n outline: 1px solid #ff3333;\n }\n /* line 20, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .error.hidden, .single-page .panel .table .error.hidden {\n display: none;\n }\n /* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table, .single-page .panel .table table {\n border-bottom: 1px solid black;\n border-collapse: collapse;\n margin: 0;\n }\n /* line 28, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table *, .single-page .panel .table table * {\n width: auto;\n }\n /* line 32, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .option, .single-page .panel .table table .option {\n white-space: normal;\n }\n /* line 36, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table td > div > *, .single-page .panel .table table td > div > * {\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n }\n /* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row, .single-page .panel .table table .row {\n width: 100%;\n float: right;\n margin-right: 0;\n float: none;\n display: table-row;\n }\n /* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row td, .single-page .panel .table table .row td, .paged .panel .table table .row th, .single-page .panel .table table .row th {\n display: table-cell;\n border: 0;\n border-bottom: 1px solid #bbb;\n vertical-align: top;\n float: none;\n }\n /* line 50, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row td.main, .single-page .panel .table table .row td.main, .paged .panel .table table .row th.main, .single-page .panel .table table .row th.main {\n vertical-align: middle;\n }\n /* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row.inner_row td, .single-page .panel .table table .row.inner_row td {\n border: 0;\n }\n /* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row:first-child td, .single-page .panel .table table .row:first-child td {\n border-top: 1px solid #bbb;\n }\n /* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input, .single-page .panel .table table .row input {\n /* These properties get overriden by our table reset, so we have to re-apply them with a more specific selector */\n }\n /* line 63, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.float, .single-page .panel .table table .row input.float, .paged .panel .table table .row input.integer, .single-page .panel .table table .row input.integer {\n width: 54px;\n }\n /* line 67, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.string, .single-page .panel .table table .row input.string, .paged .panel .table table .row input.textarea, .single-page .panel .table table .row input.textarea {\n width: 92%;\n }\n /* line 73, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.sized, .single-page .panel .table table .row input.sized {\n width: auto;\n }\n /* line 76, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row input.fd-form-element-hidden, .single-page .panel .table table .row input.fd-form-element-hidden {\n display: none;\n }\n /* line 86, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table table .row .unit, .single-page .panel .table table .row .unit {\n vertical-align: -20%;\n padding-left: 4px;\n }\n /* line 93, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .item, .single-page .panel .table .item {\n float: none;\n width: auto;\n margin-right: auto;\n }\n /* line 96, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .main, .single-page .panel .table .main {\n width: 33.33333%;\n float: none !important;\n display: table-cell !important;\n }\n /* line 100, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .main label small, .single-page .panel .table .main label small {\n font-size: 0.7em;\n }\n /* line 102, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .description, .single-page .panel .table .description {\n text-align: right;\n }\n /* line 107, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .option_sets .option, .single-page .panel .table .option_sets .option {\n padding-left: 1em;\n padding-bottom: 0.5em;\n vertical-align: bottom;\n }\n /* line 113, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .dark, .single-page .panel .table .dark {\n background-color: #eee;\n }\n /* line 116, /home/marten/rgoc/quby/app/assets/stylesheets/quby/table/layout.scss */\n .paged .panel .table .light, .single-page .panel .table .light {\n background-color: #fff;\n }\n /* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item, .single-page .item {\n width: 100%;\n float: right;\n margin-right: 0;\n margin-bottom: 18px;\n }\n /* line 34, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option, .single-page .item.horizontal.radio .option, .paged .item.horizontal.check_box .option, .single-page .item.horizontal.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 37, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .radiocheckwrapper, .single-page .item.horizontal.radio .option .radiocheckwrapper, .paged .item.horizontal.check_box .option .radiocheckwrapper, .single-page .item.horizontal.check_box .option .radiocheckwrapper {\n width: 4.0404%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .labelwrapper, .single-page .item.horizontal.radio .option .labelwrapper, .paged .item.horizontal.check_box .option .labelwrapper, .single-page .item.horizontal.check_box .option .labelwrapper {\n width: 94.94949%;\n float: right;\n margin-right: 0;\n }\n /* line 43, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option.show_values .value, .single-page .item.horizontal.radio .option.show_values .value, .paged .item.horizontal.check_box .option.show_values .value, .single-page .item.horizontal.check_box .option.show_values .value {\n width: 4.0404%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 44, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option.show_values .labelwrapper, .single-page .item.horizontal.radio .option.show_values .labelwrapper, .paged .item.horizontal.check_box .option.show_values .labelwrapper, .single-page .item.horizontal.check_box .option.show_values .labelwrapper {\n width: 89.89899%;\n float: right;\n margin-right: 0;\n }\n /* line 49, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions, .single-page .item.horizontal.radio .option .subquestions, .paged .item.horizontal.check_box .option .subquestions, .single-page .item.horizontal.check_box .option .subquestions {\n margin-left: 5.05051%;\n width: 74.74747%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 53, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .item, .single-page .item.horizontal.radio .option .subquestions .item, .paged .item.horizontal.check_box .option .subquestions .item, .single-page .item.horizontal.check_box .option .subquestions .item {\n width: 74.74747%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 55, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .item input, .single-page .item.horizontal.radio .option .subquestions .item input, .paged .item.horizontal.check_box .option .subquestions .item input, .single-page .item.horizontal.check_box .option .subquestions .item input {\n width: auto;\n }\n /* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .radiocheckwrapper, .single-page .item.horizontal.radio .option .subquestions .radiocheckwrapper, .paged .item.horizontal.check_box .option .subquestions .radiocheckwrapper, .single-page .item.horizontal.check_box .option .subquestions .radiocheckwrapper {\n width: 10px;\n padding-right: 20px;\n }\n /* line 62, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .option .subquestions .labelwrapper, .single-page .item.horizontal.radio .option .subquestions .labelwrapper, .paged .item.horizontal.check_box .option .subquestions .labelwrapper, .single-page .item.horizontal.check_box .option .subquestions .labelwrapper {\n width: auto;\n float: none;\n }\n /* line 69, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.radio .inner-title, .single-page .item.horizontal.radio .inner-title, .paged .item.horizontal.check_box .inner-title, .single-page .item.horizontal.check_box .inner-title {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 74, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.string input, .single-page .item.horizontal.string input, .paged .item.horizontal.string textarea, .single-page .item.horizontal.string textarea, .paged .item.horizontal.textarea input, .single-page .item.horizontal.textarea input, .paged .item.horizontal.textarea textarea, .single-page .item.horizontal.textarea textarea {\n width: 100%;\n margin-right: 0;\n }\n /* line 75, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.horizontal.string .sized, .single-page .item.horizontal.string .sized, .paged .item.horizontal.textarea .sized, .single-page .item.horizontal.textarea .sized {\n width: auto;\n }\n /* line 106, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical .main, .single-page .item.vertical .main {\n width: 39.39394%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 110, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical .description-and-fields, .single-page .item.vertical .description-and-fields {\n width: 59.59596%;\n float: right;\n margin-right: 0;\n float: left;\n }\n /* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description h2, .single-page .item.vertical .description-and-fields .description h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n }\n /* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description small, .single-page .item.vertical .description-and-fields .description small {\n font-size: 80%;\n }\n /* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description strong, .single-page .item.vertical .description-and-fields .description strong {\n font-style: italic;\n }\n /* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description em, .single-page .item.vertical .description-and-fields .description em {\n font-weight: bold;\n }\n /* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description p, .single-page .item.vertical .description-and-fields .description p {\n margin-bottom: 18px;\n }\n /* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul, .single-page .item.vertical .description-and-fields .description ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n }\n /* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li, .single-page .item.vertical .description-and-fields .description ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n }\n /* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li p, .single-page .item.vertical .description-and-fields .description ul li p {\n margin-bottom: 0;\n }\n /* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li ul, .single-page .item.vertical .description-and-fields .description ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n }\n /* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ul li ul li, .single-page .item.vertical .description-and-fields .description ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n }\n /* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n .paged .item.vertical .description-and-fields .description ol li, .single-page .item.vertical .description-and-fields .description ol li {\n list-style-type: lower-alpha;\n }\n /* line 118, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option, .single-page .item.vertical.radio .option, .paged .item.vertical.check_box .option, .single-page .item.vertical.check_box .option {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 121, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .radiocheckwrapper, .single-page .item.vertical.radio .option .radiocheckwrapper, .paged .item.vertical.check_box .option .radiocheckwrapper, .single-page .item.vertical.check_box .option .radiocheckwrapper {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 122, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .labelwrapper, .single-page .item.vertical.radio .option .labelwrapper, .paged .item.vertical.check_box .option .labelwrapper, .single-page .item.vertical.check_box .option .labelwrapper {\n width: 91.52542%;\n float: right;\n margin-right: 0;\n }\n /* line 125, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option.show_values .value, .single-page .item.vertical.radio .option.show_values .value, .paged .item.vertical.check_box .option.show_values .value, .single-page .item.vertical.check_box .option.show_values .value {\n width: 6.77966%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 126, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option.show_values .labelwrapper, .single-page .item.vertical.radio .option.show_values .labelwrapper, .paged .item.vertical.check_box .option.show_values .labelwrapper, .single-page .item.vertical.check_box .option.show_values .labelwrapper {\n width: 83.05085%;\n float: right;\n margin-right: 0;\n }\n /* line 129, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions, .single-page .item.vertical.radio .option .subquestions, .paged .item.vertical.check_box .option .subquestions, .single-page .item.vertical.check_box .option .subquestions {\n margin-left: 5.05051%;\n width: 91.52542%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item, .single-page .item.vertical.radio .option .subquestions .item, .paged .item.vertical.check_box .option .subquestions .item, .single-page .item.vertical.check_box .option .subquestions .item {\n width: 91.52542%;\n float: left;\n margin-right: 1.69492%;\n }\n /* line 135, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item .main, .single-page .item.vertical.radio .option .subquestions .item .main, .paged .item.vertical.check_box .option .subquestions .item .main, .single-page .item.vertical.check_box .option .subquestions .item .main {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 136, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .item input, .single-page .item.vertical.radio .option .subquestions .item input, .paged .item.vertical.check_box .option .subquestions .item input, .single-page .item.vertical.check_box .option .subquestions .item input {\n width: auto;\n }\n /* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .radiocheckwrapper, .single-page .item.vertical.radio .option .subquestions .radiocheckwrapper, .paged .item.vertical.check_box .option .subquestions .radiocheckwrapper, .single-page .item.vertical.check_box .option .subquestions .radiocheckwrapper {\n width: 10px;\n padding-right: 20px;\n }\n /* line 143, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .option .subquestions .labelwrapper, .single-page .item.vertical.radio .option .subquestions .labelwrapper, .paged .item.vertical.check_box .option .subquestions .labelwrapper, .single-page .item.vertical.check_box .option .subquestions .labelwrapper {\n width: auto;\n float: none;\n }\n /* line 150, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.radio .inner-title, .single-page .item.vertical.radio .inner-title, .paged .item.vertical.check_box .inner-title, .single-page .item.vertical.check_box .inner-title {\n width: 100%;\n float: right;\n margin-right: 0;\n }\n /* line 155, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.string input, .single-page .item.vertical.string input, .paged .item.vertical.string textarea, .single-page .item.vertical.string textarea, .paged .item.vertical.textarea input, .single-page .item.vertical.textarea input, .paged .item.vertical.textarea textarea, .single-page .item.vertical.textarea textarea {\n width: 100%;\n margin-right: 0;\n }\n /* line 156, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .item.vertical.string .sized, .single-page .item.vertical.string .sized, .paged .item.vertical.textarea .sized, .single-page .item.vertical.textarea .sized {\n width: auto;\n }\n /* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar, .single-page .progress-bar {\n width: 100%;\n float: right;\n margin-right: 0;\n margin: 1.5em -2em -1.5em;\n padding: 1.5em 2em;\n }\n /* line 181, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider, .single-page .progress-bar .progress-wrapper .progress-slider {\n background-position: 0 4px;\n display: inline-block;\n zoom: 1;\n }\n /* line 184, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .progress-bar .progress-wrapper .progress-slider .progress-stop {\n margin: 0 3px;\n width: 10px;\n height: 10px;\n }\n /* line 189, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .progress-bar .progress-wrapper .progress-slider.long-list, .single-page .progress-bar .progress-wrapper .progress-slider.long-list {\n display: inline-block;\n zoom: 1;\n }\n /* line 196, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons, .single-page .buttons {\n width: 100%;\n float: right;\n margin-right: 0;\n margin: 1.5em -2em -1.5em;\n padding: 1.5em 2em;\n border-bottom: 0;\n }\n /* line 202, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .back, .single-page .buttons .back {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 203, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .prev, .single-page .buttons .prev {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n }\n /* line 204, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .abort, .single-page .buttons .abort {\n width: 24.24242%;\n float: left;\n margin-right: 1.0101%;\n text-align: center;\n display: block;\n }\n /* line 205, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .print, .single-page .buttons .print {\n width: 100%;\n float: left;\n margin-right: 1.0101%;\n text-align: right;\n }\n /* line 206, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .next, .single-page .buttons .next {\n width: 24.24242%;\n float: right;\n margin-right: 0;\n text-align: right;\n }\n /* line 207, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged/desktop.scss */\n .paged .buttons .save, .single-page .buttons .save {\n width: 24.24242%;\n float: right;\n margin-right: 0;\n text-align: right;\n }\n}\n/* line 41, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel, .single-page .panel {\n margin-bottom: 2em;\n box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);\n}\n/* line 45, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel h1, .single-page .panel h1 {\n font-size: 1.5em;\n font-weight: bold;\n margin-bottom: 1.2em;\n z-index: 400;\n}\n/* line 52, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel hr, .single-page .panel hr {\n height: 8px;\n border: 0;\n background: #ddd;\n}\n/* line 54, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar, .single-page .panel .progress-bar {\n height: 25px;\n}\n/* line 56, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper, .single-page .panel .progress-bar .progress-wrapper {\n text-align: center;\n}\n/* line 58, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider, .single-page .panel .progress-bar .progress-wrapper .progress-slider {\n height: 8px;\n text-align: center;\n border: 1px solid #ccc;\n padding: 0;\n border-radius: 6px;\n overflow: hidden;\n padding: 1px;\n}\n/* line 66, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop {\n height: 8px;\n line-height: 8px;\n width: 6px;\n background: #fff;\n font-size: 6px;\n text-indent: -1234em;\n display: block;\n float: left;\n text-align: center;\n margin: 0;\n}\n/* line 77, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.first-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.first-child {\n width: 8px;\n border-radius: 5px 0 0 5px;\n}\n/* line 78, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.last-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.last-child {\n width: 8px;\n border-radius: 0 5px 5px 0;\n}\n/* line 79, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.active, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.active {\n background: #999;\n}\n/* line 80, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current {\n border-radius: 0 5px 5px 0;\n}\n/* line 82, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current.first-child, .single-page .panel .progress-bar .progress-wrapper .progress-slider .progress-stop.current.first-child {\n border-radius: 5px;\n}\n/* line 88, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .progress-bar .progress-wrapper .progress-details, .single-page .panel .progress-bar .progress-wrapper .progress-details {\n color: #999;\n font-size: 9px;\n margin: 4px 0 0 0;\n display: block;\n}\n/* line 97, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .buttons, .single-page .panel .buttons {\n border-top: 1px dotted #d6d6d6;\n background: #f3f3f3;\n}\n/* line 103, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.hidden, .single-page .panel .item.hidden {\n display: none;\n}\n/* line 105, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.errors, .single-page .panel .item.errors {\n outline: 1px solid red;\n padding: 0.4em;\n}\n/* line 108, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.errors .error, .single-page .panel .item.errors .error {\n background: #ffaaaa;\n color: #550000;\n outline: 1px solid red;\n padding: 0.3em;\n margin-bottom: 0.3em;\n}\n/* line 117, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item .main, .single-page .panel .item .main {\n font-weight: bold;\n}\n/* line 119, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item .main em, .single-page .panel .item .main em {\n font-style: italic;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text h2, .single-page .panel .item .text h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n}\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text small, .single-page .panel .item .text small {\n font-size: 80%;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text strong, .single-page .panel .item .text strong {\n font-style: italic;\n}\n/* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text em, .single-page .panel .item .text em {\n font-weight: bold;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text p, .single-page .panel .item .text p {\n margin-bottom: 18px;\n}\n/* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul, .single-page .panel .item .text ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n}\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li, .single-page .panel .item .text ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n}\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li p, .single-page .panel .item .text ul li p {\n margin-bottom: 0;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li ul, .single-page .panel .item .text ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n}\n/* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ul li ul li, .single-page .panel .item .text ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n}\n/* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .text ol li, .single-page .panel .item .text ol li {\n list-style-type: lower-alpha;\n}\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description h2, .single-page .panel .item .description-and-fields .description h2 {\n font-size: 1.2em;\n font-weight: bold;\n border-top: 8px solid #ddd;\n padding-top: 16px;\n}\n/* line 11, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description small, .single-page .panel .item .description-and-fields .description small {\n font-size: 80%;\n}\n/* line 12, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description strong, .single-page .panel .item .description-and-fields .description strong {\n font-style: italic;\n}\n/* line 13, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description em, .single-page .panel .item .description-and-fields .description em {\n font-weight: bold;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description p, .single-page .panel .item .description-and-fields .description p {\n margin-bottom: 18px;\n}\n/* line 17, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul, .single-page .panel .item .description-and-fields .description ul {\n margin-top: 1em;\n margin-left: 1em;\n margin-bottom: 2em;\n}\n/* line 21, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li, .single-page .panel .item .description-and-fields .description ul li {\n list-style-type: disc;\n margin-bottom: 1em !important;\n}\n/* line 25, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li p, .single-page .panel .item .description-and-fields .description ul li p {\n margin-bottom: 0;\n}\n/* line 27, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li ul, .single-page .panel .item .description-and-fields .description ul li ul {\n margin-bottom: 1em;\n margin-left: 1.5em;\n}\n/* line 30, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ul li ul li, .single-page .panel .item .description-and-fields .description ul li ul li {\n margin-bottom: 0 !important;\n list-style-type: none;\n}\n/* line 38, /home/marten/rgoc/quby/app/assets/stylesheets/quby/partials/_text.scss */\n.paged .panel .item .description-and-fields .description ol li, .single-page .panel .item .description-and-fields .description ol li {\n list-style-type: lower-alpha;\n}\n/* line 133, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.horizontal .main, .single-page .panel .item.horizontal .main {\n margin-bottom: 1em;\n}\n/* line 139, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .inner-title, .single-page .panel .item.radio .inner-title, .paged .panel .item.check_box .inner-title, .single-page .panel .item.check_box .inner-title {\n margin-top: 1.5em;\n margin-bottom: 1.5em;\n font-weight: bold;\n}\n/* line 147, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .option .labelwrapper p, .single-page .panel .item.radio .option .labelwrapper p, .paged .panel .item.check_box .option .labelwrapper p, .single-page .panel .item.check_box .option .labelwrapper p {\n display: inline;\n}\n/* line 151, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.radio .option.show_values .value, .single-page .panel .item.radio .option.show_values .value, .paged .panel .item.check_box .option.show_values .value, .single-page .panel .item.check_box .option.show_values .value {\n text-align: center;\n}\n/* line 158, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale td, .single-page .panel .item.scale td {\n border: 0;\n text-align: center;\n}\n/* line 164, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth1, .single-page .panel .item.scale .option.optionwidth1, .paged .panel .item.scale .description.optionwidth1, .single-page .panel .item.scale .description.optionwidth1 {\n width: 20%;\n}\n/* line 165, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth2, .single-page .panel .item.scale .option.optionwidth2, .paged .panel .item.scale .description.optionwidth2, .single-page .panel .item.scale .description.optionwidth2 {\n width: 20%;\n}\n/* line 166, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth3, .single-page .panel .item.scale .option.optionwidth3, .paged .panel .item.scale .description.optionwidth3, .single-page .panel .item.scale .description.optionwidth3 {\n width: 20%;\n}\n/* line 167, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth4, .single-page .panel .item.scale .option.optionwidth4, .paged .panel .item.scale .description.optionwidth4, .single-page .panel .item.scale .description.optionwidth4 {\n width: 20%;\n}\n/* line 168, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth5, .single-page .panel .item.scale .option.optionwidth5, .paged .panel .item.scale .description.optionwidth5, .single-page .panel .item.scale .description.optionwidth5 {\n width: 20%;\n}\n/* line 169, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth6, .single-page .panel .item.scale .option.optionwidth6, .paged .panel .item.scale .description.optionwidth6, .single-page .panel .item.scale .description.optionwidth6 {\n width: 16.66667%;\n}\n/* line 170, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth7, .single-page .panel .item.scale .option.optionwidth7, .paged .panel .item.scale .description.optionwidth7, .single-page .panel .item.scale .description.optionwidth7 {\n width: 14.28571%;\n}\n/* line 171, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth8, .single-page .panel .item.scale .option.optionwidth8, .paged .panel .item.scale .description.optionwidth8, .single-page .panel .item.scale .description.optionwidth8 {\n width: 12.5%;\n}\n/* line 172, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth9, .single-page .panel .item.scale .option.optionwidth9, .paged .panel .item.scale .description.optionwidth9, .single-page .panel .item.scale .description.optionwidth9 {\n width: 11.11111%;\n}\n/* line 173, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth10, .single-page .panel .item.scale .option.optionwidth10, .paged .panel .item.scale .description.optionwidth10, .single-page .panel .item.scale .description.optionwidth10 {\n width: 10%;\n}\n/* line 174, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth11, .single-page .panel .item.scale .option.optionwidth11, .paged .panel .item.scale .description.optionwidth11, .single-page .panel .item.scale .description.optionwidth11 {\n width: 9.09091%;\n}\n/* line 175, /home/marten/rgoc/quby/app/assets/stylesheets/quby/paged.scss */\n.paged .panel .item.scale .option.optionwidth12, .single-page .panel .item.scale .option.optionwidth12, .paged .panel .item.scale .description.optionwidth12, .single-page .panel .item.scale .description.optionwidth12 {\n width: 8.33333%;\n}\n\n/* line 4, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .hidden {\n display: none;\n}\n/* line 6, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .panel.noVisibleQuestions {\n display: none;\n}\n/* line 10, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .item.hide {\n margin: 0 !important;\n outline: none !important;\n}\n/* line 15, /home/marten/rgoc/quby/app/assets/stylesheets/quby/single_page/layout.scss */\n.single-page .item.hide > * {\n display: none !important;\n}\n';
|
|
18123
18146
|
const RTL_LANGUAGES = ["ar", "he", "fa", "ur"];
|
|
18124
18147
|
const Quby = (props) => {
|
|
@@ -18185,14 +18208,12 @@ export {
|
|
|
18185
18208
|
AnswerGroupMinimumValidator,
|
|
18186
18209
|
AnswerPage,
|
|
18187
18210
|
BaseValidator,
|
|
18188
|
-
CurliesInterpolator,
|
|
18189
18211
|
DatePartsAnswerSchema,
|
|
18190
18212
|
DatePartsComponentSchema,
|
|
18191
18213
|
FlagsSchema,
|
|
18192
18214
|
ICalcBooleanOpsSchema,
|
|
18193
18215
|
ICalcBooleanReducerOpsSchema,
|
|
18194
18216
|
ICalcComparerOpsSchema,
|
|
18195
|
-
InterpolateCurliesContext,
|
|
18196
18217
|
MaximumCheckedAllowedValidator,
|
|
18197
18218
|
MaximumDateValidator,
|
|
18198
18219
|
MaximumValidator,
|
|
@@ -18204,6 +18225,7 @@ export {
|
|
|
18204
18225
|
Quby,
|
|
18205
18226
|
QubyContext,
|
|
18206
18227
|
Questionnaire,
|
|
18228
|
+
QuestionnaireTranslationsCurlies,
|
|
18207
18229
|
RegexpValidator,
|
|
18208
18230
|
RequiresAnswerValidator,
|
|
18209
18231
|
Response,
|