uicore-ts 1.1.371 → 1.1.375

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.
@@ -85,11 +85,11 @@ export declare class UIBaseButton extends UIView {
85
85
  get isToggleable(): boolean;
86
86
  layoutSubviews(): void;
87
87
  sendControlEventForKey(eventKey: string, nativeEvent: Event): void;
88
- static getEventCoordinatesInDocument(touchOrMouseEvent: any): {
88
+ static eventCoordinatesInDocument(touchOrMouseEvent: any): {
89
89
  x: number;
90
90
  y: number;
91
91
  };
92
- static getElementPositionInDocument(el: {
92
+ static elementPositionInDocument(el: {
93
93
  tagName: string;
94
94
  offsetLeft: number;
95
95
  scrollLeft: number;
@@ -102,11 +102,11 @@ export declare class UIBaseButton extends UIView {
102
102
  x: number;
103
103
  y: number;
104
104
  };
105
- static convertCoordinatesFromDocumentToElement(x: number, y: number, element: any): {
105
+ static coordinatesInElementFromDocumentCoordinates(x: number, y: number, element: any): {
106
106
  x: number;
107
107
  y: number;
108
108
  };
109
- static getEventCoordinatesInElement(touchOrMouseEvent: any, element: any): {
109
+ static eventCoordinatesInElement(touchOrMouseEvent: any, element: any): {
110
110
  x: number;
111
111
  y: number;
112
112
  };
@@ -32,29 +32,29 @@ const _UIBaseButton = class extends import_UIView.UIView {
32
32
  this._highlighted = import_UIObject.NO;
33
33
  this._isToggleable = import_UIObject.NO;
34
34
  this._isPointerInside = import_UIObject.NO;
35
- const setHovered = () => {
35
+ const markHovered = () => {
36
36
  this.hovered = import_UIObject.YES;
37
37
  };
38
- this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerHover, setHovered);
39
- const setNotHovered = () => {
38
+ this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerHover, markHovered);
39
+ const clearHovered = () => {
40
40
  this.hovered = import_UIObject.NO;
41
41
  };
42
42
  this.addTargetForControlEvents([
43
43
  import_UIView.UIView.controlEvent.PointerLeave,
44
44
  import_UIView.UIView.controlEvent.PointerCancel,
45
45
  import_UIView.UIView.controlEvent.MultipleTouches
46
- ], setNotHovered);
46
+ ], clearHovered);
47
47
  let highlightingTime;
48
- const setHighlighted = () => {
48
+ const markHighlighted = () => {
49
49
  this.highlighted = import_UIObject.YES;
50
50
  highlightingTime = Date.now();
51
51
  };
52
- this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerDown, setHighlighted);
53
- this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerEnter, setHighlighted);
54
- const setNotHighlighted = () => {
52
+ this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerDown, markHighlighted);
53
+ this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerEnter, markHighlighted);
54
+ const clearHighlighted = () => {
55
55
  this.highlighted = import_UIObject.NO;
56
56
  };
57
- const setNotHighlightedWithMinimumDuration = () => {
57
+ const clearHighlightedAfterMinimumDuration = () => {
58
58
  const minimumDurationInMilliseconds = 50;
59
59
  const elapsedTime = Date.now() - highlightingTime;
60
60
  if (minimumDurationInMilliseconds < elapsedTime) {
@@ -69,17 +69,17 @@ const _UIBaseButton = class extends import_UIView.UIView {
69
69
  import_UIView.UIView.controlEvent.PointerLeave,
70
70
  import_UIView.UIView.controlEvent.PointerCancel,
71
71
  import_UIView.UIView.controlEvent.MultipleTouches
72
- ], setNotHighlighted);
73
- this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerUp, setNotHighlightedWithMinimumDuration);
72
+ ], clearHighlighted);
73
+ this.addTargetForControlEvent(import_UIView.UIView.controlEvent.PointerUp, clearHighlightedAfterMinimumDuration);
74
74
  this.addTargetForControlEvent(import_UIView.UIView.controlEvent.EnterDown, () => {
75
- setHighlighted();
76
- setNotHighlightedWithMinimumDuration();
75
+ markHighlighted();
76
+ clearHighlightedAfterMinimumDuration();
77
77
  this.sendControlEventForKey(import_UIView.UIView.controlEvent.PointerUpInside, import_UIObject.nil);
78
78
  });
79
79
  this.addTargetForControlEvent(import_UIView.UIView.controlEvent.SpaceDown, (sender, event) => {
80
80
  event.preventDefault();
81
- setHighlighted();
82
- setNotHighlightedWithMinimumDuration();
81
+ markHighlighted();
82
+ clearHighlightedAfterMinimumDuration();
83
83
  this.sendControlEventForKey(import_UIView.UIView.controlEvent.PointerUpInside, import_UIObject.nil);
84
84
  });
85
85
  this.addTargetForControlEvent(
@@ -235,7 +235,7 @@ const _UIBaseButton = class extends import_UIView.UIView {
235
235
  }
236
236
  }
237
237
  }
238
- static getEventCoordinatesInDocument(touchOrMouseEvent) {
238
+ static eventCoordinatesInDocument(touchOrMouseEvent) {
239
239
  var posx = 0;
240
240
  var posy = 0;
241
241
  var e = touchOrMouseEvent;
@@ -252,7 +252,7 @@ const _UIBaseButton = class extends import_UIView.UIView {
252
252
  const coordinates = { "x": posx, "y": posy };
253
253
  return coordinates;
254
254
  }
255
- static getElementPositionInDocument(el) {
255
+ static elementPositionInDocument(el) {
256
256
  var xPosition = 0;
257
257
  var yPosition = 0;
258
258
  while (el) {
@@ -268,14 +268,14 @@ const _UIBaseButton = class extends import_UIView.UIView {
268
268
  y: yPosition
269
269
  };
270
270
  }
271
- static convertCoordinatesFromDocumentToElement(x, y, element) {
272
- const elementPositionInDocument = this.getElementPositionInDocument(element);
271
+ static coordinatesInElementFromDocumentCoordinates(x, y, element) {
272
+ const elementPositionInDocument = this.elementPositionInDocument(element);
273
273
  const coordinatesInElement = { "x": x - elementPositionInDocument.x, "y": y - elementPositionInDocument.y };
274
274
  return coordinatesInElement;
275
275
  }
276
- static getEventCoordinatesInElement(touchOrMouseEvent, element) {
277
- const coordinatesInDocument = this.getEventCoordinatesInDocument(touchOrMouseEvent);
278
- const coordinatesInElement = this.convertCoordinatesFromDocumentToElement(
276
+ static eventCoordinatesInElement(touchOrMouseEvent, element) {
277
+ const coordinatesInDocument = this.eventCoordinatesInDocument(touchOrMouseEvent);
278
+ const coordinatesInElement = this.coordinatesInElementFromDocumentCoordinates(
279
279
  coordinatesInDocument.x,
280
280
  coordinatesInDocument.y,
281
281
  element
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIBaseButton.ts"],
4
- "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewAddControlEventTargetObject, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIBaseButton extends UIView {\n \n static override controlEvent = Object.assign({}, UIView.controlEvent, {\n \"PrimaryActionTriggered\": \"PrimaryActionTriggered\"\n } as const)\n \n override controlEvent = UIBaseButton.controlEvent\n \n override get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<typeof UIBaseButton> {\n return super.controlEventTargetAccumulator as any\n }\n \n \n _selected: boolean = NO\n _highlighted: boolean = NO\n \n override _isPointerInside: boolean\n \n \n _isToggleable: boolean = NO\n _hovered?: boolean\n _focused?: boolean\n \n \n constructor(elementID?: string, elementType?: string) {\n \n super(elementID, undefined, elementType)\n \n // Instance variables\n \n \n this._isPointerInside = NO\n \n \n const setHovered = () => {\n this.hovered = YES\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerHover, setHovered)\n \n const setNotHovered = () => {\n \n this.hovered = NO\n \n }\n \n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHovered)\n \n \n let highlightingTime: number\n const setHighlighted = () => {\n this.highlighted = YES\n highlightingTime = Date.now()\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerDown, setHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerEnter, setHighlighted)\n \n const setNotHighlighted = () => {\n this.highlighted = NO\n }\n const setNotHighlightedWithMinimumDuration = () => {\n const minimumDurationInMilliseconds = 50\n const elapsedTime = Date.now() - highlightingTime\n if (minimumDurationInMilliseconds < elapsedTime) {\n this.highlighted = NO\n }\n else {\n setTimeout(() => {\n this.highlighted = NO\n }, minimumDurationInMilliseconds - elapsedTime)\n }\n }\n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], setNotHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerUp, setNotHighlightedWithMinimumDuration)\n \n // Enter and Space both activate the button.\n // Fire PointerUpInside (which cascades to PrimaryActionTriggered via sendControlEventForKey).\n this.addTargetForControlEvent(UIView.controlEvent.EnterDown, () => {\n \n setHighlighted()\n setNotHighlightedWithMinimumDuration()\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, nil)\n \n })\n \n this.addTargetForControlEvent(UIView.controlEvent.SpaceDown, (sender, event) => {\n \n event.preventDefault()\n setHighlighted()\n setNotHighlightedWithMinimumDuration()\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, nil)\n \n })\n \n \n this.addTargetForControlEvent(\n UIView.controlEvent.Focus,\n (sender: UIView, event: Event) => {\n \n this.focused = YES\n \n }\n )\n \n this.addTargetForControlEvent(\n UIView.controlEvent.Blur,\n (sender: UIView, event: Event) => {\n \n this.focused = NO\n \n }\n )\n \n \n this.pausesPointerEvents = YES\n this.tabIndex = 1\n \n this.style.cursor = \"pointer\"\n \n //this.style.outline = \"none\";\n \n \n this.nativeSelectionEnabled = NO\n \n \n this.addTargetForControlEvents([\n UIBaseButton.controlEvent.PrimaryActionTriggered, UIView.controlEvent.PointerUpInside\n ], () => {\n \n if (this.isToggleable) {\n \n this.toggleSelectedState()\n \n }\n \n })\n \n }\n \n public set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public get highlighted(): boolean {\n return this._highlighted\n }\n \n public set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public get focused(): boolean {\n return this._focused ?? NO\n }\n \n public set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public get selected(): boolean {\n return this._selected\n }\n \n \n updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n }\n \n updateContentForNormalState() {\n \n \n }\n \n updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n }\n \n updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n }\n \n updateContentForHighlightedState() {\n \n \n }\n \n updateContentForSelectedState() {\n \n \n }\n \n updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n }\n \n \n override set enabled(enabled: boolean) {\n super.enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n override get enabled() {\n return super.enabled\n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.PageDidScroll || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n const wasHovered = this._hovered\n const wasHighlighted = this._highlighted\n \n this._hovered = NO\n this._highlighted = NO\n \n if (wasHovered || wasHighlighted) {\n this.updateContentForCurrentState()\n }\n \n }\n \n \n }\n \n \n toggleSelectedState() {\n \n \n this.selected = !this.selected\n \n \n }\n \n set isToggleable(isToggleable: boolean) {\n \n this._isToggleable = isToggleable\n \n }\n \n get isToggleable() {\n \n return this._isToggleable\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n \n }\n \n \n override sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n \n if (eventKey == UIView.controlEvent.PointerUpInside && !this.highlighted) {\n \n // Do not send the event in this case\n //super.sendControlEventForKey(eventKey, nativeEvent);\n \n const asd = 1\n \n }\n else {\n \n super.sendControlEventForKey(eventKey, nativeEvent)\n \n if (eventKey == UIView.controlEvent.PointerUpInside) {\n super.sendControlEventForKey(UIBaseButton.controlEvent.PrimaryActionTriggered, nativeEvent)\n }\n \n }\n \n }\n \n \n static getEventCoordinatesInDocument(touchOrMouseEvent: any) {\n // http://www.quirksmode.org/js/events_properties.html\n var posx = 0\n var posy = 0\n var e = touchOrMouseEvent\n if (!e) {\n e = window.event\n }\n if (e.pageX || e.pageY) {\n posx = e.pageX\n posy = e.pageY\n }\n else if (e.clientX || e.clientY) {\n posx = e.clientX + document.body.scrollLeft\n + document.documentElement.scrollLeft\n posy = e.clientY + document.body.scrollTop\n + document.documentElement.scrollTop\n }\n // posx and posy contain the mouse position relative to the document\n \n const coordinates = { \"x\": posx, \"y\": posy }\n \n return coordinates\n \n }\n \n \n static getElementPositionInDocument(el: { tagName: string; offsetLeft: number; scrollLeft: number; clientLeft: number; offsetTop: number; scrollTop: number; clientTop: number; offsetParent: any }) {\n //https://www.kirupa.com/html5/getting_mouse_click_position.htm\n var xPosition = 0\n var yPosition = 0\n \n while (el) {\n if (el.tagName == \"BODY\") {\n \n // Coordinates in document are coordinates in body, therefore subtracting the scroll position of the body is not needed\n \n // // deal with browser quirks with body/window/document and page scroll\n // var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;\n // var yScrollPos = el.scrollTop || document.documentElement.scrollTop;\n //\n // xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);\n // yPosition += (el.offsetTop - yScrollPos + el.clientTop);\n }\n else {\n xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft)\n yPosition += (el.offsetTop - el.scrollTop + el.clientTop)\n }\n \n el = el.offsetParent\n }\n return {\n x: xPosition,\n y: yPosition\n }\n }\n \n static convertCoordinatesFromDocumentToElement(x: number, y: number, element: any) {\n const elementPositionInDocument = this.getElementPositionInDocument(element)\n const coordinatesInElement = { \"x\": x - elementPositionInDocument.x, \"y\": y - elementPositionInDocument.y }\n return coordinatesInElement\n }\n \n static getEventCoordinatesInElement(touchOrMouseEvent: any, element: any) {\n const coordinatesInDocument = this.getEventCoordinatesInDocument(touchOrMouseEvent)\n const coordinatesInElement = this.convertCoordinatesFromDocumentToElement(\n coordinatesInDocument.x,\n coordinatesInDocument.y,\n element\n )\n return coordinatesInElement\n }\n \n \n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { IS, nil, NO, YES } from \"./UIObject\"\nimport { UIView, UIViewAddControlEventTargetObject, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIBaseButton extends UIView {\n \n static override controlEvent = Object.assign({}, UIView.controlEvent, {\n \"PrimaryActionTriggered\": \"PrimaryActionTriggered\"\n } as const)\n \n override controlEvent = UIBaseButton.controlEvent\n \n override get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<typeof UIBaseButton> {\n return super.controlEventTargetAccumulator as any\n }\n \n \n _selected: boolean = NO\n _highlighted: boolean = NO\n \n override _isPointerInside: boolean\n \n \n _isToggleable: boolean = NO\n _hovered?: boolean\n _focused?: boolean\n \n \n constructor(elementID?: string, elementType?: string) {\n \n super(elementID, undefined, elementType)\n \n // Instance variables\n \n \n this._isPointerInside = NO\n \n \n const markHovered = () => {\n this.hovered = YES\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerHover, markHovered)\n \n const clearHovered = () => {\n \n this.hovered = NO\n \n }\n \n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], clearHovered)\n \n \n let highlightingTime: number\n const markHighlighted = () => {\n this.highlighted = YES\n highlightingTime = Date.now()\n }\n this.addTargetForControlEvent(UIView.controlEvent.PointerDown, markHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerEnter, markHighlighted)\n \n const clearHighlighted = () => {\n this.highlighted = NO\n }\n const clearHighlightedAfterMinimumDuration = () => {\n const minimumDurationInMilliseconds = 50\n const elapsedTime = Date.now() - highlightingTime\n if (minimumDurationInMilliseconds < elapsedTime) {\n this.highlighted = NO\n }\n else {\n setTimeout(() => {\n this.highlighted = NO\n }, minimumDurationInMilliseconds - elapsedTime)\n }\n }\n this.addTargetForControlEvents([\n UIView.controlEvent.PointerLeave, UIView.controlEvent.PointerCancel, UIView.controlEvent.MultipleTouches\n ], clearHighlighted)\n this.addTargetForControlEvent(UIView.controlEvent.PointerUp, clearHighlightedAfterMinimumDuration)\n \n // Enter and Space both activate the button.\n // Fire PointerUpInside (which cascades to PrimaryActionTriggered via sendControlEventForKey).\n this.addTargetForControlEvent(UIView.controlEvent.EnterDown, () => {\n \n markHighlighted()\n clearHighlightedAfterMinimumDuration()\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, nil)\n \n })\n \n this.addTargetForControlEvent(UIView.controlEvent.SpaceDown, (sender, event) => {\n \n event.preventDefault()\n markHighlighted()\n clearHighlightedAfterMinimumDuration()\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, nil)\n \n })\n \n \n this.addTargetForControlEvent(\n UIView.controlEvent.Focus,\n (sender: UIView, event: Event) => {\n \n this.focused = YES\n \n }\n )\n \n this.addTargetForControlEvent(\n UIView.controlEvent.Blur,\n (sender: UIView, event: Event) => {\n \n this.focused = NO\n \n }\n )\n \n \n this.pausesPointerEvents = YES\n this.tabIndex = 1\n \n this.style.cursor = \"pointer\"\n \n //this.style.outline = \"none\";\n \n \n this.nativeSelectionEnabled = NO\n \n \n this.addTargetForControlEvents([\n UIBaseButton.controlEvent.PrimaryActionTriggered, UIView.controlEvent.PointerUpInside\n ], () => {\n \n if (this.isToggleable) {\n \n this.toggleSelectedState()\n \n }\n \n })\n \n }\n \n public set hovered(hovered: boolean) {\n this._hovered = hovered\n this.updateContentForCurrentState()\n }\n \n public get hovered(): boolean {\n return this._hovered ?? NO\n }\n \n public set highlighted(highlighted: boolean) {\n this._highlighted = highlighted\n this.updateContentForCurrentState()\n }\n \n public get highlighted(): boolean {\n return this._highlighted\n }\n \n public set focused(focused: boolean) {\n this._focused = focused\n if (focused) {\n this.focus()\n }\n else {\n this.blur()\n }\n this.updateContentForCurrentState()\n }\n \n public get focused(): boolean {\n return this._focused ?? NO\n }\n \n public set selected(selected: boolean) {\n this._selected = selected\n this.updateContentForCurrentState()\n }\n \n public get selected(): boolean {\n return this._selected\n }\n \n \n updateContentForCurrentState() {\n \n let updateFunction: Function = this.updateContentForNormalState\n if (this.selected && this.highlighted) {\n updateFunction = this.updateContentForSelectedAndHighlightedState\n }\n else if (this.selected) {\n updateFunction = this.updateContentForSelectedState\n }\n else if (this.focused) {\n updateFunction = this.updateContentForFocusedState\n }\n else if (this.highlighted) {\n updateFunction = this.updateContentForHighlightedState\n }\n else if (this.hovered) {\n updateFunction = this.updateContentForHoveredState\n }\n \n if (!IS(updateFunction)) {\n this.backgroundColor = UIColor.nilColor\n }\n else {\n updateFunction.call(this)\n }\n \n }\n \n updateContentForNormalState() {\n \n \n }\n \n updateContentForHoveredState() {\n \n this.updateContentForNormalState()\n \n }\n \n updateContentForFocusedState() {\n \n this.updateContentForHoveredState()\n \n }\n \n updateContentForHighlightedState() {\n \n \n }\n \n updateContentForSelectedState() {\n \n \n }\n \n updateContentForSelectedAndHighlightedState() {\n \n this.updateContentForSelectedState()\n \n }\n \n \n override set enabled(enabled: boolean) {\n super.enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n override get enabled() {\n return super.enabled\n }\n \n override updateContentForCurrentEnabledState() {\n \n if (this.enabled) {\n this.alpha = 1\n }\n else {\n this.alpha = 0.5\n }\n \n this.userInteractionEnabled = this.enabled\n \n }\n \n \n override addStyleClass(styleClassName: string) {\n \n super.addStyleClass(styleClassName)\n \n if (this.styleClassName != styleClassName) {\n \n this.updateContentForCurrentState.call(this)\n \n }\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.PageDidScroll || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n const wasHovered = this._hovered\n const wasHighlighted = this._highlighted\n \n this._hovered = NO\n this._highlighted = NO\n \n if (wasHovered || wasHighlighted) {\n this.updateContentForCurrentState()\n }\n \n }\n \n \n }\n \n \n toggleSelectedState() {\n \n \n this.selected = !this.selected\n \n \n }\n \n set isToggleable(isToggleable: boolean) {\n \n this._isToggleable = isToggleable\n \n }\n \n get isToggleable() {\n \n return this._isToggleable\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n const bounds = this.bounds\n \n \n }\n \n \n override sendControlEventForKey(eventKey: string, nativeEvent: Event) {\n \n if (eventKey == UIView.controlEvent.PointerUpInside && !this.highlighted) {\n \n // Do not send the event in this case\n //super.sendControlEventForKey(eventKey, nativeEvent);\n \n const asd = 1\n \n }\n else {\n \n super.sendControlEventForKey(eventKey, nativeEvent)\n \n if (eventKey == UIView.controlEvent.PointerUpInside) {\n super.sendControlEventForKey(UIBaseButton.controlEvent.PrimaryActionTriggered, nativeEvent)\n }\n \n }\n \n }\n \n \n static eventCoordinatesInDocument(touchOrMouseEvent: any) {\n // http://www.quirksmode.org/js/events_properties.html\n var posx = 0\n var posy = 0\n var e = touchOrMouseEvent\n if (!e) {\n e = window.event\n }\n if (e.pageX || e.pageY) {\n posx = e.pageX\n posy = e.pageY\n }\n else if (e.clientX || e.clientY) {\n posx = e.clientX + document.body.scrollLeft\n + document.documentElement.scrollLeft\n posy = e.clientY + document.body.scrollTop\n + document.documentElement.scrollTop\n }\n // posx and posy contain the mouse position relative to the document\n \n const coordinates = { \"x\": posx, \"y\": posy }\n \n return coordinates\n \n }\n \n static elementPositionInDocument(el: { tagName: string; offsetLeft: number; scrollLeft: number; clientLeft: number; offsetTop: number; scrollTop: number; clientTop: number; offsetParent: any }) {\n //https://www.kirupa.com/html5/getting_mouse_click_position.htm\n var xPosition = 0\n var yPosition = 0\n \n while (el) {\n if (el.tagName == \"BODY\") {\n \n // Coordinates in document are coordinates in body, therefore subtracting the scroll position of the body is not needed\n \n // // deal with browser quirks with body/window/document and page scroll\n // var xScrollPos = el.scrollLeft || document.documentElement.scrollLeft;\n // var yScrollPos = el.scrollTop || document.documentElement.scrollTop;\n //\n // xPosition += (el.offsetLeft - xScrollPos + el.clientLeft);\n // yPosition += (el.offsetTop - yScrollPos + el.clientTop);\n }\n else {\n xPosition += (el.offsetLeft - el.scrollLeft + el.clientLeft)\n yPosition += (el.offsetTop - el.scrollTop + el.clientTop)\n }\n \n el = el.offsetParent\n }\n return {\n x: xPosition,\n y: yPosition\n }\n }\n \n static coordinatesInElementFromDocumentCoordinates(x: number, y: number, element: any) {\n const elementPositionInDocument = this.elementPositionInDocument(element)\n const coordinatesInElement = { \"x\": x - elementPositionInDocument.x, \"y\": y - elementPositionInDocument.y }\n return coordinatesInElement\n }\n \n static eventCoordinatesInElement(touchOrMouseEvent: any, element: any) {\n const coordinatesInDocument = this.eventCoordinatesInDocument(touchOrMouseEvent)\n const coordinatesInElement = this.coordinatesInElementFromDocumentCoordinates(\n coordinatesInDocument.x,\n coordinatesInDocument.y,\n element\n )\n return coordinatesInElement\n }\n \n \n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -79,7 +79,7 @@ export declare class UIColor extends UIObject {
79
79
  colorWithAlpha(alpha: number): UIColor;
80
80
  static colorWithRGBA(red: number, green: number, blue: number, alpha?: number): UIColor;
81
81
  static colorWithDescriptor(descriptor: UIColorDescriptor): UIColor;
82
- private static defaultAlphaToOne;
82
+ private static alphaDefaultingToOne;
83
83
  colorByMultiplyingRGB(multiplier: number): UIColor;
84
84
  /**
85
85
  * Returns the perceptual lightness (L*) of this color in the range [0, 1],
@@ -344,10 +344,10 @@ const _UIColor = class extends import_UIObject.UIObject {
344
344
  const red = Math.min(255, Math.max(0, descriptor.red)).toFixed(0);
345
345
  const green = Math.min(255, Math.max(0, descriptor.green)).toFixed(0);
346
346
  const blue = Math.min(255, Math.max(0, descriptor.blue)).toFixed(0);
347
- const alpha = this.defaultAlphaToOne(descriptor.alpha);
347
+ const alpha = this.alphaDefaultingToOne(descriptor.alpha);
348
348
  return new _UIColor("rgba(" + red + "," + green + "," + blue + "," + alpha + ")");
349
349
  }
350
- static defaultAlphaToOne(value = 1) {
350
+ static alphaDefaultingToOne(value = 1) {
351
351
  if (value != value) {
352
352
  value = 1;
353
353
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIColor.ts"],
4
- "sourcesContent": ["import { UIObject } from \"./UIObject\"\n\n\nexport interface UIColorDescriptor {\n \n red: number;\n green: number;\n blue: number;\n alpha?: number;\n \n}\n\n\nexport type UIColorSemanticKey = string\n\n\nexport class UIColor extends UIObject {\n \n \n // --- Semantic color registry ---\n \n static _liveColors: WeakRef<UIColor>[] = []\n static _registrationMap = new Map<string, UIColor>()\n static _cssSubscriptions = new Map<UIColorSemanticKey, Set<() => void>>()\n \n \n // --- Instance fields ---\n \n stringValue: string\n semanticKey?: UIColorSemanticKey\n _semanticClass?: typeof UIColor\n _elementRef?: HTMLElement\n _styleProperty?: string\n \n \n constructor(stringValue: string, semanticKey?: UIColorSemanticKey) {\n \n super()\n \n this.stringValue = stringValue\n this.semanticKey = semanticKey\n if (semanticKey) {\n this._semanticClass = this.constructor as typeof UIColor\n }\n \n }\n \n \n override toString() {\n return this.stringValue\n }\n \n \n // --- Semantic apply ---\n \n /**\n * Re-resolves this instance's stringValue from its class's static getter\n * matching the semanticKey, then writes the new value directly to the DOM\n * via the stored element reference and style property.\n * No-op if this instance has no semanticKey.\n */\n apply() {\n \n if (!this.semanticKey) { return }\n \n const colorClass = this._semanticClass ?? this.constructor as typeof UIColor\n const newColor = (colorClass as any)[this.semanticKey] as UIColor | undefined\n \n if (!newColor) { return }\n \n this.stringValue = newColor.stringValue\n \n const element = this._elementRef\n \n if (!element || !this._styleProperty) { return }\n \n (element.style as any)[this._styleProperty] = this.stringValue\n \n }\n \n \n /**\n * Assigns a semantic key and the class that owns it to this color instance.\n * Intended for derived colors that should participate in theme switching,\n * e.g. `BSColor._primaryBase.colorWithAlpha(0.5).withSemanticKey(\"primaryShadow\", BSColor)`.\n * Returns `this` for fluent chaining.\n */\n withSemanticKey(semanticKey: UIColorSemanticKey, semanticClass: typeof UIColor): this {\n this.semanticKey = semanticKey\n this._semanticClass = semanticClass\n return this\n }\n \n \n /**\n * Iterates all live registered UIColor instances, calls apply() on each,\n * compacts dead WeakRefs in the same pass, then fires any CSS subscriptions\n * whose semantic key was affected.\n */\n static applySemanticColors() {\n \n const affectedKeys = new Set<UIColorSemanticKey>()\n \n const live: WeakRef<UIColor>[] = []\n \n for (const ref of UIColor._liveColors) {\n \n const color = ref.deref()\n \n if (!color) {\n continue\n }\n \n live.push(ref)\n \n if (color.semanticKey) {\n affectedKeys.add(color.semanticKey)\n }\n \n color.apply()\n \n }\n \n UIColor._liveColors = live\n \n for (const key of affectedKeys) {\n UIColor._cssSubscriptions.get(key)?.forEach(callback => callback())\n }\n \n }\n \n \n /**\n * Updates the backing field for a semantic color and re-applies all live\n * semantic colors. The backing field is always `_` + semanticKey, e.g.\n * `BSColor.updateSemanticColor(\"primary\", \"#ff0000\")` sets `BSColor._primary`.\n * Called as a static method on the subclass that owns the color.\n */\n static updateSemanticColor(semanticKey: UIColorSemanticKey, value: string) {\n (this as any)[\"_\" + semanticKey] = value\n UIColor.applySemanticColors()\n }\n \n \n /**\n * Registers a callback to be fired when applySemanticColors() affects\n * the given semantic key. Intended for injected CSS blocks that cannot\n * be tracked via the colorStyleProxy.\n */\n static subscribe(semanticKey: UIColorSemanticKey, callback: () => void) {\n \n if (!UIColor._cssSubscriptions.has(semanticKey)) {\n UIColor._cssSubscriptions.set(semanticKey, new Set())\n }\n \n UIColor._cssSubscriptions.get(semanticKey)!.add(callback)\n \n }\n \n \n static unsubscribe(semanticKey: UIColorSemanticKey, callback: () => void) {\n UIColor._cssSubscriptions.get(semanticKey)?.delete(callback)\n }\n \n \n // --- Named colors ---\n \n static get redColor() {\n return new UIColor(\"red\")\n }\n \n static get blueColor() {\n return new UIColor(\"blue\")\n }\n \n static get greenColor() {\n return new UIColor(\"green\")\n }\n \n static get yellowColor() {\n return new UIColor(\"yellow\")\n }\n \n static get blackColor() {\n return new UIColor(\"black\")\n }\n \n static get brownColor() {\n return new UIColor(\"brown\")\n }\n \n static get whiteColor() {\n return new UIColor(\"white\")\n }\n \n static get greyColor() {\n return new UIColor(\"grey\")\n }\n \n static get lightGreyColor() {\n return new UIColor(\"lightgrey\")\n }\n \n static get transparentColor() {\n return new UIColor(\"transparent\")\n }\n \n static get clearColor() {\n return new UIColor(\"transparent\")\n }\n \n static get undefinedColor() {\n return new UIColor(\"\")\n }\n \n static get nilColor() {\n return new UIColor(\"\")\n }\n \n \n static nameToHex(name: string) {\n return {\n \"aliceblue\": \"#f0f8ff\",\n \"antiquewhite\": \"#faebd7\",\n \"aqua\": \"#00ffff\",\n \"aquamarine\": \"#7fffd4\",\n \"azure\": \"#f0ffff\",\n \"beige\": \"#f5f5dc\",\n \"bisque\": \"#ffe4c4\",\n \"black\": \"#000000\",\n \"blanchedalmond\": \"#ffebcd\",\n \"blue\": \"#0000ff\",\n \"blueviolet\": \"#8a2be2\",\n \"brown\": \"#a52a2a\",\n \"burlywood\": \"#deb887\",\n \"cadetblue\": \"#5f9ea0\",\n \"chartreuse\": \"#7fff00\",\n \"chocolate\": \"#d2691e\",\n \"coral\": \"#ff7f50\",\n \"cornflowerblue\": \"#6495ed\",\n \"cornsilk\": \"#fff8dc\",\n \"crimson\": \"#dc143c\",\n \"cyan\": \"#00ffff\",\n \"darkblue\": \"#00008b\",\n \"darkcyan\": \"#008b8b\",\n \"darkgoldenrod\": \"#b8860b\",\n \"darkgray\": \"#a9a9a9\",\n \"darkgreen\": \"#006400\",\n \"darkkhaki\": \"#bdb76b\",\n \"darkmagenta\": \"#8b008b\",\n \"darkolivegreen\": \"#556b2f\",\n \"darkorange\": \"#ff8c00\",\n \"darkorchid\": \"#9932cc\",\n \"darkred\": \"#8b0000\",\n \"darksalmon\": \"#e9967a\",\n \"darkseagreen\": \"#8fbc8f\",\n \"darkslateblue\": \"#483d8b\",\n \"darkslategray\": \"#2f4f4f\",\n \"darkturquoise\": \"#00ced1\",\n \"darkviolet\": \"#9400d3\",\n \"deeppink\": \"#ff1493\",\n \"deepskyblue\": \"#00bfff\",\n \"dimgray\": \"#696969\",\n \"dodgerblue\": \"#1e90ff\",\n \"firebrick\": \"#b22222\",\n \"floralwhite\": \"#fffaf0\",\n \"forestgreen\": \"#228b22\",\n \"fuchsia\": \"#ff00ff\",\n \"gainsboro\": \"#dcdcdc\",\n \"ghostwhite\": \"#f8f8ff\",\n \"gold\": \"#ffd700\",\n \"goldenrod\": \"#daa520\",\n \"gray\": \"#808080\",\n \"green\": \"#008000\",\n \"greenyellow\": \"#adff2f\",\n \"honeydew\": \"#f0fff0\",\n \"hotpink\": \"#ff69b4\",\n \"indianred \": \"#cd5c5c\",\n \"indigo\": \"#4b0082\",\n \"ivory\": \"#fffff0\",\n \"khaki\": \"#f0e68c\",\n \"lavender\": \"#e6e6fa\",\n \"lavenderblush\": \"#fff0f5\",\n \"lawngreen\": \"#7cfc00\",\n \"lemonchiffon\": \"#fffacd\",\n \"lightblue\": \"#add8e6\",\n \"lightcoral\": \"#f08080\",\n \"lightcyan\": \"#e0ffff\",\n \"lightgoldenrodyellow\": \"#fafad2\",\n \"lightgrey\": \"#d3d3d3\",\n \"lightgreen\": \"#90ee90\",\n \"lightpink\": \"#ffb6c1\",\n \"lightsalmon\": \"#ffa07a\",\n \"lightseagreen\": \"#20b2aa\",\n \"lightskyblue\": \"#87cefa\",\n \"lightslategray\": \"#778899\",\n \"lightsteelblue\": \"#b0c4de\",\n \"lightyellow\": \"#ffffe0\",\n \"lime\": \"#00ff00\",\n \"limegreen\": \"#32cd32\",\n \"linen\": \"#faf0e6\",\n \"magenta\": \"#ff00ff\",\n \"maroon\": \"#800000\",\n \"mediumaquamarine\": \"#66cdaa\",\n \"mediumblue\": \"#0000cd\",\n \"mediumorchid\": \"#ba55d3\",\n \"mediumpurple\": \"#9370d8\",\n \"mediumseagreen\": \"#3cb371\",\n \"mediumslateblue\": \"#7b68ee\",\n \"mediumspringgreen\": \"#00fa9a\",\n \"mediumturquoise\": \"#48d1cc\",\n \"mediumvioletred\": \"#c71585\",\n \"midnightblue\": \"#191970\",\n \"mintcream\": \"#f5fffa\",\n \"mistyrose\": \"#ffe4e1\",\n \"moccasin\": \"#ffe4b5\",\n \"navajowhite\": \"#ffdead\",\n \"navy\": \"#000080\",\n \"oldlace\": \"#fdf5e6\",\n \"olive\": \"#808000\",\n \"olivedrab\": \"#6b8e23\",\n \"orange\": \"#ffa500\",\n \"orangered\": \"#ff4500\",\n \"orchid\": \"#da70d6\",\n \"palegoldenrod\": \"#eee8aa\",\n \"palegreen\": \"#98fb98\",\n \"paleturquoise\": \"#afeeee\",\n \"palevioletred\": \"#d87093\",\n \"papayawhip\": \"#ffefd5\",\n \"peachpuff\": \"#ffdab9\",\n \"peru\": \"#cd853f\",\n \"pink\": \"#ffc0cb\",\n \"plum\": \"#dda0dd\",\n \"powderblue\": \"#b0e0e6\",\n \"purple\": \"#800080\",\n \"red\": \"#ff0000\",\n \"rosybrown\": \"#bc8f8f\",\n \"royalblue\": \"#4169e1\",\n \"saddlebrown\": \"#8b4513\",\n \"salmon\": \"#fa8072\",\n \"sandybrown\": \"#f4a460\",\n \"seagreen\": \"#2e8b57\",\n \"seashell\": \"#fff5ee\",\n \"sienna\": \"#a0522d\",\n \"silver\": \"#c0c0c0\",\n \"skyblue\": \"#87ceeb\",\n \"slateblue\": \"#6a5acd\",\n \"slategray\": \"#708090\",\n \"snow\": \"#fffafa\",\n \"springgreen\": \"#00ff7f\",\n \"steelblue\": \"#4682b4\",\n \"tan\": \"#d2b48c\",\n \"teal\": \"#008080\",\n \"thistle\": \"#d8bfd8\",\n \"tomato\": \"#ff6347\",\n \"turquoise\": \"#40e0d0\",\n \"violet\": \"#ee82ee\",\n \"wheat\": \"#f5deb3\",\n \"white\": \"#ffffff\",\n \"whitesmoke\": \"#f5f5f5\",\n \"yellow\": \"#ffff00\",\n \"yellowgreen\": \"#9acd32\"\n }[name.toLowerCase()]\n }\n \n \n static hexToDescriptor(c: string): UIColorDescriptor {\n if (c[0] === \"#\") {\n c = c.substr(1)\n }\n const r = parseInt(c.slice(0, 2), 16)\n const g = parseInt(c.slice(2, 4), 16)\n const b = parseInt(c.slice(4, 6), 16)\n const a = parseInt(c.slice(6, 8), 16)\n \n const result = { \"red\": r, \"green\": g, \"blue\": b, \"alpha\": a }\n \n return result\n \n }\n \n static rgbToDescriptor(colorString: string) {\n \n if (colorString.startsWith(\"rgba(\")) {\n colorString = colorString.slice(5, colorString.length - 1)\n }\n \n if (colorString.startsWith(\"rgb(\")) {\n colorString = colorString.slice(4, colorString.length - 1) + \", 0\"\n }\n \n const components = colorString.split(\",\")\n \n const result = {\n \"red\": Number(components[0]),\n \"green\": Number(components[1]),\n \"blue\": Number(components[2]),\n \"alpha\": Number(components[3])\n }\n \n return result\n \n }\n \n \n get colorDescriptor(): UIColorDescriptor {\n \n var descriptor\n \n const colorHEXFromName = UIColor.nameToHex(this.stringValue)\n \n if (this.stringValue.startsWith(\"rgb\")) {\n descriptor = UIColor.rgbToDescriptor(this.stringValue)\n }\n else if (colorHEXFromName) {\n descriptor = UIColor.hexToDescriptor(colorHEXFromName)\n }\n else {\n descriptor = UIColor.hexToDescriptor(this.stringValue)\n }\n \n return descriptor\n \n }\n \n \n colorWithRed(red: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + red + \",\" + descriptor.green + \",\" + descriptor.blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithGreen(green: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + green + \",\" + descriptor.blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithBlue(blue: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + descriptor.green + \",\" + blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithAlpha(alpha: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + descriptor.green + \",\" + descriptor.blue + \",\" + alpha + \")\"\n )\n \n }\n \n static colorWithRGBA(red: number, green: number, blue: number, alpha: number = 1) {\n \n const result = new UIColor(\"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha + \")\")\n \n return result\n \n }\n \n static colorWithDescriptor(descriptor: UIColorDescriptor) {\n \n const red = Math.min(255, Math.max(0, descriptor.red)).toFixed(0)\n const green = Math.min(255, Math.max(0, descriptor.green)).toFixed(0)\n const blue = Math.min(255, Math.max(0, descriptor.blue)).toFixed(0)\n const alpha = this.defaultAlphaToOne(descriptor.alpha)\n \n return new UIColor(\"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha + \")\")\n \n }\n \n \n private static defaultAlphaToOne(value = 1) {\n if (value != value) {\n value = 1\n }\n return value\n }\n \n \n colorByMultiplyingRGB(multiplier: number) {\n \n const descriptor = this.colorDescriptor\n \n descriptor.red = descriptor.red * multiplier\n descriptor.green = descriptor.green * multiplier\n descriptor.blue = descriptor.blue * multiplier\n \n return UIColor.colorWithDescriptor(descriptor)\n \n }\n \n \n /**\n * Returns the perceptual lightness (L*) of this color in the range [0, 1],\n * using the CIELAB formula. 0 = absolute black, 1 = absolute white.\n * Unlike raw relative luminance, this scale is perceptually uniform \u2014\n * 0.5 is the genuine visual midpoint between black and white.\n */\n get perceivedLightness(): number {\n \n const descriptor = this.colorDescriptor\n \n const linearise = (channel: number) => {\n const normalised = channel / 255\n if (normalised <= 0.04045) {\n return normalised / 12.92\n }\n return Math.pow((normalised + 0.055) / 1.055, 2.4)\n }\n \n const luminance = 0.2126 * linearise(descriptor.red)\n + 0.7152 * linearise(descriptor.green)\n + 0.0722 * linearise(descriptor.blue)\n \n const epsilon = Math.pow(6 / 29, 3) // ~0.00886\n \n const f = luminance > epsilon\n ? Math.pow(luminance, 1 / 3)\n : (Math.pow(29 / 6, 2) / 3) * luminance + 4 / 29\n \n return (116 * f - 16) / 100\n \n }\n \n get isLight(): boolean {\n return this.perceivedLightness >= 0.5\n }\n \n \n}\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UIObject } from \"./UIObject\"\n\n\nexport interface UIColorDescriptor {\n \n red: number;\n green: number;\n blue: number;\n alpha?: number;\n \n}\n\n\nexport type UIColorSemanticKey = string\n\n\nexport class UIColor extends UIObject {\n \n \n // --- Semantic color registry ---\n \n static _liveColors: WeakRef<UIColor>[] = []\n static _registrationMap = new Map<string, UIColor>()\n static _cssSubscriptions = new Map<UIColorSemanticKey, Set<() => void>>()\n \n \n // --- Instance fields ---\n \n stringValue: string\n semanticKey?: UIColorSemanticKey\n _semanticClass?: typeof UIColor\n _elementRef?: HTMLElement\n _styleProperty?: string\n \n \n constructor(stringValue: string, semanticKey?: UIColorSemanticKey) {\n \n super()\n \n this.stringValue = stringValue\n this.semanticKey = semanticKey\n if (semanticKey) {\n this._semanticClass = this.constructor as typeof UIColor\n }\n \n }\n \n \n override toString() {\n return this.stringValue\n }\n \n \n // --- Semantic apply ---\n \n /**\n * Re-resolves this instance's stringValue from its class's static getter\n * matching the semanticKey, then writes the new value directly to the DOM\n * via the stored element reference and style property.\n * No-op if this instance has no semanticKey.\n */\n apply() {\n \n if (!this.semanticKey) { return }\n \n const colorClass = this._semanticClass ?? this.constructor as typeof UIColor\n const newColor = (colorClass as any)[this.semanticKey] as UIColor | undefined\n \n if (!newColor) { return }\n \n this.stringValue = newColor.stringValue\n \n const element = this._elementRef\n \n if (!element || !this._styleProperty) { return }\n \n (element.style as any)[this._styleProperty] = this.stringValue\n \n }\n \n \n /**\n * Assigns a semantic key and the class that owns it to this color instance.\n * Intended for derived colors that should participate in theme switching,\n * e.g. `BSColor._primaryBase.colorWithAlpha(0.5).withSemanticKey(\"primaryShadow\", BSColor)`.\n * Returns `this` for fluent chaining.\n */\n withSemanticKey(semanticKey: UIColorSemanticKey, semanticClass: typeof UIColor): this {\n this.semanticKey = semanticKey\n this._semanticClass = semanticClass\n return this\n }\n \n \n /**\n * Iterates all live registered UIColor instances, calls apply() on each,\n * compacts dead WeakRefs in the same pass, then fires any CSS subscriptions\n * whose semantic key was affected.\n */\n static applySemanticColors() {\n \n const affectedKeys = new Set<UIColorSemanticKey>()\n \n const live: WeakRef<UIColor>[] = []\n \n for (const ref of UIColor._liveColors) {\n \n const color = ref.deref()\n \n if (!color) {\n continue\n }\n \n live.push(ref)\n \n if (color.semanticKey) {\n affectedKeys.add(color.semanticKey)\n }\n \n color.apply()\n \n }\n \n UIColor._liveColors = live\n \n for (const key of affectedKeys) {\n UIColor._cssSubscriptions.get(key)?.forEach(callback => callback())\n }\n \n }\n \n \n /**\n * Updates the backing field for a semantic color and re-applies all live\n * semantic colors. The backing field is always `_` + semanticKey, e.g.\n * `BSColor.updateSemanticColor(\"primary\", \"#ff0000\")` sets `BSColor._primary`.\n * Called as a static method on the subclass that owns the color.\n */\n static updateSemanticColor(semanticKey: UIColorSemanticKey, value: string) {\n (this as any)[\"_\" + semanticKey] = value\n UIColor.applySemanticColors()\n }\n \n \n /**\n * Registers a callback to be fired when applySemanticColors() affects\n * the given semantic key. Intended for injected CSS blocks that cannot\n * be tracked via the colorStyleProxy.\n */\n static subscribe(semanticKey: UIColorSemanticKey, callback: () => void) {\n \n if (!UIColor._cssSubscriptions.has(semanticKey)) {\n UIColor._cssSubscriptions.set(semanticKey, new Set())\n }\n \n UIColor._cssSubscriptions.get(semanticKey)!.add(callback)\n \n }\n \n \n static unsubscribe(semanticKey: UIColorSemanticKey, callback: () => void) {\n UIColor._cssSubscriptions.get(semanticKey)?.delete(callback)\n }\n \n \n // --- Named colors ---\n \n static get redColor() {\n return new UIColor(\"red\")\n }\n \n static get blueColor() {\n return new UIColor(\"blue\")\n }\n \n static get greenColor() {\n return new UIColor(\"green\")\n }\n \n static get yellowColor() {\n return new UIColor(\"yellow\")\n }\n \n static get blackColor() {\n return new UIColor(\"black\")\n }\n \n static get brownColor() {\n return new UIColor(\"brown\")\n }\n \n static get whiteColor() {\n return new UIColor(\"white\")\n }\n \n static get greyColor() {\n return new UIColor(\"grey\")\n }\n \n static get lightGreyColor() {\n return new UIColor(\"lightgrey\")\n }\n \n static get transparentColor() {\n return new UIColor(\"transparent\")\n }\n \n static get clearColor() {\n return new UIColor(\"transparent\")\n }\n \n static get undefinedColor() {\n return new UIColor(\"\")\n }\n \n static get nilColor() {\n return new UIColor(\"\")\n }\n \n \n static nameToHex(name: string) {\n return {\n \"aliceblue\": \"#f0f8ff\",\n \"antiquewhite\": \"#faebd7\",\n \"aqua\": \"#00ffff\",\n \"aquamarine\": \"#7fffd4\",\n \"azure\": \"#f0ffff\",\n \"beige\": \"#f5f5dc\",\n \"bisque\": \"#ffe4c4\",\n \"black\": \"#000000\",\n \"blanchedalmond\": \"#ffebcd\",\n \"blue\": \"#0000ff\",\n \"blueviolet\": \"#8a2be2\",\n \"brown\": \"#a52a2a\",\n \"burlywood\": \"#deb887\",\n \"cadetblue\": \"#5f9ea0\",\n \"chartreuse\": \"#7fff00\",\n \"chocolate\": \"#d2691e\",\n \"coral\": \"#ff7f50\",\n \"cornflowerblue\": \"#6495ed\",\n \"cornsilk\": \"#fff8dc\",\n \"crimson\": \"#dc143c\",\n \"cyan\": \"#00ffff\",\n \"darkblue\": \"#00008b\",\n \"darkcyan\": \"#008b8b\",\n \"darkgoldenrod\": \"#b8860b\",\n \"darkgray\": \"#a9a9a9\",\n \"darkgreen\": \"#006400\",\n \"darkkhaki\": \"#bdb76b\",\n \"darkmagenta\": \"#8b008b\",\n \"darkolivegreen\": \"#556b2f\",\n \"darkorange\": \"#ff8c00\",\n \"darkorchid\": \"#9932cc\",\n \"darkred\": \"#8b0000\",\n \"darksalmon\": \"#e9967a\",\n \"darkseagreen\": \"#8fbc8f\",\n \"darkslateblue\": \"#483d8b\",\n \"darkslategray\": \"#2f4f4f\",\n \"darkturquoise\": \"#00ced1\",\n \"darkviolet\": \"#9400d3\",\n \"deeppink\": \"#ff1493\",\n \"deepskyblue\": \"#00bfff\",\n \"dimgray\": \"#696969\",\n \"dodgerblue\": \"#1e90ff\",\n \"firebrick\": \"#b22222\",\n \"floralwhite\": \"#fffaf0\",\n \"forestgreen\": \"#228b22\",\n \"fuchsia\": \"#ff00ff\",\n \"gainsboro\": \"#dcdcdc\",\n \"ghostwhite\": \"#f8f8ff\",\n \"gold\": \"#ffd700\",\n \"goldenrod\": \"#daa520\",\n \"gray\": \"#808080\",\n \"green\": \"#008000\",\n \"greenyellow\": \"#adff2f\",\n \"honeydew\": \"#f0fff0\",\n \"hotpink\": \"#ff69b4\",\n \"indianred \": \"#cd5c5c\",\n \"indigo\": \"#4b0082\",\n \"ivory\": \"#fffff0\",\n \"khaki\": \"#f0e68c\",\n \"lavender\": \"#e6e6fa\",\n \"lavenderblush\": \"#fff0f5\",\n \"lawngreen\": \"#7cfc00\",\n \"lemonchiffon\": \"#fffacd\",\n \"lightblue\": \"#add8e6\",\n \"lightcoral\": \"#f08080\",\n \"lightcyan\": \"#e0ffff\",\n \"lightgoldenrodyellow\": \"#fafad2\",\n \"lightgrey\": \"#d3d3d3\",\n \"lightgreen\": \"#90ee90\",\n \"lightpink\": \"#ffb6c1\",\n \"lightsalmon\": \"#ffa07a\",\n \"lightseagreen\": \"#20b2aa\",\n \"lightskyblue\": \"#87cefa\",\n \"lightslategray\": \"#778899\",\n \"lightsteelblue\": \"#b0c4de\",\n \"lightyellow\": \"#ffffe0\",\n \"lime\": \"#00ff00\",\n \"limegreen\": \"#32cd32\",\n \"linen\": \"#faf0e6\",\n \"magenta\": \"#ff00ff\",\n \"maroon\": \"#800000\",\n \"mediumaquamarine\": \"#66cdaa\",\n \"mediumblue\": \"#0000cd\",\n \"mediumorchid\": \"#ba55d3\",\n \"mediumpurple\": \"#9370d8\",\n \"mediumseagreen\": \"#3cb371\",\n \"mediumslateblue\": \"#7b68ee\",\n \"mediumspringgreen\": \"#00fa9a\",\n \"mediumturquoise\": \"#48d1cc\",\n \"mediumvioletred\": \"#c71585\",\n \"midnightblue\": \"#191970\",\n \"mintcream\": \"#f5fffa\",\n \"mistyrose\": \"#ffe4e1\",\n \"moccasin\": \"#ffe4b5\",\n \"navajowhite\": \"#ffdead\",\n \"navy\": \"#000080\",\n \"oldlace\": \"#fdf5e6\",\n \"olive\": \"#808000\",\n \"olivedrab\": \"#6b8e23\",\n \"orange\": \"#ffa500\",\n \"orangered\": \"#ff4500\",\n \"orchid\": \"#da70d6\",\n \"palegoldenrod\": \"#eee8aa\",\n \"palegreen\": \"#98fb98\",\n \"paleturquoise\": \"#afeeee\",\n \"palevioletred\": \"#d87093\",\n \"papayawhip\": \"#ffefd5\",\n \"peachpuff\": \"#ffdab9\",\n \"peru\": \"#cd853f\",\n \"pink\": \"#ffc0cb\",\n \"plum\": \"#dda0dd\",\n \"powderblue\": \"#b0e0e6\",\n \"purple\": \"#800080\",\n \"red\": \"#ff0000\",\n \"rosybrown\": \"#bc8f8f\",\n \"royalblue\": \"#4169e1\",\n \"saddlebrown\": \"#8b4513\",\n \"salmon\": \"#fa8072\",\n \"sandybrown\": \"#f4a460\",\n \"seagreen\": \"#2e8b57\",\n \"seashell\": \"#fff5ee\",\n \"sienna\": \"#a0522d\",\n \"silver\": \"#c0c0c0\",\n \"skyblue\": \"#87ceeb\",\n \"slateblue\": \"#6a5acd\",\n \"slategray\": \"#708090\",\n \"snow\": \"#fffafa\",\n \"springgreen\": \"#00ff7f\",\n \"steelblue\": \"#4682b4\",\n \"tan\": \"#d2b48c\",\n \"teal\": \"#008080\",\n \"thistle\": \"#d8bfd8\",\n \"tomato\": \"#ff6347\",\n \"turquoise\": \"#40e0d0\",\n \"violet\": \"#ee82ee\",\n \"wheat\": \"#f5deb3\",\n \"white\": \"#ffffff\",\n \"whitesmoke\": \"#f5f5f5\",\n \"yellow\": \"#ffff00\",\n \"yellowgreen\": \"#9acd32\"\n }[name.toLowerCase()]\n }\n \n \n static hexToDescriptor(c: string): UIColorDescriptor {\n if (c[0] === \"#\") {\n c = c.substr(1)\n }\n const r = parseInt(c.slice(0, 2), 16)\n const g = parseInt(c.slice(2, 4), 16)\n const b = parseInt(c.slice(4, 6), 16)\n const a = parseInt(c.slice(6, 8), 16)\n \n const result = { \"red\": r, \"green\": g, \"blue\": b, \"alpha\": a }\n \n return result\n \n }\n \n static rgbToDescriptor(colorString: string) {\n \n if (colorString.startsWith(\"rgba(\")) {\n colorString = colorString.slice(5, colorString.length - 1)\n }\n \n if (colorString.startsWith(\"rgb(\")) {\n colorString = colorString.slice(4, colorString.length - 1) + \", 0\"\n }\n \n const components = colorString.split(\",\")\n \n const result = {\n \"red\": Number(components[0]),\n \"green\": Number(components[1]),\n \"blue\": Number(components[2]),\n \"alpha\": Number(components[3])\n }\n \n return result\n \n }\n \n \n get colorDescriptor(): UIColorDescriptor {\n \n var descriptor\n \n const colorHEXFromName = UIColor.nameToHex(this.stringValue)\n \n if (this.stringValue.startsWith(\"rgb\")) {\n descriptor = UIColor.rgbToDescriptor(this.stringValue)\n }\n else if (colorHEXFromName) {\n descriptor = UIColor.hexToDescriptor(colorHEXFromName)\n }\n else {\n descriptor = UIColor.hexToDescriptor(this.stringValue)\n }\n \n return descriptor\n \n }\n \n \n colorWithRed(red: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + red + \",\" + descriptor.green + \",\" + descriptor.blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithGreen(green: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + green + \",\" + descriptor.blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithBlue(blue: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + descriptor.green + \",\" + blue + \",\" + descriptor.alpha + \")\"\n )\n \n }\n \n colorWithAlpha(alpha: number) {\n \n const descriptor = this.colorDescriptor\n \n return new UIColor(\n \"rgba(\" + descriptor.red + \",\" + descriptor.green + \",\" + descriptor.blue + \",\" + alpha + \")\"\n )\n \n }\n \n static colorWithRGBA(red: number, green: number, blue: number, alpha: number = 1) {\n \n const result = new UIColor(\"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha + \")\")\n \n return result\n \n }\n \n static colorWithDescriptor(descriptor: UIColorDescriptor) {\n \n const red = Math.min(255, Math.max(0, descriptor.red)).toFixed(0)\n const green = Math.min(255, Math.max(0, descriptor.green)).toFixed(0)\n const blue = Math.min(255, Math.max(0, descriptor.blue)).toFixed(0)\n const alpha = this.alphaDefaultingToOne(descriptor.alpha)\n \n return new UIColor(\"rgba(\" + red + \",\" + green + \",\" + blue + \",\" + alpha + \")\")\n \n }\n \n \n private static alphaDefaultingToOne(value = 1) {\n if (value != value) {\n value = 1\n }\n return value\n }\n \n \n colorByMultiplyingRGB(multiplier: number) {\n \n const descriptor = this.colorDescriptor\n \n descriptor.red = descriptor.red * multiplier\n descriptor.green = descriptor.green * multiplier\n descriptor.blue = descriptor.blue * multiplier\n \n return UIColor.colorWithDescriptor(descriptor)\n \n }\n \n \n /**\n * Returns the perceptual lightness (L*) of this color in the range [0, 1],\n * using the CIELAB formula. 0 = absolute black, 1 = absolute white.\n * Unlike raw relative luminance, this scale is perceptually uniform \u2014\n * 0.5 is the genuine visual midpoint between black and white.\n */\n get perceivedLightness(): number {\n \n const descriptor = this.colorDescriptor\n \n const linearise = (channel: number) => {\n const normalised = channel / 255\n if (normalised <= 0.04045) {\n return normalised / 12.92\n }\n return Math.pow((normalised + 0.055) / 1.055, 2.4)\n }\n \n const luminance = 0.2126 * linearise(descriptor.red)\n + 0.7152 * linearise(descriptor.green)\n + 0.0722 * linearise(descriptor.blue)\n \n const epsilon = Math.pow(6 / 29, 3) // ~0.00886\n \n const f = luminance > epsilon\n ? Math.pow(luminance, 1 / 3)\n : (Math.pow(29 / 6, 2) / 3) * luminance + 4 / 29\n \n return (116 * f - 16) / 100\n \n }\n \n get isLight(): boolean {\n return this.perceivedLightness >= 0.5\n }\n \n \n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -105,7 +105,8 @@ const _UIDialogView = class extends import_UIView.UIView {
105
105
  0,
106
106
  void 0,
107
107
  () => this.animateAppearing(),
108
- import_UIObject.nil
108
+ import_UIObject.nil,
109
+ "opacity"
109
110
  );
110
111
  } else {
111
112
  this.setNeedsLayout();
@@ -146,7 +147,8 @@ const _UIDialogView = class extends import_UIView.UIView {
146
147
  this.removeFromSuperview();
147
148
  unlockScroll();
148
149
  }
149
- }
150
+ },
151
+ "opacity"
150
152
  );
151
153
  } else {
152
154
  this.removeFromSuperview();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIDialogView.ts"],
4
- "sourcesContent": ["import { IS_FIREFOX } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UINativeScrollView } from \"./UINativeScrollView\"\nimport { FIRST, IF, IS, nil, NO, YES } from \"./UIObject\"\nimport { UIScrollView } from \"./UIScrollView\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIDialogView<ViewType extends UIView = UIView> extends UIView {\n \n _isAUIDialogView = YES\n _view: ViewType = new UIView() as any\n _appearedAnimated?: boolean\n animationDuration: number = 0.25\n _zIndex: number = 100\n isVisible: boolean = NO\n dismissesOnTapOutside = YES\n \n static _activeDialogCount = 0\n _fillsViewport = NO\n \n constructor(elementID?: string, viewHTMLElement?: HTMLElement) {\n \n super(elementID, viewHTMLElement)\n \n this.addSubview(this.view)\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerTap,\n (sender: UIView, event: Event) => {\n \n this.didDetectTapOutside(sender, event)\n \n }\n )\n \n this.backgroundColor = UIColor.colorWithRGBA(0, 10, 25).colorWithAlpha(0.75) //CBColor.primaryContentColor.colorWithAlpha(0.75)\n \n this.zIndex = this._zIndex\n \n }\n \n \n didDetectTapOutside(sender: UIView, event: Event) {\n \n if (event.target == this.viewHTMLElement && this.dismissesOnTapOutside) {\n this.dismiss(this._appearedAnimated)\n }\n \n }\n \n \n set zIndex(zIndex: number) {\n \n this._zIndex = zIndex\n this.style.zIndex = \"\" + zIndex\n \n }\n \n get zIndex() {\n \n return this._zIndex\n \n }\n \n \n set view(view: ViewType) {\n \n this._view?.removeFromSuperview()\n \n this._view = view\n \n this.addSubview(view)\n \n }\n \n \n get view(): ViewType {\n \n return this._view\n \n }\n \n \n override willAppear(animated: boolean = NO) {\n \n if (animated) {\n \n this.style.opacity = \"0\"\n \n }\n \n this.style.height = \"\"\n \n this._frame = nil\n \n }\n \n \n animateAppearing() {\n \n this.style.opacity = \"1\"\n \n }\n \n animateDisappearing() {\n \n this.style.opacity = \"0\"\n \n }\n \n \n showInView(containerView: UIView, animated: boolean) {\n \n this._fillsViewport = containerView.rootView == containerView\n animated = (animated && !IS_FIREFOX)\n \n this._appearedAnimated = animated\n \n this.willAppear(animated)\n \n \n if (this._fillsViewport) {\n UIDialogView._activeDialogCount++\n if (UIDialogView._activeDialogCount >= 1) {\n document.body.style.overflow = \"hidden\"\n this.style.overflowY = \"auto\"\n }\n }\n \n containerView.addSubview(this)\n this.view.setNeedsLayoutUpToRootView()\n \n if (animated) {\n \n UIView.layoutViewsIfNeeded()\n this.layoutSubviews()\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n () => this.animateAppearing(),\n nil\n )\n \n \n }\n else {\n \n this.setNeedsLayout()\n \n }\n \n this.isVisible = YES\n \n }\n \n \n showInRootView(animated: boolean) {\n \n this.showInView(UICore.main.rootViewController.view, animated)\n \n }\n \n \n dismiss(animated?: boolean) {\n \n if (!this.isVisible) {\n return\n }\n \n animated = (animated && !IS_FIREFOX)\n \n if (animated == undefined) {\n \n animated = this._appearedAnimated\n \n }\n \n const unlockScroll = () => {\n if (this._fillsViewport) {\n UIDialogView._activeDialogCount = Math.max(0, UIDialogView._activeDialogCount - 1)\n if (UIDialogView._activeDialogCount === 0) {\n document.body.style.overflow = \"\"\n }\n this.style.overflowY = \"\"\n }\n }\n \n if (animated) {\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n (() => {\n \n this.animateDisappearing()\n \n }).bind(this),\n () => {\n \n if (this.isVisible == NO) {\n \n this.removeFromSuperview()\n unlockScroll()\n \n }\n \n }\n )\n \n }\n else {\n \n this.removeFromSuperview()\n unlockScroll()\n \n }\n \n this.isVisible = NO\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.WindowDidResize) {\n \n this.setNeedsLayout()\n \n }\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n override layoutSubviews() {\n \n \n if (!IS(this.view)) {\n \n return\n \n }\n \n if (this._fillsViewport) {\n const containerRect = this.superview?.viewHTMLElement?.getBoundingClientRect()\n const topOffset = containerRect ? -containerRect.top / UIView.pageScale : 0\n this.setPosition(0, 0, 0, topOffset, window.innerHeight / UIView.pageScale, \"100%\")\n }\n else {\n this.setPosition(0, 0, 0, 0, 0, \"100%\")\n this.setPosition(\n 0,\n 0,\n 0,\n 0,\n FIRST(\n IF(this.superview?.isKindOfClass(UINativeScrollView))(() => this.superview?.scrollSize.height ?? 0)\n .ELSE_IF(this.superview?.isKindOfClass(UIScrollView))(\n () => this.superview?.scrollSize.height ?? 0)\n .ELSE(() => this.superview?.frame.height ?? 0),\n UIView.pageHeight\n ) / UIView.pageScale,\n \"100%\"\n )\n }\n \n this.view.style.zIndex = \"\" + this.zIndex\n \n this.view.setNeedsLayout()\n \n super.layoutSubviews()\n \n }\n \n \n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { IS_FIREFOX } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UINativeScrollView } from \"./UINativeScrollView\"\nimport { FIRST, IF, IS, nil, NO, YES } from \"./UIObject\"\nimport { UIScrollView } from \"./UIScrollView\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIDialogView<ViewType extends UIView = UIView> extends UIView {\n \n _isAUIDialogView = YES\n _view: ViewType = new UIView() as any\n _appearedAnimated?: boolean\n animationDuration: number = 0.25\n _zIndex: number = 100\n isVisible: boolean = NO\n dismissesOnTapOutside = YES\n \n static _activeDialogCount = 0\n _fillsViewport = NO\n \n constructor(elementID?: string, viewHTMLElement?: HTMLElement) {\n \n super(elementID, viewHTMLElement)\n \n this.addSubview(this.view)\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerTap,\n (sender: UIView, event: Event) => {\n \n this.didDetectTapOutside(sender, event)\n \n }\n )\n \n this.backgroundColor = UIColor.colorWithRGBA(0, 10, 25).colorWithAlpha(0.75) //CBColor.primaryContentColor.colorWithAlpha(0.75)\n \n this.zIndex = this._zIndex\n \n }\n \n \n didDetectTapOutside(sender: UIView, event: Event) {\n \n if (event.target == this.viewHTMLElement && this.dismissesOnTapOutside) {\n this.dismiss(this._appearedAnimated)\n }\n \n }\n \n \n set zIndex(zIndex: number) {\n \n this._zIndex = zIndex\n this.style.zIndex = \"\" + zIndex\n \n }\n \n get zIndex() {\n \n return this._zIndex\n \n }\n \n \n set view(view: ViewType) {\n \n this._view?.removeFromSuperview()\n \n this._view = view\n \n this.addSubview(view)\n \n }\n \n \n get view(): ViewType {\n \n return this._view\n \n }\n \n \n override willAppear(animated: boolean = NO) {\n \n if (animated) {\n \n this.style.opacity = \"0\"\n \n }\n \n this.style.height = \"\"\n \n this._frame = nil\n \n }\n \n \n animateAppearing() {\n \n this.style.opacity = \"1\"\n \n }\n \n animateDisappearing() {\n \n this.style.opacity = \"0\"\n \n }\n \n \n showInView(containerView: UIView, animated: boolean) {\n \n this._fillsViewport = containerView.rootView == containerView\n animated = (animated && !IS_FIREFOX)\n \n this._appearedAnimated = animated\n \n this.willAppear(animated)\n \n \n if (this._fillsViewport) {\n UIDialogView._activeDialogCount++\n if (UIDialogView._activeDialogCount >= 1) {\n document.body.style.overflow = \"hidden\"\n this.style.overflowY = \"auto\"\n }\n }\n \n containerView.addSubview(this)\n this.view.setNeedsLayoutUpToRootView()\n \n if (animated) {\n \n UIView.layoutViewsIfNeeded()\n this.layoutSubviews()\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n () => this.animateAppearing(),\n nil,\n \"opacity\"\n )\n \n \n }\n else {\n \n this.setNeedsLayout()\n \n }\n \n this.isVisible = YES\n \n }\n \n \n showInRootView(animated: boolean) {\n \n this.showInView(UICore.main.rootViewController.view, animated)\n \n }\n \n \n dismiss(animated?: boolean) {\n \n if (!this.isVisible) {\n return\n }\n \n animated = (animated && !IS_FIREFOX)\n \n if (animated == undefined) {\n \n animated = this._appearedAnimated\n \n }\n \n const unlockScroll = () => {\n if (this._fillsViewport) {\n UIDialogView._activeDialogCount = Math.max(0, UIDialogView._activeDialogCount - 1)\n if (UIDialogView._activeDialogCount === 0) {\n document.body.style.overflow = \"\"\n }\n this.style.overflowY = \"\"\n }\n }\n \n if (animated) {\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this,\n this.animationDuration,\n 0,\n undefined,\n (() => {\n \n this.animateDisappearing()\n \n }).bind(this),\n () => {\n \n if (this.isVisible == NO) {\n \n this.removeFromSuperview()\n unlockScroll()\n \n }\n \n },\n \"opacity\"\n )\n \n }\n else {\n \n this.removeFromSuperview()\n unlockScroll()\n \n }\n \n this.isVisible = NO\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UICore.broadcastEventName.WindowDidResize) {\n \n this.setNeedsLayout()\n \n }\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n override layoutSubviews() {\n \n \n if (!IS(this.view)) {\n \n return\n \n }\n \n if (this._fillsViewport) {\n const containerRect = this.superview?.viewHTMLElement?.getBoundingClientRect()\n const topOffset = containerRect ? -containerRect.top / UIView.pageScale : 0\n this.setPosition(0, 0, 0, topOffset, window.innerHeight / UIView.pageScale, \"100%\")\n }\n else {\n this.setPosition(0, 0, 0, 0, 0, \"100%\")\n this.setPosition(\n 0,\n 0,\n 0,\n 0,\n FIRST(\n IF(this.superview?.isKindOfClass(UINativeScrollView))(() => this.superview?.scrollSize.height ?? 0)\n .ELSE_IF(this.superview?.isKindOfClass(UIScrollView))(\n () => this.superview?.scrollSize.height ?? 0)\n .ELSE(() => this.superview?.frame.height ?? 0),\n UIView.pageHeight\n ) / UIView.pageScale,\n \"100%\"\n )\n }\n \n this.view.style.zIndex = \"\" + this.zIndex\n \n this.view.setNeedsLayout()\n \n super.layoutSubviews()\n \n }\n \n \n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a", "_b"]
7
7
  }
@@ -18,13 +18,13 @@ export declare class UIImageView extends UIView {
18
18
  static dataURL(url: string | URL, callback: (arg0: string | ArrayBuffer | null) => void): void;
19
19
  static dataURLWithMaxSize(URLString: string, maxSize: number, completion: (resultURLString: string) => void): void;
20
20
  static dataURLWithSizes(URLString: string, height: number, width: number, completion: (resultURLString: string) => void): void;
21
- getDataURL(height?: number, width?: number): string;
21
+ dataURLWithHeightAndWidth(height?: number, width?: number): string;
22
22
  get imageSource(): string;
23
23
  set imageSource(sourceString: string);
24
- setImageSource(key: string, defaultString: string): void;
24
+ applyLocalizedImageSourceForKey(key: string, defaultSource: string): void;
25
25
  didReceiveBroadcastEvent(event: UIViewBroadcastEvent): void;
26
26
  willMoveToSuperview(superview: UIView): void;
27
- _setImageSourceFromKeyIfPossible(): void;
27
+ _applyLocalizedImageSourceIfPossible(): void;
28
28
  get fillMode(): any;
29
29
  set fillMode(fillMode: any);
30
30
  get hiddenWhenEmpty(): boolean;
@@ -66,7 +66,7 @@ const _UIImageView = class extends import_UIView.UIView {
66
66
  const originalSize = imageView.intrinsicContentSize();
67
67
  let multiplier = maxSize / Math.max(originalSize.height, originalSize.width);
68
68
  multiplier = Math.min(1, multiplier);
69
- const result = imageView.getDataURL((originalSize.height * multiplier).integerValue, (originalSize.width * multiplier).integerValue);
69
+ const result = imageView.dataURLWithHeightAndWidth((originalSize.height * multiplier).integerValue, (originalSize.width * multiplier).integerValue);
70
70
  completion(result);
71
71
  };
72
72
  }
@@ -74,11 +74,11 @@ const _UIImageView = class extends import_UIView.UIView {
74
74
  const imageView = new _UIImageView();
75
75
  imageView.imageSource = URLString;
76
76
  imageView.viewHTMLElement.onload = () => {
77
- const result = imageView.getDataURL(height, width);
77
+ const result = imageView.dataURLWithHeightAndWidth(height, width);
78
78
  completion(result);
79
79
  };
80
80
  }
81
- getDataURL(height, width) {
81
+ dataURLWithHeightAndWidth(height, width) {
82
82
  const img = this.viewHTMLElement;
83
83
  const canvas = document.createElement("canvas");
84
84
  canvas.width = width != null ? width : img.naturalWidth;
@@ -109,23 +109,23 @@ const _UIImageView = class extends import_UIView.UIView {
109
109
  return (_a = this.superview) == null ? void 0 : _a.setNeedsLayout();
110
110
  };
111
111
  }
112
- setImageSource(key, defaultString) {
112
+ applyLocalizedImageSourceForKey(key, defaultSource) {
113
113
  const languageName = import_UICore.UICore.languageService.currentLanguageKey;
114
- this.imageSource = import_UICore.UICore.languageService.stringForKey(key, languageName, defaultString, void 0);
114
+ this.imageSource = import_UICore.UICore.languageService.stringForKey(key, languageName, defaultSource, void 0);
115
115
  }
116
116
  didReceiveBroadcastEvent(event) {
117
117
  super.didReceiveBroadcastEvent(event);
118
118
  if (event.name == import_UIView.UIView.broadcastEventName.LanguageChanged || event.name == import_UIView.UIView.broadcastEventName.AddedToViewTree) {
119
- this._setImageSourceFromKeyIfPossible();
119
+ this._applyLocalizedImageSourceIfPossible();
120
120
  }
121
121
  }
122
122
  willMoveToSuperview(superview) {
123
123
  super.willMoveToSuperview(superview);
124
- this._setImageSourceFromKeyIfPossible();
124
+ this._applyLocalizedImageSourceIfPossible();
125
125
  }
126
- _setImageSourceFromKeyIfPossible() {
126
+ _applyLocalizedImageSourceIfPossible() {
127
127
  if (this._sourceKey && this._defaultSource) {
128
- this.setImageSource(this._sourceKey, this._defaultSource);
128
+ this.applyLocalizedImageSourceForKey(this._sourceKey, this._defaultSource);
129
129
  }
130
130
  }
131
131
  get fillMode() {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIImageView.ts"],
4
- "sourcesContent": ["import { UICore } from \"./UICore\"\nimport { IS_NOT, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIImageView extends UIView {\n \n \n //actionIndicator: UIActionIndicator;\n _sourceKey?: string\n _defaultSource?: string\n \n _fillMode: any\n \n _hiddenWhenEmpty = NO\n \n \n constructor(elementID?: string, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, \"img\")\n \n \n //this.actionIndicator = new UIActionIndicator(elementID + \"ActionIndicator\");\n \n \n }\n \n \n static fillMode = {\n \n \"stretchToFill\": \"fill\",\n \"aspectFit\": \"contain\",\n \"aspectFill\": \"cover\",\n \"center\": \"none\",\n \"aspectFitIfLarger\": \"scale-down\"\n \n }\n \n \n override get viewHTMLElement() {\n \n return super.viewHTMLElement as HTMLImageElement\n \n }\n \n \n static objectURLFromDataURL(dataURL: string) {\n // @ts-ignore\n const blob = dataURLtoBlob(dataURL)\n return URL.createObjectURL(blob)\n }\n \n \n static dataURL(url: string | URL, callback: (arg0: string | ArrayBuffer | null) => void) {\n const xhr = new XMLHttpRequest()\n xhr.open(\"get\", url)\n xhr.responseType = \"blob\"\n xhr.onload = function () {\n const fr = new FileReader()\n \n fr.onload = function () {\n callback(this.result)\n }\n \n fr.readAsDataURL(xhr.response) // async call\n }\n \n xhr.send()\n }\n \n \n static dataURLWithMaxSize(URLString: string, maxSize: number, completion: (resultURLString: string) => void) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const originalSize = imageView.intrinsicContentSize()\n \n let multiplier = maxSize / Math.max(originalSize.height, originalSize.width)\n multiplier = Math.min(1, multiplier)\n \n const result = imageView.getDataURL((originalSize.height * multiplier).integerValue, (originalSize.width *\n multiplier).integerValue)\n \n completion(result)\n \n }\n \n }\n \n \n static dataURLWithSizes(\n URLString: string,\n height: number,\n width: number,\n completion: (resultURLString: string) => void\n ) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const result = imageView.getDataURL(height, width)\n completion(result)\n \n }\n \n }\n \n \n getDataURL(height?: number, width?: number) {\n \n const img = this.viewHTMLElement\n \n // Create an empty canvas element\n const canvas: HTMLCanvasElement = document.createElement(\"canvas\")\n canvas.width = width ?? img.naturalWidth\n canvas.height = height ?? img.naturalHeight\n \n // Copy the image contents to the canvas\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D\n ctx.drawImage(img, 0, 0, width ?? img.naturalWidth, height ?? img.naturalHeight)\n \n // Get the data-URL formatted image\n // Firefox supports PNG and JPEG. You could check img.src to\n // guess the original format, but be aware the using \"image/jpg\"\n // will re-encode the image.\n return canvas.toDataURL(\"image/png\")\n \n }\n \n \n get imageSource() {\n \n return this.viewHTMLElement.src\n \n }\n \n set imageSource(sourceString: string) {\n \n if (IS_NOT(sourceString)) {\n sourceString = \"\"\n }\n \n this.viewHTMLElement.src = sourceString\n \n if (this.hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n \n if (!sourceString || !sourceString.length) {\n \n //this.actionIndicator.stop();\n this.hidden = YES\n \n return\n \n }\n else {\n \n this.hidden = NO\n \n }\n \n // this.superview.addSubview(this.actionIndicator);\n // this.actionIndicator.frame = this.frame;\n // this.actionIndicator.start();\n // this.actionIndicator.backgroundColor = UIColor.redColor\n \n // @ts-ignore\n this.viewHTMLElement.onload = () => this.superview?.setNeedsLayout()\n \n }\n \n \n setImageSource(key: string, defaultString: string) {\n \n const languageName = UICore.languageService.currentLanguageKey\n this.imageSource = UICore.languageService.stringForKey(key, languageName, defaultString, undefined)\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this._setImageSourceFromKeyIfPossible()\n \n }\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n this._setImageSourceFromKeyIfPossible()\n \n }\n \n _setImageSourceFromKeyIfPossible() {\n \n if (this._sourceKey && this._defaultSource) {\n \n this.setImageSource(this._sourceKey, this._defaultSource)\n \n }\n \n }\n \n \n get fillMode() {\n return this._fillMode\n }\n \n set fillMode(fillMode) {\n \n this._fillMode = fillMode;\n (this.style as any).objectFit = fillMode\n \n }\n \n \n get hiddenWhenEmpty() {\n return this._hiddenWhenEmpty\n }\n \n set hiddenWhenEmpty(hiddenWhenEmpty: boolean) {\n this._hiddenWhenEmpty = hiddenWhenEmpty\n if (hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n }\n \n \n override didMoveToSuperview(superview: UIView) {\n \n super.didMoveToSuperview(superview)\n \n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n }\n \n \n override intrinsicContentSize = () => {\n \n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight, this.viewHTMLElement.naturalWidth)\n \n \n }\n \n override intrinsicContentSizeWithConstraints = (constrainingHeight = 0, constrainingWidth = 0) => {\n \n const heightRatio = constrainingHeight / this.viewHTMLElement.naturalHeight\n \n const widthRatio = constrainingWidth / this.viewHTMLElement.naturalWidth\n \n const multiplier = Math.max(heightRatio, widthRatio)\n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight *\n multiplier, this.viewHTMLElement.naturalWidth * multiplier)\n \n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,sBAAgC;AAChC,yBAA4B;AAC5B,oBAA6C;AAGtC,MAAM,eAAN,cAA0B,qBAAO;AAAA,EAYpC,YAAY,WAAoB,kBAAkB,MAAM;AAEpD,UAAM,WAAW,iBAAiB,KAAK;AAL3C,4BAAmB;AAqPnB,SAAS,uBAAuB,MAAM;AAGlC,aAAO,IAAI,+BAAY,GAAG,GAAG,KAAK,gBAAgB,eAAe,KAAK,gBAAgB,YAAY;AAAA,IAGtG;AAEA,SAAS,sCAAsC,CAAC,qBAAqB,GAAG,oBAAoB,MAAM;AAE9F,YAAM,cAAc,qBAAqB,KAAK,gBAAgB;AAE9D,YAAM,aAAa,oBAAoB,KAAK,gBAAgB;AAE5D,YAAM,aAAa,KAAK,IAAI,aAAa,UAAU;AAEnD,aAAO,IAAI,+BAAY,GAAG,GAAG,KAAK,gBAAgB,gBAC9C,YAAY,KAAK,gBAAgB,eAAe,UAAU;AAAA,IAGlE;AAAA,EA9PA;AAAA,EAcA,IAAa,kBAAkB;AAE3B,WAAO,MAAM;AAAA,EAEjB;AAAA,EAGA,OAAO,qBAAqB,SAAiB;AAEzC,UAAM,OAAO,cAAc,OAAO;AAClC,WAAO,IAAI,gBAAgB,IAAI;AAAA,EACnC;AAAA,EAGA,OAAO,QAAQ,KAAmB,UAAuD;AACrF,UAAM,MAAM,IAAI,eAAe;AAC/B,QAAI,KAAK,OAAO,GAAG;AACnB,QAAI,eAAe;AACnB,QAAI,SAAS,WAAY;AACrB,YAAM,KAAK,IAAI,WAAW;AAE1B,SAAG,SAAS,WAAY;AACpB,iBAAS,KAAK,MAAM;AAAA,MACxB;AAEA,SAAG,cAAc,IAAI,QAAQ;AAAA,IACjC;AAEA,QAAI,KAAK;AAAA,EACb;AAAA,EAGA,OAAO,mBAAmB,WAAmB,SAAiB,YAA+C;AAEzG,UAAM,YAAY,IAAI,aAAY;AAClC,cAAU,cAAc;AAExB,cAAU,gBAAgB,SAAS,MAAM;AAErC,YAAM,eAAe,UAAU,qBAAqB;AAEpD,UAAI,aAAa,UAAU,KAAK,IAAI,aAAa,QAAQ,aAAa,KAAK;AAC3E,mBAAa,KAAK,IAAI,GAAG,UAAU;AAEnC,YAAM,SAAS,UAAU,YAAY,aAAa,SAAS,YAAY,eAAe,aAAa,QAC/F,YAAY,YAAY;AAE5B,iBAAW,MAAM;AAAA,IAErB;AAAA,EAEJ;AAAA,EAGA,OAAO,iBACH,WACA,QACA,OACA,YACF;AAEE,UAAM,YAAY,IAAI,aAAY;AAClC,cAAU,cAAc;AAExB,cAAU,gBAAgB,SAAS,MAAM;AAErC,YAAM,SAAS,UAAU,WAAW,QAAQ,KAAK;AACjD,iBAAW,MAAM;AAAA,IAErB;AAAA,EAEJ;AAAA,EAGA,WAAW,QAAiB,OAAgB;AAExC,UAAM,MAAM,KAAK;AAGjB,UAAM,SAA4B,SAAS,cAAc,QAAQ;AACjE,WAAO,QAAQ,wBAAS,IAAI;AAC5B,WAAO,SAAS,0BAAU,IAAI;AAG9B,UAAM,MAAM,OAAO,WAAW,IAAI;AAClC,QAAI,UAAU,KAAK,GAAG,GAAG,wBAAS,IAAI,cAAc,0BAAU,IAAI,aAAa;AAM/E,WAAO,OAAO,UAAU,WAAW;AAAA,EAEvC;AAAA,EAGA,IAAI,cAAc;AAEd,WAAO,KAAK,gBAAgB;AAAA,EAEhC;AAAA,EAEA,IAAI,YAAY,cAAsB;AAElC,YAAI,wBAAO,YAAY,GAAG;AACtB,qBAAe;AAAA,IACnB;AAEA,SAAK,gBAAgB,MAAM;AAE3B,QAAI,KAAK,iBAAiB;AACtB,WAAK,aAAS,wBAAO,KAAK,WAAW;AAAA,IACzC;AAEA,QAAI,CAAC,gBAAgB,CAAC,aAAa,QAAQ;AAGvC,WAAK,SAAS;AAEd;AAAA,IAEJ,OACK;AAED,WAAK,SAAS;AAAA,IAElB;AAQA,SAAK,gBAAgB,SAAS,MAAG;AA9KzC;AA8K4C,wBAAK,cAAL,mBAAgB;AAAA;AAAA,EAExD;AAAA,EAGA,eAAe,KAAa,eAAuB;AAE/C,UAAM,eAAe,qBAAO,gBAAgB;AAC5C,SAAK,cAAc,qBAAO,gBAAgB,aAAa,KAAK,cAAc,eAAe,MAAS;AAAA,EAEtG;AAAA,EAGS,yBAAyB,OAA6B;AAE3D,UAAM,yBAAyB,KAAK;AAEpC,QAAI,MAAM,QAAQ,qBAAO,mBAAmB,mBAAmB,MAAM,QACjE,qBAAO,mBAAmB,iBAAiB;AAE3C,WAAK,iCAAiC;AAAA,IAE1C;AAAA,EAEJ;AAAA,EAGS,oBAAoB,WAAmB;AAE5C,UAAM,oBAAoB,SAAS;AAEnC,SAAK,iCAAiC;AAAA,EAE1C;AAAA,EAEA,mCAAmC;AAE/B,QAAI,KAAK,cAAc,KAAK,gBAAgB;AAExC,WAAK,eAAe,KAAK,YAAY,KAAK,cAAc;AAAA,IAE5D;AAAA,EAEJ;AAAA,EAGA,IAAI,WAAW;AACX,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS,UAAU;AAEnB,SAAK,YAAY;AACjB,IAAC,KAAK,MAAc,YAAY;AAAA,EAEpC;AAAA,EAGA,IAAI,kBAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,gBAAgB,iBAA0B;AAC1C,SAAK,mBAAmB;AACxB,QAAI,iBAAiB;AACjB,WAAK,aAAS,wBAAO,KAAK,WAAW;AAAA,IACzC;AAAA,EACJ;AAAA,EAGS,mBAAmB,WAAmB;AAE3C,UAAM,mBAAmB,SAAS;AAAA,EAGtC;AAAA,EAGS,iBAAiB;AAEtB,UAAM,eAAe;AAAA,EAGzB;AA0BJ;AArRO,IAAM,cAAN;AAAM,YAuBF,WAAW;AAAA,EAEd,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,UAAU;AAAA,EACV,qBAAqB;AAEzB;",
4
+ "sourcesContent": ["import { UICore } from \"./UICore\"\nimport { IS_NOT, NO, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UIImageView extends UIView {\n \n \n //actionIndicator: UIActionIndicator;\n _sourceKey?: string\n _defaultSource?: string\n \n _fillMode: any\n \n _hiddenWhenEmpty = NO\n \n \n constructor(elementID?: string, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, \"img\")\n \n \n //this.actionIndicator = new UIActionIndicator(elementID + \"ActionIndicator\");\n \n \n }\n \n \n static fillMode = {\n \n \"stretchToFill\": \"fill\",\n \"aspectFit\": \"contain\",\n \"aspectFill\": \"cover\",\n \"center\": \"none\",\n \"aspectFitIfLarger\": \"scale-down\"\n \n }\n \n \n override get viewHTMLElement() {\n \n return super.viewHTMLElement as HTMLImageElement\n \n }\n \n \n static objectURLFromDataURL(dataURL: string) {\n // @ts-ignore\n const blob = dataURLtoBlob(dataURL)\n return URL.createObjectURL(blob)\n }\n \n \n static dataURL(url: string | URL, callback: (arg0: string | ArrayBuffer | null) => void) {\n const xhr = new XMLHttpRequest()\n xhr.open(\"get\", url)\n xhr.responseType = \"blob\"\n xhr.onload = function () {\n const fr = new FileReader()\n \n fr.onload = function () {\n callback(this.result)\n }\n \n fr.readAsDataURL(xhr.response) // async call\n }\n \n xhr.send()\n }\n \n \n static dataURLWithMaxSize(URLString: string, maxSize: number, completion: (resultURLString: string) => void) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const originalSize = imageView.intrinsicContentSize()\n \n let multiplier = maxSize / Math.max(originalSize.height, originalSize.width)\n multiplier = Math.min(1, multiplier)\n \n const result = imageView.dataURLWithHeightAndWidth((originalSize.height * multiplier).integerValue, (originalSize.width *\n multiplier).integerValue)\n \n completion(result)\n \n }\n \n }\n \n \n static dataURLWithSizes(\n URLString: string,\n height: number,\n width: number,\n completion: (resultURLString: string) => void\n ) {\n \n const imageView = new UIImageView()\n imageView.imageSource = URLString\n \n imageView.viewHTMLElement.onload = () => {\n \n const result = imageView.dataURLWithHeightAndWidth(height, width)\n completion(result)\n \n }\n \n }\n \n \n dataURLWithHeightAndWidth(height?: number, width?: number) {\n \n const img = this.viewHTMLElement\n \n // Create an empty canvas element\n const canvas: HTMLCanvasElement = document.createElement(\"canvas\")\n canvas.width = width ?? img.naturalWidth\n canvas.height = height ?? img.naturalHeight\n \n // Copy the image contents to the canvas\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D\n ctx.drawImage(img, 0, 0, width ?? img.naturalWidth, height ?? img.naturalHeight)\n \n // Get the data-URL formatted image\n // Firefox supports PNG and JPEG. You could check img.src to\n // guess the original format, but be aware the using \"image/jpg\"\n // will re-encode the image.\n return canvas.toDataURL(\"image/png\")\n \n }\n \n get imageSource() {\n \n return this.viewHTMLElement.src\n \n }\n \n set imageSource(sourceString: string) {\n \n if (IS_NOT(sourceString)) {\n sourceString = \"\"\n }\n \n this.viewHTMLElement.src = sourceString\n \n if (this.hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n \n if (!sourceString || !sourceString.length) {\n \n //this.actionIndicator.stop();\n this.hidden = YES\n \n return\n \n }\n else {\n \n this.hidden = NO\n \n }\n \n // this.superview.addSubview(this.actionIndicator);\n // this.actionIndicator.frame = this.frame;\n // this.actionIndicator.start();\n // this.actionIndicator.backgroundColor = UIColor.redColor\n \n // @ts-ignore\n this.viewHTMLElement.onload = () => this.superview?.setNeedsLayout()\n \n }\n \n \n applyLocalizedImageSourceForKey(key: string, defaultSource: string) {\n \n const languageName = UICore.languageService.currentLanguageKey\n this.imageSource = UICore.languageService.stringForKey(key, languageName, defaultSource, undefined)\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this._applyLocalizedImageSourceIfPossible()\n \n }\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n this._applyLocalizedImageSourceIfPossible()\n \n }\n \n _applyLocalizedImageSourceIfPossible() {\n \n if (this._sourceKey && this._defaultSource) {\n \n this.applyLocalizedImageSourceForKey(this._sourceKey, this._defaultSource)\n \n }\n \n }\n \n \n get fillMode() {\n return this._fillMode\n }\n \n set fillMode(fillMode) {\n \n this._fillMode = fillMode;\n (this.style as any).objectFit = fillMode\n \n }\n \n \n get hiddenWhenEmpty() {\n return this._hiddenWhenEmpty\n }\n \n set hiddenWhenEmpty(hiddenWhenEmpty: boolean) {\n this._hiddenWhenEmpty = hiddenWhenEmpty\n if (hiddenWhenEmpty) {\n this.hidden = IS_NOT(this.imageSource)\n }\n }\n \n \n override didMoveToSuperview(superview: UIView) {\n \n super.didMoveToSuperview(superview)\n \n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n }\n \n \n override intrinsicContentSize = () => {\n \n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight, this.viewHTMLElement.naturalWidth)\n \n \n }\n \n override intrinsicContentSizeWithConstraints = (constrainingHeight = 0, constrainingWidth = 0) => {\n \n const heightRatio = constrainingHeight / this.viewHTMLElement.naturalHeight\n \n const widthRatio = constrainingWidth / this.viewHTMLElement.naturalWidth\n \n const multiplier = Math.max(heightRatio, widthRatio)\n \n return new UIRectangle(0, 0, this.viewHTMLElement.naturalHeight *\n multiplier, this.viewHTMLElement.naturalWidth * multiplier)\n \n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }