@telia-ace/widget-types-grid 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/LICENSE.txt +6 -0
  2. package/README.md +3 -0
  3. package/lib/component-platform-factory.d.ts +13 -0
  4. package/lib/component-platform-factory.js +105 -0
  5. package/lib/index.d.ts +4 -0
  6. package/lib/index.js +16 -0
  7. package/lib/services.d.ts +7 -0
  8. package/lib/services.js +99 -0
  9. package/lib/site-provider.d.ts +5 -0
  10. package/lib/site-provider.js +18 -0
  11. package/lib/ui/animated-view.d.ts +6 -0
  12. package/lib/ui/animated-view.js +142 -0
  13. package/lib/ui/component.d.ts +18 -0
  14. package/lib/ui/component.js +179 -0
  15. package/lib/ui/detached-component.d.ts +7 -0
  16. package/lib/ui/detached-component.js +73 -0
  17. package/lib/ui/determine-slide-direction.d.ts +26 -0
  18. package/lib/ui/determine-slide-direction.js +51 -0
  19. package/lib/ui/html-element-handlers.d.ts +18 -0
  20. package/lib/ui/html-element-handlers.js +128 -0
  21. package/lib/ui/index.d.ts +6 -0
  22. package/lib/ui/index.js +19 -0
  23. package/lib/ui/not-found.d.ts +6 -0
  24. package/lib/ui/not-found.js +83 -0
  25. package/lib/ui/prepare-dom.d.ts +20 -0
  26. package/lib/ui/prepare-dom.js +122 -0
  27. package/lib/ui/render.d.ts +3 -0
  28. package/lib/ui/render.js +11 -0
  29. package/lib/ui/resolvable-component.d.ts +7 -0
  30. package/lib/ui/resolvable-component.js +87 -0
  31. package/lib/ui/switch.d.ts +11 -0
  32. package/lib/ui/switch.js +58 -0
  33. package/lib/ui/unmount.d.ts +2 -0
  34. package/lib/ui/unmount.js +4 -0
  35. package/lib/ui/use-component-node-properties.d.ts +3 -0
  36. package/lib/ui/use-component-node-properties.js +44 -0
  37. package/lib/ui/use-router.d.ts +4 -0
  38. package/lib/ui/use-router.js +32 -0
  39. package/lib/ui/view-outlet.d.ts +32 -0
  40. package/lib/ui/view-outlet.js +151 -0
  41. package/lib/ui/view.d.ts +6 -0
  42. package/lib/ui/view.js +75 -0
  43. package/lib/ui/wrapper.d.ts +7 -0
  44. package/lib/ui/wrapper.js +108 -0
  45. package/lib/widget.d.ts +54 -0
  46. package/lib/widget.js +554 -0
  47. package/lib-esm/component-platform-factory.d.ts +13 -0
  48. package/lib-esm/component-platform-factory.js +101 -0
  49. package/lib-esm/index.d.ts +4 -0
  50. package/lib-esm/index.js +4 -0
  51. package/lib-esm/services.d.ts +7 -0
  52. package/lib-esm/services.js +67 -0
  53. package/lib-esm/site-provider.d.ts +5 -0
  54. package/lib-esm/site-provider.js +14 -0
  55. package/lib-esm/ui/animated-view.d.ts +6 -0
  56. package/lib-esm/ui/animated-view.js +114 -0
  57. package/lib-esm/ui/component.d.ts +18 -0
  58. package/lib-esm/ui/component.js +150 -0
  59. package/lib-esm/ui/detached-component.d.ts +7 -0
  60. package/lib-esm/ui/detached-component.js +45 -0
  61. package/lib-esm/ui/determine-slide-direction.d.ts +26 -0
  62. package/lib-esm/ui/determine-slide-direction.js +46 -0
  63. package/lib-esm/ui/html-element-handlers.d.ts +18 -0
  64. package/lib-esm/ui/html-element-handlers.js +120 -0
  65. package/lib-esm/ui/index.d.ts +6 -0
  66. package/lib-esm/ui/index.js +6 -0
  67. package/lib-esm/ui/not-found.d.ts +6 -0
  68. package/lib-esm/ui/not-found.js +58 -0
  69. package/lib-esm/ui/prepare-dom.d.ts +20 -0
  70. package/lib-esm/ui/prepare-dom.js +116 -0
  71. package/lib-esm/ui/render.d.ts +3 -0
  72. package/lib-esm/ui/render.js +6 -0
  73. package/lib-esm/ui/resolvable-component.d.ts +7 -0
  74. package/lib-esm/ui/resolvable-component.js +62 -0
  75. package/lib-esm/ui/switch.d.ts +11 -0
  76. package/lib-esm/ui/switch.js +53 -0
  77. package/lib-esm/ui/unmount.d.ts +2 -0
  78. package/lib-esm/ui/unmount.js +2 -0
  79. package/lib-esm/ui/use-component-node-properties.d.ts +3 -0
  80. package/lib-esm/ui/use-component-node-properties.js +42 -0
  81. package/lib-esm/ui/use-router.d.ts +4 -0
  82. package/lib-esm/ui/use-router.js +30 -0
  83. package/lib-esm/ui/view-outlet.d.ts +32 -0
  84. package/lib-esm/ui/view-outlet.js +126 -0
  85. package/lib-esm/ui/view.d.ts +6 -0
  86. package/lib-esm/ui/view.js +70 -0
  87. package/lib-esm/ui/wrapper.d.ts +7 -0
  88. package/lib-esm/ui/wrapper.js +80 -0
  89. package/lib-esm/widget.d.ts +54 -0
  90. package/lib-esm/widget.js +551 -0
  91. package/package.json +52 -0
@@ -0,0 +1,126 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ import { readStorage, StorageMedium } from '@telia-ace/widget-services';
27
+ import { notifyDataLoaded } from '@telia-ace/widget-utilities';
28
+ import { createTriggerElement, setActive, setLoading } from './html-element-handlers';
29
+ import { TriggerType } from './prepare-dom';
30
+ var MODALS_STORAGE_KEY = 'modals';
31
+ var ViewOutlet = /** @class */ (function () {
32
+ function ViewOutlet(container, options) {
33
+ this.options = options;
34
+ this.unsubscribe = [];
35
+ this.container = container.createChild(this);
36
+ this.container.register('widgetDOMElement', this.options.widgetDOMElement);
37
+ this.container.register('triggerDOMElement', this.options.triggerDOMElement);
38
+ var widget = this.container.get('$widget');
39
+ this.options.widgetDOMElement.classList.add('humany-widget');
40
+ this.options.widgetDOMElement.classList.add("humany_".concat(widget.name));
41
+ var widgetDOMElements = container.get('widgetDOMElements') || [];
42
+ container.register('widgetDOMElements', __spreadArray(__spreadArray([], __read(widgetDOMElements), false), [
43
+ this.options.widgetDOMElement,
44
+ ], false));
45
+ }
46
+ /**
47
+ * Renders the view outlet to the DOM.
48
+ */
49
+ ViewOutlet.prototype.render = function () {
50
+ var _this = this;
51
+ var _a = this.options, widgetDOMElement = _a.widgetDOMElement, triggerDOMElement = _a.triggerDOMElement;
52
+ var widget = this.container.get('$widget');
53
+ if (widgetDOMElement.getAttribute('data-rendered') === 'true') {
54
+ return Promise.resolve();
55
+ }
56
+ if (triggerDOMElement && this.options.triggerType === TriggerType.Badge) {
57
+ setLoading(triggerDOMElement);
58
+ }
59
+ return import('./render')
60
+ .then(function (module) { return module.default(_this.container, widgetDOMElement); })
61
+ .then(function () {
62
+ widgetDOMElement.setAttribute('data-rendered', 'true');
63
+ if (triggerDOMElement && _this.options.triggerType === TriggerType.Badge) {
64
+ var tooltip = _this.options.triggerOptions.openTooltip;
65
+ setActive(triggerDOMElement, tooltip);
66
+ }
67
+ notifyDataLoaded(_this.container, widgetDOMElement);
68
+ var widgets = _this.container.get('$environment').widgets.all();
69
+ readStorage(_this.container, MODALS_STORAGE_KEY, StorageMedium.Session).then(function (modals) {
70
+ if (modals) {
71
+ modals.forEach(function (modal) {
72
+ if (widgets.find(function (w) { return w.name === modal.name && w.state === 'activated'; })) {
73
+ widget.events.dispatch('widget:modal-opened', modal);
74
+ }
75
+ });
76
+ }
77
+ });
78
+ });
79
+ };
80
+ ViewOutlet.prototype.renderBadge = function (options) {
81
+ var triggerDOMElement = this.options.triggerDOMElement;
82
+ if (!triggerDOMElement) {
83
+ return;
84
+ }
85
+ if (!triggerDOMElement.getAttribute('role')) {
86
+ triggerDOMElement.setAttribute('role', 'button');
87
+ }
88
+ var name = this.container.get('$widget').name;
89
+ var label = options.label, symbol = options.symbol, ariaLabel = options.ariaLabel, closedTooltip = options.closedTooltip, openTooltip = options.openTooltip;
90
+ var triggerOptions = { closedTooltip: closedTooltip, openTooltip: openTooltip };
91
+ this.options.triggerOptions = triggerOptions;
92
+ var removeTriggerListeners = createTriggerElement(triggerDOMElement, {
93
+ label: label,
94
+ symbol: symbol,
95
+ ariaLabel: ariaLabel,
96
+ widgetName: name,
97
+ tooltip: closedTooltip,
98
+ });
99
+ this.unsubscribe.push(removeTriggerListeners);
100
+ };
101
+ ViewOutlet.prototype.dispose = function () {
102
+ var _this = this;
103
+ return import('./unmount').then(function (module) {
104
+ var _a, _b, _c, _d;
105
+ var _e = _this.options, triggerDOMElement = _e.triggerDOMElement, widgetDOMElement = _e.widgetDOMElement;
106
+ module.default(widgetDOMElement);
107
+ if (_this.options.cachedOriginals.widgetDOMElement) {
108
+ if (widgetDOMElement) {
109
+ (_a = widgetDOMElement.parentNode) === null || _a === void 0 ? void 0 : _a.replaceChild(_this.options.cachedOriginals.widgetDOMElement, widgetDOMElement);
110
+ }
111
+ }
112
+ if (_this.options.cachedOriginals.triggerDOMElement) {
113
+ if (triggerDOMElement) {
114
+ (_b = triggerDOMElement.parentNode) === null || _b === void 0 ? void 0 : _b.replaceChild(_this.options.cachedOriginals.triggerDOMElement, triggerDOMElement);
115
+ }
116
+ }
117
+ _this.unsubscribe.forEach(function (unsubscribe) {
118
+ unsubscribe();
119
+ });
120
+ (_c = widgetDOMElement.parentNode) === null || _c === void 0 ? void 0 : _c.removeChild(widgetDOMElement);
121
+ (_d = triggerDOMElement === null || triggerDOMElement === void 0 ? void 0 : triggerDOMElement.parentNode) === null || _d === void 0 ? void 0 : _d.removeChild(triggerDOMElement);
122
+ });
123
+ };
124
+ return ViewOutlet;
125
+ }());
126
+ export { ViewOutlet };
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ declare type Props = {
3
+ className?: string;
4
+ };
5
+ declare const View: React.FC<Props>;
6
+ export default View;
@@ -0,0 +1,70 @@
1
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
2
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
3
+ return cooked;
4
+ };
5
+ var __assign = (this && this.__assign) || function () {
6
+ __assign = Object.assign || function(t) {
7
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
8
+ s = arguments[i];
9
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
10
+ t[p] = s[p];
11
+ }
12
+ return t;
13
+ };
14
+ return __assign.apply(this, arguments);
15
+ };
16
+ var __rest = (this && this.__rest) || function (s, e) {
17
+ var t = {};
18
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
19
+ t[p] = s[p];
20
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
21
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
22
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
23
+ t[p[i]] = s[p[i]];
24
+ }
25
+ return t;
26
+ };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ import { Grid, useComponentNode, useContainer, useContext, useProperties, useScroll, } from '@telia-ace/widget-ui';
44
+ import { appendClassNames } from '@telia-ace/widget-utilities';
45
+ import React from 'react';
46
+ import styled from 'styled-components';
47
+ import Component from './component';
48
+ import Switch from './switch';
49
+ var StyledView = styled(Grid)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), function (p) { return !!p.scrollableCss && p.scrollableCss; });
50
+ var View = function (_a) {
51
+ var _b = _a.className, className = _b === void 0 ? '' : _b, other = __rest(_a, ["className"]);
52
+ var properties = useProperties();
53
+ var context = useContext();
54
+ var container = useContainer();
55
+ var node = useComponentNode();
56
+ var views = container.get('$settings').views;
57
+ var _c = context.gap, gap = _c === void 0 ? '0' : _c;
58
+ var _d = properties.columns, columns = _d === void 0 ? 1 : _d, _e = properties.animation, animation = _e === void 0 ? 'none' : _e, _f = properties.scrollable, scrollable = _f === void 0 ? false : _f, areaProperties = __rest(properties, ["columns", "animation", "scrollable"]);
59
+ var _g = __read(useScroll(scrollable), 2), scrollableCss = _g[0], elem = _g[1];
60
+ if (!node) {
61
+ return null;
62
+ }
63
+ return (React.createElement(StyledView, __assign({}, other, areaProperties, { scrollableCss: scrollableCss, ref: elem, columns: columns, gap: gap, className: appendClassNames(className, 'humany-view') }),
64
+ React.createElement(Switch, { views: views, render: function (name) {
65
+ var childNode = node.getChildren(name)[0];
66
+ return React.createElement(Component, { id: childNode.id, node: childNode, branch: "default" });
67
+ } })));
68
+ };
69
+ export default View;
70
+ var templateObject_1;
@@ -0,0 +1,7 @@
1
+ import { Container } from '@webprovisions/platform';
2
+ import React from 'react';
3
+ declare type Props = {
4
+ container: Container;
5
+ };
6
+ declare const Wrapper: React.SFC<Props>;
7
+ export default Wrapper;
@@ -0,0 +1,80 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ import { ContainerContext, RoutingContext, useComponentPlatform } from '@telia-ace/widget-ui';
18
+ import { appendClassNames } from '@telia-ace/widget-utilities';
19
+ import React, { useEffect, useState } from 'react';
20
+ import { Router } from 'react-router-dom';
21
+ import Component from './component';
22
+ import useRouter from './use-router';
23
+ var keyNavigationKeys = ['Tab', 'ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'];
24
+ var Wrapper = function (_a) {
25
+ var container = _a.container;
26
+ var components = useComponentPlatform(container);
27
+ var router = useRouter(container);
28
+ var env = container.get('$environment');
29
+ var _b = __read(useState((env === null || env === void 0 ? void 0 : env.container.get('isTabbing')) || false), 2), isTabbing = _b[0], setIsTabbing = _b[1];
30
+ var _c = __read(useState(null), 2), entry = _c[0], setEntry = _c[1];
31
+ useEffect(function () {
32
+ var keydown = function (event) {
33
+ if (keyNavigationKeys.indexOf(event.key) > -1) {
34
+ if (!isTabbing) {
35
+ env === null || env === void 0 ? void 0 : env.container.register('isTabbing', true);
36
+ }
37
+ setIsTabbing(true);
38
+ }
39
+ };
40
+ var click = function (event) {
41
+ if (event.screenX === 0 && event.screenY === 0) {
42
+ return;
43
+ }
44
+ if (isTabbing) {
45
+ env === null || env === void 0 ? void 0 : env.container.register('isTabbing', false);
46
+ }
47
+ setIsTabbing(false);
48
+ };
49
+ window.addEventListener('keydown', keydown);
50
+ window.addEventListener('click', click);
51
+ return function () {
52
+ window.removeEventListener('keydown', keydown);
53
+ window.removeEventListener('click', click);
54
+ };
55
+ }, []);
56
+ useEffect(function () {
57
+ if (components) {
58
+ setEntry(components.nodes.root.children.default[0].id || null);
59
+ var unsubscribe = components.events.subscribe('components:root-children-changed', function (event, _a) {
60
+ var node = _a.node;
61
+ if (node.parent && node.parent.type === 'root') {
62
+ var entry_1 = node.parent.children.default[0].id;
63
+ setEntry(entry_1);
64
+ }
65
+ });
66
+ return unsubscribe;
67
+ }
68
+ }, [components]);
69
+ if (!router || !router.history || !components) {
70
+ return null;
71
+ }
72
+ if (!entry) {
73
+ return null;
74
+ }
75
+ return (React.createElement(Router, { history: router.history },
76
+ React.createElement(ContainerContext.Provider, { value: container },
77
+ React.createElement(RoutingContext.Provider, { value: router },
78
+ React.createElement(Component, { className: appendClassNames([isTabbing, 'humany-is-tabbing']), isTabbing: isTabbing, id: entry, branch: "default" })))));
79
+ };
80
+ export default Wrapper;
@@ -0,0 +1,54 @@
1
+ import { WidgetRenderState, WidgetSettings } from '@telia-ace/widget-core';
2
+ import { BootstrappingActivationData } from '@webprovisions/bootstrapping';
3
+ import { Container, EventSubscriptionCancellation, WidgetType } from '@webprovisions/platform';
4
+ import { ViewOutlet } from '././ui/view-outlet';
5
+ export declare enum InitialRenderState {
6
+ Open = "open",
7
+ Closed = "closed",
8
+ Hidden = "hidden",
9
+ Storage = "storage"
10
+ }
11
+ export declare type RenderData = {
12
+ widgetDOMElement?: HTMLElement;
13
+ triggerDOMElement?: HTMLElement;
14
+ key?: string;
15
+ open?: boolean;
16
+ withRenderState?: InitialRenderState;
17
+ };
18
+ export declare type AttachData = {
19
+ widgetDOMElement?: HTMLElement;
20
+ triggerDOMElement?: HTMLElement;
21
+ key?: string;
22
+ withRenderState?: InitialRenderState;
23
+ };
24
+ export default class Widget extends WidgetType {
25
+ outlets: Map<string, ViewOutlet>;
26
+ activated: Promise<void> | undefined;
27
+ subs: EventSubscriptionCancellation[];
28
+ constructor(container: Container);
29
+ handleBootstrapping: (activationData: BootstrappingActivationData) => void;
30
+ initialize(): Promise<void>;
31
+ attach(attachData?: AttachData): any;
32
+ detach(key?: string): void;
33
+ private triggerStateIfApplicable;
34
+ private getOrCreateViewOutlet;
35
+ render(renderData?: RenderData): any;
36
+ activate(data?: any): void;
37
+ setSettings(fn: (settings: WidgetSettings) => Promise<Partial<WidgetSettings>>): Promise<WidgetSettings>;
38
+ clearSettings(): Promise<void>;
39
+ action({ action, value }: {
40
+ action: string;
41
+ value?: any;
42
+ }): Promise<void>;
43
+ renderState(): Promise<WidgetRenderState>;
44
+ hide(): Promise<void>;
45
+ open(): Promise<void>;
46
+ close(): Promise<void>;
47
+ show(): Promise<void>;
48
+ private onAction;
49
+ private setRenderState;
50
+ private onOpen;
51
+ private onClose;
52
+ private setTriggerState;
53
+ deactivate(): Promise<void[]>;
54
+ }