powerpagestoolkit 1.3.4 → 1.3.5

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.
@@ -0,0 +1,447 @@
1
+ import waitFor from "@/waitFor.js";
2
+ import createInfoEl from "@/createInfoElement.js";
3
+ import { DOMNodeInitializationError, DOMNodeNotFoundError, ConditionalRenderingError, } from "@/errors.js";
4
+ import { createDOMNodeReference } from "@/createDOMNodeReferences.js";
5
+ export const _init = Symbol("_init");
6
+ /******/ /******/ /******/ export default class DOMNodeReference {
7
+ // properties initialized in the constructor
8
+ target;
9
+ isLoaded;
10
+ defaultDisplay;
11
+ /**
12
+ * The value of the element that this node represents
13
+ * stays in syncs with the live DOM elements via event handler
14
+ * @type {any}
15
+ */
16
+ value;
17
+ /**
18
+ * Creates an instance of DOMNodeReference.
19
+ * @param {string} target - The CSS selector to find the desired DOM element.
20
+ */
21
+ /******/ /******/ constructor(target) {
22
+ this.target = target;
23
+ this.isLoaded = false;
24
+ this.defaultDisplay = "";
25
+ this.value = null;
26
+ // we defer the rest of initialization
27
+ }
28
+ async [_init]() {
29
+ /**
30
+ * dynamically define the _init method using our custom symbol
31
+ * this makes it so that the _init method cannot be accessed outside
32
+ * of this package: i.e. by any consumers of the package
33
+ */
34
+ try {
35
+ const element = await waitFor(this.target);
36
+ this.element = element;
37
+ if (!this.element) {
38
+ throw new DOMNodeNotFoundError(this);
39
+ }
40
+ if (this.element.classList.contains("boolean-radio")) {
41
+ await this._attachRadioButtons();
42
+ }
43
+ this._initValueSync();
44
+ this._attachVisibilityController();
45
+ this.defaultDisplay = this.visibilityController.style.display;
46
+ this.isLoaded = true;
47
+ }
48
+ catch (e) {
49
+ throw new DOMNodeInitializationError(this, e);
50
+ }
51
+ }
52
+ // Function to update this.value based on element type
53
+ _initValueSync() {
54
+ // Initial sync
55
+ this.updateValue();
56
+ // Event listeners for real-time changes based on element type
57
+ const elementType = this.element.type;
58
+ if (elementType === "checkbox" || elementType === "radio") {
59
+ this.element.addEventListener("click", this.updateValue.bind(this));
60
+ }
61
+ else if (elementType === "select-one" ||
62
+ elementType === "select-multiple") {
63
+ this.element.addEventListener("change", this.updateValue.bind(this));
64
+ }
65
+ else {
66
+ this.element.addEventListener("input", this.updateValue.bind(this));
67
+ }
68
+ }
69
+ updateValue() {
70
+ switch (this.element.type) {
71
+ case "checkbox":
72
+ case "radio":
73
+ this.value = this.element.checked;
74
+ this.checked = this.element.checked;
75
+ break;
76
+ case "select-multiple":
77
+ this.value = Array.from(this.element.selectedOptions).map((option) => option.value);
78
+ break;
79
+ case "number":
80
+ this.value =
81
+ this.element.value !== ""
82
+ ? Number(this.element.value)
83
+ : null;
84
+ break;
85
+ default:
86
+ this.value = null;
87
+ break;
88
+ }
89
+ if (this.element.classList.contains("boolean-radio")) {
90
+ this.yesRadio.updateValue();
91
+ this.noRadio.updateValue();
92
+ }
93
+ }
94
+ _attachVisibilityController() {
95
+ // Set the default visibility controller to the element itself
96
+ this.visibilityController = this.element;
97
+ // If the element is a table, use its closest fieldset as the controller
98
+ if (this.element.tagName === "TABLE") {
99
+ const fieldset = this.element.closest("fieldset");
100
+ if (fieldset) {
101
+ this.visibilityController = fieldset;
102
+ }
103
+ return;
104
+ }
105
+ // For specific tag types, use the closest 'td' if available as the controller
106
+ const tagsRequiringTdParent = [
107
+ "SPAN",
108
+ "INPUT",
109
+ "TEXTAREA",
110
+ "SELECT",
111
+ "TABLE",
112
+ ];
113
+ if (tagsRequiringTdParent.includes(this.element.tagName)) {
114
+ const tdParent = this.element.closest("td");
115
+ if (tdParent) {
116
+ this.visibilityController = tdParent;
117
+ }
118
+ }
119
+ }
120
+ async _attachRadioButtons() {
121
+ this.yesRadio = await createDOMNodeReference(`#${this.element.id}_1`);
122
+ this.noRadio = await createDOMNodeReference(`#${this.element.id}_0`);
123
+ }
124
+ /**
125
+ * Sets up an event listener based on the specified event type, executing the specified
126
+ * event handler
127
+ * @param {string} eventType - The DOM event to watch for
128
+ * @param {(this: DOMNodeReference, e: Event) => void} eventHandler - The callback function that runs when the
129
+ * specified event occurs
130
+ * @returns - Instance of this
131
+ */
132
+ on(eventType, eventHandler) {
133
+ this.element.addEventListener(eventType, eventHandler.bind(this));
134
+ return this;
135
+ }
136
+ /**
137
+ * Hides the element by setting its display style to "none".
138
+ * @returns - Instance of this
139
+ */
140
+ hide() {
141
+ this.visibilityController.style.display = "none";
142
+ return this;
143
+ }
144
+ /**
145
+ * Shows the element by restoring its default display style.
146
+ * @returns - Instance of this
147
+ */
148
+ show() {
149
+ this.visibilityController.style.display = this.defaultDisplay;
150
+ return this;
151
+ }
152
+ /**
153
+ *
154
+ * @param {function(this: DOMNodeReference): boolean | boolean} shouldShow - Either a function that returns true or false,
155
+ * or a natural boolean to determine the visibility of this
156
+ * @returns - Instance of this
157
+ */
158
+ toggleVisibility(shouldShow) {
159
+ if (shouldShow instanceof Function) {
160
+ shouldShow(this) ? this.show() : this.hide();
161
+ }
162
+ else {
163
+ shouldShow ? this.show() : this.hide();
164
+ }
165
+ return this;
166
+ }
167
+ /**
168
+ * Sets the value of the HTML element.
169
+ * @param {() => any} value - The value to set for the HTML element.
170
+ * for parents of boolean radios, pass true or false as value, or
171
+ * an expression returning a boolean
172
+ * @returns - Instance of this
173
+ */
174
+ setValue(value) {
175
+ if (this.element.classList.contains("boolean-radio")) {
176
+ this.yesRadio.element.checked = value;
177
+ this.noRadio.element.checked =
178
+ !value;
179
+ }
180
+ else {
181
+ this.element.value = value;
182
+ }
183
+ return this;
184
+ }
185
+ /**
186
+ * Disables the element so that users cannot input any data
187
+ * @returns - Instance of this
188
+ */
189
+ disable() {
190
+ try {
191
+ this.element.disabled = true;
192
+ }
193
+ catch (e) {
194
+ throw new Error(`There was an error trying to disable the target: ${this.target}`);
195
+ }
196
+ return this;
197
+ }
198
+ /**
199
+ * Enables the element so that users can input data
200
+ * @returns - Instance of this
201
+ */
202
+ enable() {
203
+ try {
204
+ this.element.disabled = false;
205
+ }
206
+ catch (e) {
207
+ throw new Error(`There was an error trying to disable the target: ${this.target}`);
208
+ }
209
+ return this;
210
+ }
211
+ /**
212
+ *
213
+ * @param {...HTMLElement} elements - The elements to prepend to the element targeted by this.
214
+ * @returns - Instance of this
215
+ */
216
+ prepend(...elements) {
217
+ this.element.prepend(...elements);
218
+ return this;
219
+ }
220
+ /**
221
+ * Appends child elements to the HTML element.
222
+ * @param {...HTMLElement} elements - The elements to append to the element targeted by this.
223
+ * @returns - Instance of this
224
+ */
225
+ append(...elements) {
226
+ this.element.append(...elements);
227
+ return this;
228
+ }
229
+ /**
230
+ * Inserts elements before the HTML element.
231
+ * @param {...HTMLElement} elements - The elements to insert before the HTML element.
232
+ * @returns - Instance of this
233
+ */
234
+ before(...elements) {
235
+ this.element.before(...elements);
236
+ return this;
237
+ }
238
+ /**
239
+ * Inserts elements after the HTML element.
240
+ * @param {...HTMLElement} elements - The elements to insert after the HTML element.
241
+ * @returns - Instance of this
242
+ */
243
+ after(...elements) {
244
+ this.element.after(...elements);
245
+ return this;
246
+ }
247
+ /**
248
+ * Retrieves the label associated with the HTML element.
249
+ * @returns {HTMLElement} The label element associated with this element.
250
+ */
251
+ getLabel() {
252
+ return document.querySelector(`#${this.element.id}_label`) || null;
253
+ }
254
+ /**
255
+ * Appends child elements to the label associated with the HTML element.
256
+ * @param {...HTMLElement} elements - The elements to append to the label.
257
+ * @returns - Instance of this
258
+ */
259
+ appendToLabel(...elements) {
260
+ const label = this.getLabel();
261
+ if (label) {
262
+ label.append(" ", ...elements);
263
+ }
264
+ return this;
265
+ }
266
+ /**
267
+ * Adds a tooltip with specified text to the label associated with the HTML element.
268
+ * @param {string} text - The text to display in the tooltip.
269
+ * @returns - Instance of this
270
+ */
271
+ addLabelTooltip(text) {
272
+ this.appendToLabel(createInfoEl(text));
273
+ return this;
274
+ }
275
+ /**
276
+ * Adds a tooltip with the specified text to the element
277
+ * @param {string} text - The text to display in the tooltip
278
+ * @returns - Instance of this
279
+ */
280
+ addTooltip(text) {
281
+ this.append(createInfoEl(text));
282
+ return this;
283
+ }
284
+ /**
285
+ * Sets the inner HTML content of the HTML element.
286
+ * @param {string} string - The text to set as the inner HTML of the element.
287
+ * @returns - Instance of this
288
+ */
289
+ setInnerHTML(string) {
290
+ this.element.innerHTML = string;
291
+ return this;
292
+ }
293
+ /**
294
+ * Removes this element from the DOM
295
+ * @returns - Instance of this
296
+ */
297
+ remove() {
298
+ this.element.remove();
299
+ return this;
300
+ }
301
+ /**
302
+ *
303
+ * @param {Partial<CSSStyleDeclaration} options and object containing the styles you want to set : {key: value} e.g.: {'display': 'block'}
304
+ * @returns - Instance of this
305
+ */
306
+ setStyle(options) {
307
+ if (Object.prototype.toString.call(options) !== "[object Object]") {
308
+ throw new Error(`powerpagestoolkit: 'DOMNodeReference.setStyle' required options to be in the form of an object. Argument passed was of type: ${typeof options}`);
309
+ }
310
+ for (const key in options) {
311
+ this.element.style[key] = options[key];
312
+ }
313
+ return this;
314
+ }
315
+ /**
316
+ * Unchecks both the yes and no radio buttons if they exist.
317
+ * @returns - Instance of this
318
+ */
319
+ uncheckRadios() {
320
+ if (this.yesRadio && this.noRadio) {
321
+ this.yesRadio.element.checked = false;
322
+ this.noRadio.element.checked = false;
323
+ }
324
+ else {
325
+ console.error("[SYNACT] Attempted to uncheck radios for an element that has no radios");
326
+ }
327
+ return this;
328
+ }
329
+ /**
330
+ * Configures conditional rendering for the target element based on a condition
331
+ * and the visibility of one or more trigger elements.
332
+ *
333
+ * @param {(this: DOMNodeReference) => boolean} condition - A function that returns a boolean to determine
334
+ * the visibility of the target element. If `condition()` returns true, the element is shown;
335
+ * otherwise, it is hidden.
336
+ * @param {Array<DOMNodeReference>} [dependencies] - An array of `DOMNodeReference` instances. Event listeners are
337
+ * registered on each to toggle the visibility of the target element based on the `condition` and the visibility of
338
+ * the target node.
339
+ * @returns - Instance of this
340
+ */
341
+ configureConditionalRendering(condition, dependencies) {
342
+ try {
343
+ this.toggleVisibility(condition());
344
+ if (!dependencies) {
345
+ console.warn(`powerpagestoolkit: No dependencies were found when configuring conditional rendering for ${this}. Be sure that if you are referencing other nodes in your rendering logic, that you include those nodes in the dependency array`);
346
+ return this;
347
+ }
348
+ dependencies.forEach((node) => {
349
+ node.on("change", () => this.toggleVisibility(condition()));
350
+ const observer = new MutationObserver(() => {
351
+ const display = window.getComputedStyle(node.visibilityController).display;
352
+ this.toggleVisibility(display !== "none" && condition());
353
+ });
354
+ observer.observe(node.visibilityController, {
355
+ attributes: true,
356
+ attributeFilter: ["style"],
357
+ });
358
+ });
359
+ return this;
360
+ }
361
+ catch (e) {
362
+ throw new ConditionalRenderingError(this, e);
363
+ }
364
+ }
365
+ /**
366
+ * Sets up validation and requirement rules for the field. This function dynamically updates the field's required status and validates its input based on the specified conditions.
367
+ *
368
+ * @param {function(this: DOMNodeReference): boolean} isRequired - A function that determines whether the field should be required. Returns `true` if required, `false` otherwise.
369
+ * @param {function(this: DOMNodeReference): boolean} isValid - A function that checks if the field's input is valid. Returns `true` if valid, `false` otherwise.
370
+ * @param {string} fieldDisplayName - The name of the field, used in error messages if validation fails.
371
+ * @param {Array<DOMNodeReference>} [dependencies] Other fields that this field’s requirement depends on. When these fields change, the required status of this field is re-evaluated. Make sure any DOMNodeReference used in `isRequired` or `isValid` is included in this array.
372
+ * @returns - Instance of this
373
+ */
374
+ configureValidationAndRequirements(isRequired, isValid, fieldDisplayName, dependencies) {
375
+ if (typeof Page_Validators !== "undefined") {
376
+ const newValidator = document.createElement("span");
377
+ newValidator.style.display = "none";
378
+ newValidator.id = `${this.element.id}Validator`;
379
+ newValidator.controltovalidate = this.element.id;
380
+ newValidator.errormessage = `<a href='#${this.element.id}_label'>${fieldDisplayName} is a required field</a>`;
381
+ newValidator.evaluationfunction = isValid.bind(this);
382
+ //eslint-disable-next-line
383
+ Page_Validators.push(newValidator);
384
+ }
385
+ else {
386
+ throw new Error("Attempted to add to Validator where Page_Validators do not exist");
387
+ }
388
+ this.setRequiredLevel(isRequired(this));
389
+ if (!dependencies) {
390
+ console.warn(`powerpagestoolkit: No dependencies were found when configuring requirement and validation for ${this}. Be sure that if you are referencing other nodes in your requirement or validation logic, that you include those nodes in the dependency array`);
391
+ return this;
392
+ }
393
+ dependencies.forEach((dep) => {
394
+ dep.element.addEventListener("change", () => this.setRequiredLevel(isRequired(this)));
395
+ });
396
+ return this;
397
+ }
398
+ /**
399
+ * Sets the required level for the field by adding or removing the "required-field" class on the label.
400
+ *
401
+ * @param {boolean} isRequired - Determines whether the field should be marked as required.
402
+ * If true, the "required-field" class is added to the label; if false, it is removed.
403
+ * @returns - Instance of this
404
+ */
405
+ setRequiredLevel(isRequired) {
406
+ if (isRequired instanceof Function) {
407
+ isRequired()
408
+ ? this.getLabel()?.classList.add("required-field")
409
+ : this.getLabel()?.classList.remove("required-field");
410
+ return this;
411
+ }
412
+ else {
413
+ isRequired
414
+ ? this.getLabel()?.classList.add("required-field")
415
+ : this.getLabel()?.classList.remove("required-field");
416
+ return this;
417
+ }
418
+ }
419
+ /**
420
+ * Executes a callback function once the element is fully loaded.
421
+ * If the element is already loaded, the callback is called immediately.
422
+ * Otherwise, a MutationObserver is used to detect when the element is added to the DOM.
423
+ * @param {Function} callback - A callback function to execute once the element is loaded.
424
+ */
425
+ onceLoaded(callback) {
426
+ if (this.isLoaded) {
427
+ callback(this);
428
+ return;
429
+ }
430
+ if (this.target instanceof HTMLElement) {
431
+ callback(this);
432
+ return;
433
+ }
434
+ const observer = new MutationObserver(() => {
435
+ if (document.querySelector(this.target)) {
436
+ observer.disconnect(); // Stop observing once loaded
437
+ this.isLoaded = true;
438
+ callback(this); // Call the provided callback
439
+ }
440
+ });
441
+ observer.observe(document.body, {
442
+ subtree: true,
443
+ childList: true,
444
+ });
445
+ }
446
+ }
447
+ //# sourceMappingURL=DOMNodeReference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DOMNodeReference.js","sourceRoot":"","sources":["../src/DOMNodeReference.ts"],"names":[],"mappings":"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"}
package/dist/List.js ADDED
@@ -0,0 +1,18 @@
1
+ import { createMultipleDOMNodeReferences } from "./createDOMNodeReferences.js";
2
+ import DOMNodeReference, { _init } from "./DOMNodeReference.js";
3
+ export const _listInit = Symbol("_listInit");
4
+ /******/ /******/ /******/ export default class List extends DOMNodeReference {
5
+ constructor(target) {
6
+ super(target);
7
+ this.listItems = [];
8
+ }
9
+ async [_listInit]() {
10
+ await super[_init]();
11
+ const li = await createMultipleDOMNodeReferences("div.ms-DetailsRow-fields");
12
+ console.log(li);
13
+ setTimeout(() => {
14
+ console.log(li);
15
+ }, 1000);
16
+ }
17
+ }
18
+ //# sourceMappingURL=List.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"List.js","sourceRoot":"","sources":["../src/List.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7C,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,gBAAgB;IAM3E,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,CAAC,SAAS,CAAC;QACtB,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,MAAM,+BAA+B,CAC9C,0BAA0B,CAC3B,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import DOMNodeReference from "./DOMNodeReference.js";
2
+ /******/ /******/ /******/ export default class ListItem extends DOMNodeReference {
3
+ constructor(target) {
4
+ super(target);
5
+ // this.firstColumn = this.element.querySelector(
6
+ // "div[role='gridcell']"
7
+ // ) as HTMLElement;
8
+ }
9
+ removeTarget() {
10
+ this.element.querySelectorAll("a").forEach((el) => {
11
+ el.removeAttribute("href");
12
+ });
13
+ }
14
+ setFirstRowLink(path) {
15
+ // get the first row, turn it into an <a href="path"/>
16
+ const a = this.firstColumn?.querySelector("a");
17
+ if (a) {
18
+ a.href = path;
19
+ }
20
+ else {
21
+ const a = document.createElement("a");
22
+ a.innerHTML = this.firstColumn.innerHTML;
23
+ a.href = path;
24
+ }
25
+ return this;
26
+ }
27
+ }
28
+ //# sourceMappingURL=ListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../src/ListItem.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AAErD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,gBAAgB;IAM/E,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,iDAAiD;QACjD,2BAA2B;QAC3B,oBAAoB;IACtB,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAChD,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,eAAe,CAAC,IAAY;QACjC,sDAAsD;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;YACzC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /* src/style.css */
2
+ .info-icon {
3
+ position: relative;
4
+ display: inline-block;
5
+ }
6
+ .info-icon .fa-info-circle {
7
+ cursor: pointer;
8
+ }
9
+ .info-icon .flyout-content {
10
+ max-width: calc(100vw - 20px);
11
+ display: none;
12
+ position: absolute;
13
+ left: 50%;
14
+ transform: translateX(-50%);
15
+ background-color: #f9f9f9;
16
+ padding: 10px;
17
+ border: 1px solid #ddd;
18
+ z-index: 1;
19
+ min-width: 200px;
20
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
21
+ border-radius: 4px;
22
+ }
23
+ @media (max-width: 600px) {
24
+ .info-icon .flyout-content {
25
+ max-width: 95vw;
26
+ padding: 12px;
27
+ font-size: 0.9em;
28
+ display: block;
29
+ right: auto;
30
+ }
31
+ }
32
+ .required-field::after {
33
+ content: " *" !important;
34
+ color: #f00 !important;
35
+ }
36
+ /*# sourceMappingURL=bundle.css.map */
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/style.css"],
4
+ "sourcesContent": [".info-icon {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.info-icon .fa-info-circle {\r\n cursor: pointer; /* Ensures the icon is recognized as interactive */\r\n}\r\n\r\n.info-icon .flyout-content {\r\n max-width: calc(100vw - 20px); /* 20px margin on both sides */\r\n display: none; /* Initially hidden */\r\n position: absolute;\r\n left: 50%; /* Center horizontally */\r\n transform: translateX(-50%); /* Adjust positioning */\r\n background-color: #f9f9f9;\r\n padding: 10px;\r\n border: 1px solid #ddd;\r\n z-index: 1;\r\n min-width: 200px; /* Minimum width for better readability */\r\n box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);\r\n border-radius: 4px; /* Rounded corners */\r\n}\r\n\r\n@media (max-width: 600px) {\r\n .info-icon .flyout-content {\r\n max-width: 95vw;\r\n padding: 12px;\r\n font-size: 0.9em;\r\n display: block;\r\n right: auto;\r\n }\r\n}\r\n\r\n.required-field::after {\r\n content: \" *\" !important;\r\n color: #f00 !important;\r\n}\r\n"],
5
+ "mappings": ";AAAA,CAAC;AACC,YAAU;AACV,WAAS;AACX;AAEA,CALC,UAKU,CAAC;AACV,UAAQ;AACV;AAEA,CATC,UASU,CAAC;AACV,aAAW,KAAK,MAAM,EAAE;AACxB,WAAS;AACT,YAAU;AACV,QAAM;AACN,aAAW,WAAW;AACtB,oBAAkB;AAClB,WAAS;AACT,UAAQ,IAAI,MAAM;AAClB,WAAS;AACT,aAAW;AACX,cAAY,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtC,iBAAe;AACjB;AAEA,OAAO,CAAC,SAAS,EAAE;AACjB,GAzBD,UAyBY,CAhBD;AAiBR,eAAW;AACX,aAAS;AACT,eAAW;AACX,aAAS;AACT,WAAO;AACT;AACF;AAEA,CAAC,cAAc;AACb,WAAS;AACT,SAAO;AACT;",
6
+ "names": []
7
+ }