solid-ui 2.4.23 → 2.4.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +2159 -5039
- package/dist/main.js.map +1 -1
- package/lib/acl/access-controller.js +4 -67
- package/lib/acl/access-controller.js.map +1 -1
- package/lib/acl/access-groups.js +59 -137
- package/lib/acl/access-groups.js.map +1 -1
- package/lib/acl/acl-control.js +14 -54
- package/lib/acl/acl-control.js.map +1 -1
- package/lib/acl/acl.js +32 -107
- package/lib/acl/acl.js.map +1 -1
- package/lib/acl/add-agent-buttons.js +0 -92
- package/lib/acl/add-agent-buttons.js.map +1 -1
- package/lib/acl/index.js +1 -3
- package/lib/acl/index.js.map +1 -1
- package/lib/acl/styles.js +1 -2
- package/lib/acl/styles.js.map +1 -1
- package/lib/chat/bookmarks.js +8 -80
- package/lib/chat/bookmarks.js.map +1 -1
- package/lib/chat/chatLogic.js +109 -180
- package/lib/chat/chatLogic.js.map +1 -1
- package/lib/chat/dateFolder.js +6 -91
- package/lib/chat/dateFolder.js.map +1 -1
- package/lib/chat/infinite.js +33 -185
- package/lib/chat/infinite.js.map +1 -1
- package/lib/chat/message.js +37 -150
- package/lib/chat/message.js.map +1 -1
- package/lib/chat/messageTools.js +23 -96
- package/lib/chat/messageTools.js.map +1 -1
- package/lib/chat/thread.js +33 -91
- package/lib/chat/thread.js.map +1 -1
- package/lib/create/create.js +19 -51
- package/lib/create/create.js.map +1 -1
- package/lib/create/index.js +0 -2
- package/lib/create/index.js.map +1 -1
- package/lib/debug.js +0 -8
- package/lib/debug.js.map +1 -1
- package/lib/folders.js +4 -27
- package/lib/folders.js.map +1 -1
- package/lib/footer/index.js +2 -24
- package/lib/footer/index.js.map +1 -1
- package/lib/footer/styleMap.js.map +1 -1
- package/lib/header/empty-profile.js.map +1 -1
- package/lib/header/index.js +3 -72
- package/lib/header/index.js.map +1 -1
- package/lib/header/styleMap.js +4 -3
- package/lib/header/styleMap.js.map +1 -1
- package/lib/iconBase.js +3 -4
- package/lib/iconBase.js.map +1 -1
- package/lib/index.js +5 -46
- package/lib/index.js.map +1 -1
- package/lib/jss/index.js +3 -9
- package/lib/jss/index.js.map +1 -1
- package/lib/log.js +15 -51
- package/lib/log.js.map +1 -1
- package/lib/login/login.js +74 -303
- package/lib/login/login.js.map +1 -1
- package/lib/matrix/index.js +0 -2
- package/lib/matrix/index.js.map +1 -1
- package/lib/matrix/matrix.js +7 -55
- package/lib/matrix/matrix.js.map +1 -1
- package/lib/media/index.js +0 -2
- package/lib/media/index.js.map +1 -1
- package/lib/media/media-capture.js +13 -33
- package/lib/media/media-capture.js.map +1 -1
- package/lib/messageArea.js +23 -64
- package/lib/messageArea.js.map +1 -1
- package/lib/noun_Camera_1618446_000000.js.map +1 -1
- package/lib/ns.js +5 -7
- package/lib/ns.js.map +1 -1
- package/lib/pad.js +48 -234
- package/lib/pad.js.map +1 -1
- package/lib/participation.js +10 -65
- package/lib/participation.js.map +1 -1
- package/lib/preferences.js +21 -42
- package/lib/preferences.js.map +1 -1
- package/lib/signup/config-default.js +1 -8
- package/lib/signup/config-default.js.map +1 -1
- package/lib/signup/signup.js +6 -13
- package/lib/signup/signup.js.map +1 -1
- package/lib/stories/decorators.js +0 -2
- package/lib/stories/decorators.js.map +1 -1
- package/lib/style.js +8 -5
- package/lib/style.js.map +1 -1
- package/lib/style_multiSelect.js +1 -5
- package/lib/style_multiSelect.js.map +1 -1
- package/lib/table.js +309 -322
- package/lib/table.js.map +1 -1
- package/lib/tabs.js +20 -100
- package/lib/tabs.js.map +1 -1
- package/lib/utils/headerFooterHelpers.js +4 -52
- package/lib/utils/headerFooterHelpers.js.map +1 -1
- package/lib/utils/index.js +41 -135
- package/lib/utils/index.js.map +1 -1
- package/lib/utils/label.js +13 -34
- package/lib/utils/label.js.map +1 -1
- package/lib/versionInfo.js +4 -4
- package/lib/versionInfo.js.map +1 -1
- package/lib/widgets/buttons/iconLinks.js +0 -8
- package/lib/widgets/buttons/iconLinks.js.map +1 -1
- package/lib/widgets/buttons.js +115 -291
- package/lib/widgets/buttons.js.map +1 -1
- package/lib/widgets/dragAndDrop.js +12 -41
- package/lib/widgets/dragAndDrop.js.map +1 -1
- package/lib/widgets/error.js +3 -9
- package/lib/widgets/error.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
- package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
- package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
- package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
- package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
- package/lib/widgets/forms/autocomplete/language.js +6 -55
- package/lib/widgets/forms/autocomplete/language.js.map +1 -1
- package/lib/widgets/forms/autocomplete/publicData.js +12 -131
- package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
- package/lib/widgets/forms/basic.js +12 -55
- package/lib/widgets/forms/basic.js.map +1 -1
- package/lib/widgets/forms/comment.js +1 -15
- package/lib/widgets/forms/comment.js.map +1 -1
- package/lib/widgets/forms/fieldFunction.js +3 -16
- package/lib/widgets/forms/fieldFunction.js.map +1 -1
- package/lib/widgets/forms/fieldParams.js +0 -12
- package/lib/widgets/forms/fieldParams.js.map +1 -1
- package/lib/widgets/forms/formStyle.js +1 -14
- package/lib/widgets/forms/formStyle.js.map +1 -1
- package/lib/widgets/forms.js +70 -474
- package/lib/widgets/forms.js.map +1 -1
- package/lib/widgets/index.js +0 -21
- package/lib/widgets/index.js.map +1 -1
- package/lib/widgets/multiSelect.js +48 -171
- package/lib/widgets/multiSelect.js.map +1 -1
- package/lib/widgets/peoplePicker.js +20 -90
- package/lib/widgets/peoplePicker.js.map +1 -1
- package/lib/widgets/widgetHelpers.js +2 -9
- package/lib/widgets/widgetHelpers.js.map +1 -1
- package/package.json +28 -28
package/lib/tabs.js
CHANGED
|
@@ -1,116 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.TabWidgetElement = void 0;
|
|
9
8
|
exports.tabWidget = tabWidget;
|
|
10
|
-
|
|
11
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
-
|
|
13
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
14
|
-
|
|
15
11
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
16
|
-
|
|
17
12
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
18
|
-
|
|
19
13
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
20
|
-
|
|
21
14
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
22
|
-
|
|
23
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
24
|
-
|
|
25
16
|
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
26
|
-
|
|
27
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
28
|
-
|
|
29
18
|
var _widgets = require("./widgets");
|
|
30
|
-
|
|
31
19
|
var _utils = require("./utils");
|
|
32
|
-
|
|
33
20
|
var _solidLogic = require("solid-logic");
|
|
34
|
-
|
|
35
21
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
36
|
-
|
|
37
22
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
38
|
-
|
|
39
23
|
/**
|
|
40
24
|
* @ignore
|
|
41
25
|
*/
|
|
42
26
|
var ContainerElement = /*#__PURE__*/function (_HTMLElement) {
|
|
43
27
|
(0, _inherits2["default"])(ContainerElement, _HTMLElement);
|
|
44
|
-
|
|
45
28
|
var _super = _createSuper(ContainerElement);
|
|
46
|
-
|
|
47
29
|
function ContainerElement() {
|
|
48
30
|
var _this;
|
|
49
|
-
|
|
50
31
|
(0, _classCallCheck2["default"])(this, ContainerElement);
|
|
51
|
-
|
|
52
32
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
53
33
|
args[_key] = arguments[_key];
|
|
54
34
|
}
|
|
55
|
-
|
|
56
35
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
57
36
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "asSettings", void 0);
|
|
58
37
|
return _this;
|
|
59
38
|
}
|
|
60
|
-
|
|
61
39
|
return (0, _createClass2["default"])(ContainerElement);
|
|
62
40
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
63
|
-
|
|
64
41
|
var TabWidgetElement = /*#__PURE__*/function (_HTMLElement2) {
|
|
65
42
|
(0, _inherits2["default"])(TabWidgetElement, _HTMLElement2);
|
|
66
|
-
|
|
67
43
|
var _super2 = _createSuper(TabWidgetElement);
|
|
68
|
-
|
|
69
44
|
function TabWidgetElement() {
|
|
70
45
|
var _this2;
|
|
71
|
-
|
|
72
46
|
(0, _classCallCheck2["default"])(this, TabWidgetElement);
|
|
73
|
-
|
|
74
47
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
75
48
|
args[_key2] = arguments[_key2];
|
|
76
49
|
}
|
|
77
|
-
|
|
78
50
|
_this2 = _super2.call.apply(_super2, [this].concat(args));
|
|
79
51
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "bodyContainer", void 0);
|
|
80
52
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "refresh", void 0);
|
|
81
53
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this2), "tabContainer", void 0);
|
|
82
54
|
return _this2;
|
|
83
55
|
}
|
|
84
|
-
|
|
85
56
|
return (0, _createClass2["default"])(TabWidgetElement);
|
|
86
57
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
87
58
|
/**
|
|
88
59
|
* @ignore
|
|
89
60
|
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
61
|
exports.TabWidgetElement = TabWidgetElement;
|
|
93
|
-
|
|
94
62
|
var TabElement = /*#__PURE__*/function (_HTMLElement3) {
|
|
95
63
|
(0, _inherits2["default"])(TabElement, _HTMLElement3);
|
|
96
|
-
|
|
97
64
|
var _super3 = _createSuper(TabElement);
|
|
98
|
-
|
|
99
65
|
function TabElement() {
|
|
100
66
|
var _this3;
|
|
101
|
-
|
|
102
67
|
(0, _classCallCheck2["default"])(this, TabElement);
|
|
103
|
-
|
|
104
68
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
105
69
|
args[_key3] = arguments[_key3];
|
|
106
70
|
}
|
|
107
|
-
|
|
108
71
|
_this3 = _super3.call.apply(_super3, [this].concat(args));
|
|
109
72
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "bodyTR", void 0);
|
|
110
73
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "subject", void 0);
|
|
111
74
|
return _this3;
|
|
112
75
|
}
|
|
113
|
-
|
|
114
76
|
return (0, _createClass2["default"])(TabElement);
|
|
115
77
|
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
116
78
|
/**
|
|
@@ -238,8 +200,6 @@ var TabElement = /*#__PURE__*/function (_HTMLElement3) {
|
|
|
238
200
|
*
|
|
239
201
|
* @param options
|
|
240
202
|
*/
|
|
241
|
-
|
|
242
|
-
|
|
243
203
|
function tabWidget(options) {
|
|
244
204
|
var subject = options.subject;
|
|
245
205
|
var dom = options.dom || document;
|
|
@@ -248,12 +208,10 @@ function tabWidget(options) {
|
|
|
248
208
|
var flipped = orientation & 2;
|
|
249
209
|
var vertical = orientation & 1;
|
|
250
210
|
var onClose = options.onClose;
|
|
251
|
-
|
|
252
211
|
var _getColors = getColors(backgroundColor),
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
212
|
+
_getColors2 = (0, _slicedToArray2["default"])(_getColors, 2),
|
|
213
|
+
selectedColor = _getColors2[0],
|
|
214
|
+
color = _getColors2[1];
|
|
257
215
|
var bodyMainStyle = "flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ".concat(selectedColor, "; padding: 1em;");
|
|
258
216
|
var rootElement = dom.createElement('div'); // 20200117a
|
|
259
217
|
|
|
@@ -262,7 +220,6 @@ function tabWidget(options) {
|
|
|
262
220
|
navElement.setAttribute('style', 'margin: 0;');
|
|
263
221
|
var mainElement = rootElement.appendChild(dom.createElement('main'));
|
|
264
222
|
mainElement.setAttribute('style', 'margin: 0; width:100%; height: 100%;'); // override tabbedtab.css
|
|
265
|
-
|
|
266
223
|
var tabContainer = navElement.appendChild(dom.createElement('ul'));
|
|
267
224
|
tabContainer.setAttribute('style', "\n list-style-type: none;\n display: flex;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-direction: ".concat(vertical ? 'column' : 'row', "\n "));
|
|
268
225
|
var tabElement = 'li';
|
|
@@ -270,11 +227,9 @@ function tabWidget(options) {
|
|
|
270
227
|
rootElement.tabContainer = tabContainer;
|
|
271
228
|
rootElement.bodyContainer = bodyContainer;
|
|
272
229
|
var corners = ['0.2em', '0.2em', '0', '0']; // top left, TR, BR, BL
|
|
273
|
-
|
|
274
230
|
var cornersPrepped = corners.concat(corners).slice(orientation, orientation + 4);
|
|
275
231
|
var cornersStyle = "border-radius: ".concat(cornersPrepped.join(' '), ";");
|
|
276
232
|
var margins = ['0.3em', '0.3em', '0', '0.3em']; // top, right, bottom, left
|
|
277
|
-
|
|
278
233
|
var marginsPrepped = margins.concat(margins).slice(orientation, orientation + 4);
|
|
279
234
|
var marginsStyle = "margin: ".concat(marginsPrepped.join(' '), ";");
|
|
280
235
|
var paddingStyle = "padding: ".concat(marginsPrepped.join(' '), ";");
|
|
@@ -285,7 +240,6 @@ function tabWidget(options) {
|
|
|
285
240
|
var hiddenStyle = shownStyle + 'display: none;';
|
|
286
241
|
rootElement.refresh = orderedSync;
|
|
287
242
|
orderedSync();
|
|
288
|
-
|
|
289
243
|
if (!options.startEmpty && tabContainer.children.length && options.selectedTab) {
|
|
290
244
|
var selectedTab0 = Array.from(tabContainer.children) // Version left for compatability with ??
|
|
291
245
|
.map(function (tab) {
|
|
@@ -294,22 +248,24 @@ function tabWidget(options) {
|
|
|
294
248
|
return tab.dataset.name === options.selectedTab;
|
|
295
249
|
});
|
|
296
250
|
var selectedTabURI = options.selectedTab.uri;
|
|
297
|
-
var selectedTab1 = Array.from(tabContainer.children)
|
|
251
|
+
var selectedTab1 = Array.from(tabContainer.children)
|
|
252
|
+
// @ts-ignore
|
|
298
253
|
.find(function (tab) {
|
|
299
|
-
return tab.subject &&
|
|
300
|
-
|
|
254
|
+
return tab.subject &&
|
|
255
|
+
// @ts-ignore
|
|
256
|
+
tab.subject.uri &&
|
|
257
|
+
// @ts-ignore
|
|
301
258
|
tab.subject.uri === selectedTabURI;
|
|
302
259
|
});
|
|
303
260
|
var tab = selectedTab1 || selectedTab0 || tabContainer.children[0];
|
|
304
|
-
var clickMe = tab.firstChild;
|
|
305
|
-
|
|
261
|
+
var clickMe = tab.firstChild;
|
|
262
|
+
// @ts-ignore
|
|
306
263
|
if (clickMe) clickMe.click();
|
|
307
264
|
} else if (!options.startEmpty) {
|
|
308
265
|
tabContainer.children[0].firstChild.click(); // Open first tab
|
|
309
266
|
}
|
|
310
267
|
|
|
311
268
|
return rootElement;
|
|
312
|
-
|
|
313
269
|
function addCancelButton(tabContainer) {
|
|
314
270
|
if (tabContainer.dataset.onCloseSet) {
|
|
315
271
|
// @@ TODO: this is only here to make the browser tests work
|
|
@@ -317,7 +273,6 @@ function tabWidget(options) {
|
|
|
317
273
|
var existingCancelButton = tabContainer.querySelector('.unstyled');
|
|
318
274
|
tabContainer.removeChild(existingCancelButton);
|
|
319
275
|
}
|
|
320
|
-
|
|
321
276
|
var extraTab = dom.createElement(tabElement);
|
|
322
277
|
extraTab.classList.add('unstyled');
|
|
323
278
|
var tabCancelButton = (0, _widgets.cancelButton)(dom, onClose);
|
|
@@ -326,10 +281,8 @@ function tabWidget(options) {
|
|
|
326
281
|
tabContainer.appendChild(extraTab);
|
|
327
282
|
tabContainer.dataset.onCloseSet = 'true';
|
|
328
283
|
}
|
|
329
|
-
|
|
330
284
|
function getItems() {
|
|
331
285
|
if (options.items) return options.items;
|
|
332
|
-
|
|
333
286
|
if (options.ordered !== false) {
|
|
334
287
|
// options.ordered defaults to true
|
|
335
288
|
return _solidLogic.store.the(subject, options.predicate).elements;
|
|
@@ -337,14 +290,12 @@ function tabWidget(options) {
|
|
|
337
290
|
return _solidLogic.store.each(subject, options.predicate);
|
|
338
291
|
}
|
|
339
292
|
}
|
|
340
|
-
|
|
341
293
|
function makeNewSlot(item) {
|
|
342
294
|
var ele = dom.createElement(tabElement);
|
|
343
295
|
ele.setAttribute('style', unselectedStyle);
|
|
344
296
|
ele.subject = item;
|
|
345
297
|
var div = ele.appendChild(dom.createElement('button'));
|
|
346
298
|
div.setAttribute('style', 'background: none; border: none; font: inherit; cursor: pointer');
|
|
347
|
-
|
|
348
299
|
div.onclick = function () {
|
|
349
300
|
resetTabStyle();
|
|
350
301
|
resetBodyStyle();
|
|
@@ -352,19 +303,16 @@ function tabWidget(options) {
|
|
|
352
303
|
if (!ele.bodyTR) return;
|
|
353
304
|
ele.bodyTR.setAttribute('style', shownStyle);
|
|
354
305
|
var bodyMain = getOrCreateContainerElement(ele);
|
|
355
|
-
|
|
356
306
|
if (options.renderMain && ele.subject && bodyMain.asSettings !== false) {
|
|
357
307
|
bodyMain.innerHTML = 'loading item ...' + item;
|
|
358
308
|
options.renderMain(bodyMain, ele.subject);
|
|
359
309
|
bodyMain.asSettings = false;
|
|
360
310
|
}
|
|
361
311
|
};
|
|
362
|
-
|
|
363
312
|
if (options.renderTabSettings && ele.subject) {
|
|
364
313
|
var ellipsis = dom.createElement('button');
|
|
365
314
|
ellipsis.textContent = '...';
|
|
366
315
|
ellipsis.setAttribute('style', 'position: absolute; right: 0; bottom: 0; width: 20%; background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit;');
|
|
367
|
-
|
|
368
316
|
ellipsis.onclick = function () {
|
|
369
317
|
resetTabStyle();
|
|
370
318
|
resetBodyStyle();
|
|
@@ -372,51 +320,43 @@ function tabWidget(options) {
|
|
|
372
320
|
if (!ele.bodyTR) return;
|
|
373
321
|
ele.bodyTR.setAttribute('style', shownStyle);
|
|
374
322
|
var bodyMain = getOrCreateContainerElement(ele);
|
|
375
|
-
|
|
376
323
|
if (options.renderTabSettings && ele.subject && bodyMain.asSettings !== true) {
|
|
377
324
|
bodyMain.innerHTML = 'loading settings ...' + item;
|
|
378
325
|
options.renderTabSettings(bodyMain, ele.subject);
|
|
379
326
|
bodyMain.asSettings = true;
|
|
380
327
|
}
|
|
381
328
|
};
|
|
382
|
-
|
|
383
329
|
ele.appendChild(ellipsis);
|
|
384
330
|
}
|
|
385
|
-
|
|
386
331
|
if (options.renderTab) {
|
|
387
332
|
options.renderTab(div, item);
|
|
388
333
|
} else {
|
|
389
334
|
div.innerHTML = (0, _utils.label)(item);
|
|
390
335
|
}
|
|
391
|
-
|
|
392
336
|
return ele;
|
|
393
|
-
|
|
394
337
|
function getOrCreateContainerElement(ele) {
|
|
395
338
|
var _ele$bodyTR;
|
|
396
|
-
|
|
397
339
|
var bodyMain = (_ele$bodyTR = ele.bodyTR) === null || _ele$bodyTR === void 0 ? void 0 : _ele$bodyTR.children[0];
|
|
398
340
|
if (bodyMain) return bodyMain;
|
|
399
341
|
var newBodyMain = ele.bodyTR.appendChild(dom.createElement('main'));
|
|
400
342
|
newBodyMain.setAttribute('style', bodyMainStyle);
|
|
401
343
|
return newBodyMain;
|
|
402
344
|
}
|
|
403
|
-
}
|
|
404
|
-
|
|
345
|
+
}
|
|
405
346
|
|
|
347
|
+
// @@ Use common one from utils?
|
|
406
348
|
function orderedSync() {
|
|
407
349
|
var items = getItems();
|
|
408
350
|
var slot, i, j, left, right;
|
|
409
|
-
var differ = false;
|
|
410
|
-
|
|
351
|
+
var differ = false;
|
|
352
|
+
// Find how many match at each end
|
|
411
353
|
for (left = 0; left < tabContainer.children.length; left++) {
|
|
412
354
|
slot = tabContainer.children[left];
|
|
413
|
-
|
|
414
355
|
if (left >= items.length || slot.subject && !slot.subject.sameTerm(items[left])) {
|
|
415
356
|
differ = true;
|
|
416
357
|
break;
|
|
417
358
|
}
|
|
418
359
|
}
|
|
419
|
-
|
|
420
360
|
if (!differ && items.length === tabContainer.children.length) {
|
|
421
361
|
return; // The two just match in order: a case to optimize for
|
|
422
362
|
}
|
|
@@ -424,27 +364,22 @@ function tabWidget(options) {
|
|
|
424
364
|
for (right = tabContainer.children.length - 1; right >= 0; right--) {
|
|
425
365
|
slot = tabContainer.children[right];
|
|
426
366
|
j = right - tabContainer.children.length + items.length;
|
|
427
|
-
|
|
428
367
|
if (slot.subject && !slot.subject.sameTerm(items[j])) {
|
|
429
368
|
break;
|
|
430
369
|
}
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
|
|
370
|
+
}
|
|
371
|
+
// The elements left ... right in tabContainer.children do not match
|
|
434
372
|
var insertables = items.slice(left, right - tabContainer.children.length + items.length + 1);
|
|
435
|
-
|
|
436
373
|
while (right >= left) {
|
|
437
374
|
// remove extra
|
|
438
375
|
tabContainer.removeChild(tabContainer.children[left]);
|
|
439
376
|
bodyContainer.removeChild(bodyContainer.children[left]);
|
|
440
377
|
right -= 1;
|
|
441
378
|
}
|
|
442
|
-
|
|
443
379
|
for (i = 0; i < insertables.length; i++) {
|
|
444
380
|
var newSlot = makeNewSlot(insertables[i]);
|
|
445
381
|
var newBodyDiv = dom.createElement('div');
|
|
446
382
|
newSlot.bodyTR = newBodyDiv;
|
|
447
|
-
|
|
448
383
|
if (left === tabContainer.children.length) {
|
|
449
384
|
// None left of original on right
|
|
450
385
|
tabContainer.appendChild(newSlot);
|
|
@@ -454,16 +389,13 @@ function tabWidget(options) {
|
|
|
454
389
|
bodyContainer.insertBefore(newBodyDiv, bodyContainer.children[left + i]);
|
|
455
390
|
}
|
|
456
391
|
}
|
|
457
|
-
|
|
458
392
|
if (onClose) {
|
|
459
393
|
addCancelButton(tabContainer);
|
|
460
394
|
}
|
|
461
395
|
}
|
|
462
|
-
|
|
463
396
|
function resetTabStyle() {
|
|
464
397
|
for (var i = 0; i < tabContainer.children.length; i++) {
|
|
465
398
|
var _tab = tabContainer.children[i];
|
|
466
|
-
|
|
467
399
|
if (_tab.classList.contains('unstyled')) {
|
|
468
400
|
continue;
|
|
469
401
|
} else {
|
|
@@ -471,59 +403,47 @@ function tabWidget(options) {
|
|
|
471
403
|
}
|
|
472
404
|
}
|
|
473
405
|
}
|
|
474
|
-
|
|
475
406
|
function resetBodyStyle() {
|
|
476
407
|
for (var i = 0; i < bodyContainer.children.length; i++) {
|
|
477
408
|
bodyContainer.children[i].setAttribute('style', hiddenStyle);
|
|
478
409
|
}
|
|
479
410
|
}
|
|
480
411
|
}
|
|
412
|
+
|
|
481
413
|
/**
|
|
482
414
|
* @internal
|
|
483
415
|
*/
|
|
484
|
-
|
|
485
|
-
|
|
486
416
|
function getColors(backgroundColor) {
|
|
487
417
|
return isLight(backgroundColor) ? [colorBlend(backgroundColor, '#ffffff', 0.3), '#000000'] : [colorBlend(backgroundColor, '#000000', 0.3), '#ffffff'];
|
|
488
418
|
}
|
|
419
|
+
|
|
489
420
|
/**
|
|
490
421
|
* @internal
|
|
491
422
|
*/
|
|
492
|
-
|
|
493
|
-
|
|
494
423
|
function colorBlend(a, b, mix) {
|
|
495
424
|
var ca, cb, res;
|
|
496
425
|
var str = '#';
|
|
497
426
|
var hex = '0123456789abcdef';
|
|
498
|
-
|
|
499
427
|
for (var i = 0; i < 3; i++) {
|
|
500
428
|
ca = parseInt(a.slice(i * 2 + 1, i * 2 + 3), 16);
|
|
501
429
|
cb = parseInt(b.slice(i * 2 + 1, i * 2 + 3), 16);
|
|
502
430
|
res = ca * (1.0 - mix) + cb * mix; // @@@ rounding
|
|
503
|
-
|
|
504
431
|
var res2 = parseInt(('' + res).split('.')[0]); // @@ ugh
|
|
505
|
-
|
|
506
432
|
var h = parseInt(('' + res2 / 16).split('.')[0]); // @@ ugh
|
|
507
|
-
|
|
508
433
|
var l = parseInt(('' + res2 % 16).split('.')[0]); // @@ ugh
|
|
509
|
-
|
|
510
434
|
str += hex[h] + hex[l];
|
|
511
435
|
}
|
|
512
|
-
|
|
513
436
|
return str;
|
|
514
437
|
}
|
|
438
|
+
|
|
515
439
|
/**
|
|
516
440
|
* @internal
|
|
517
441
|
*/
|
|
518
|
-
|
|
519
|
-
|
|
520
442
|
function isLight(x) {
|
|
521
443
|
var total = 0;
|
|
522
|
-
|
|
523
444
|
for (var i = 0; i < 3; i++) {
|
|
524
445
|
total += parseInt(x.slice(i * 2 + 1, i * 2 + 3), 16);
|
|
525
446
|
}
|
|
526
|
-
|
|
527
447
|
return total > 128 * 3;
|
|
528
448
|
}
|
|
529
449
|
//# sourceMappingURL=tabs.js.map
|
package/lib/tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabs.js","names":["ContainerElement","HTMLElement","TabWidgetElement","TabElement","tabWidget","options","subject","dom","document","orientation","parseInt","backgroundColor","flipped","vertical","onClose","getColors","selectedColor","color","bodyMainStyle","rootElement","createElement","setAttribute","navElement","appendChild","mainElement","tabContainer","tabElement","bodyContainer","corners","cornersPrepped","concat","slice","cornersStyle","join","margins","marginsPrepped","marginsStyle","paddingStyle","tabStyle","unselectedStyle","selectedStyle","shownStyle","hiddenStyle","refresh","orderedSync","startEmpty","children","length","selectedTab","selectedTab0","Array","from","map","tab","firstChild","find","dataset","name","selectedTabURI","uri","selectedTab1","clickMe","click","addCancelButton","onCloseSet","existingCancelButton","querySelector","removeChild","extraTab","classList","add","tabCancelButton","cancelButton","getAttribute","getItems","items","ordered","store","the","predicate","elements","each","makeNewSlot","item","ele","div","onclick","resetTabStyle","resetBodyStyle","bodyTR","bodyMain","getOrCreateContainerElement","renderMain","asSettings","innerHTML","renderTabSettings","ellipsis","textContent","renderTab","label","newBodyMain","slot","i","j","left","right","differ","sameTerm","insertables","newSlot","newBodyDiv","insertBefore","contains","isLight","colorBlend","a","b","mix","ca","cb","res","str","hex","res2","split","h","l","x","total"],"sources":["../src/tabs.ts"],"sourcesContent":["import { cancelButton } from './widgets'\nimport { label } from './utils'\nimport { NamedNode } from 'rdflib'\nimport { store } from 'solid-logic'\n\n/**\n * @ignore\n */\nclass ContainerElement extends HTMLElement {\n asSettings?: boolean\n}\n\ntype TabWidgetOptions = {\n backgroundColor?: string;\n dom?: HTMLDocument;\n items?: Array<NamedNode>;\n onClose?: (event: Event) => void;\n ordered?: boolean;\n orientation?: '0' | '1' | '2' | '3';\n predicate?: NamedNode;\n renderMain?: (bodyMain: HTMLElement, subject: NamedNode) => void;\n renderTab?: (tabDiv: HTMLButtonElement, subject: NamedNode) => void;\n renderTabSettings?: (bodyMain: ContainerElement, subject: NamedNode) => void;\n selectedTab?: NamedNode;\n startEmpty?: boolean;\n subject?: NamedNode;\n};\n\nexport class TabWidgetElement extends HTMLElement {\n bodyContainer?: HTMLElement\n refresh?: () => void\n tabContainer?: HTMLElement\n}\n\n/**\n * @ignore\n */\nclass TabElement extends HTMLElement {\n bodyTR?: HTMLElement\n subject?: NamedNode\n}\n\n/**\n * Use this widget to generate tabs from triples set in the global store.\n *\n * [Here you can see examples of the tabs](https://solidos.github.io/solid-ui/examples/tabs/).\n *\n * It assumes that items to use for tabs will be in a collection by default,\n * e.g.:\n *\n * ```turtle\n * :subject :predicate ( :item1 :item2 ) .\n * ```\n *\n * You can override this by setting `ordered: false`, in which case it expects\n * unordered triples:\n *\n * ```turtle\n * :subject :predicate :item1, :item 2 .\n * ```\n *\n * Triples that are not ordered in collection are in principle not sorted,\n * which means that tabs could change order every time you render the widget.\n * But in this case the widget will try to sort it in order to keep it\n * consistent.\n *\n * In both of these cases you need to define options `subject` and `predicate`\n * to tell the widget which triples it should be looking for.\n *\n * Finally you can set items manually, using the `items` option, e.g.:\n *\n * ```javascript\n * {\n * items: [\n * namedNode('https://domain.tld/#item1'),\n * namedNode('https://domain.tld/#item2')\n * ]\n * }\n * ```\n *\n * When you set items manually you do not need to set `subject` and\n * `predicate`.\n *\n * In any case you probably want to set the renderMain option to specify\n * what should be rendered for the various items, e.g.:\n *\n * ```javascript\n * {\n * renderMain: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderItem(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderItem` is a custom function that you need to define yourself.\n *\n * The option `renderTabSettings` allows you to render a custom view in the\n * body container that is shown when you hold the ALT key and click on a\n * tab. It works very much like the `renderMain` option:\n *\n * ```javascript\n * {\n * renderTabSettings: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderTabSettings(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabSettings` is a custom function that you need to define\n * yourself.\n *\n * By default the widget will try to guess the label by using the\n * [[utils.label]] function. If you want to customize this yourself, you can\n * use the `renderTab` option:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.innerText = renderTabText(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabText` is a custom function you need to define yourself.\n *\n * The option renderTab is also important if you want to set which tab should\n * be selected once the widget is rendered. By default it will simply select\n * the first tab, but you can override by setting `dataset.name` on the tab\n * and referring to the same string in `selectedTab`:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.dataset.name = subject.uri\n * },\n * selectedTab: item2.uri\n * }\n * ```\n *\n * You can apply a color to use for tabs and border of the container by using\n * option `background-color`. This is #ddddcc by default.\n *\n * You can override the document object that the widget uses to generate DOM\n * elements by setting the option `dom`. This is encouraged to set if you\n * intend your functionality to be used in environments that don't provide\n * a global `document` object.\n *\n * If you want to render a close button next to the tabs you can set option\n * `onClose` which takes a callback function that is triggered when the\n * button is clicked:\n *\n * ```javascript\n * {\n * onClose: (event) => {\n * // do something that hides the widget altogether\n * }\n * }\n * ```\n *\n * The option `orientation` allows you to set which side the tabs should be\n * located: `'0'` = Top, `'1'` = Left, `'2'` = Bottom, `'3'` = Right\n *\n * If you don't want to render anything in the body container by default,\n * you can set the option `startEmpty` to `true`.\n *\n * @param options\n */\nexport function tabWidget (options: TabWidgetOptions) {\n const subject = options.subject\n const dom = options.dom || document\n const orientation = parseInt(options.orientation || '0')\n const backgroundColor = options.backgroundColor || '#ddddcc'\n const flipped = orientation & 2\n const vertical = orientation & 1\n const onClose = options.onClose\n\n const [selectedColor, color] = getColors(backgroundColor)\n const bodyMainStyle = `flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ${selectedColor}; padding: 1em;`\n const rootElement: TabWidgetElement = dom.createElement('div') // 20200117a\n\n rootElement.setAttribute(\n 'style',\n 'display: flex; height: 100%; width: 100%; flex-direction: ' +\n (vertical ? 'row' : 'column') +\n (flipped ? '-reverse;' : ';')\n )\n\n const navElement = rootElement.appendChild(dom.createElement('nav'))\n navElement.setAttribute('style', 'margin: 0;')\n\n const mainElement = rootElement.appendChild(dom.createElement('main'))\n\n mainElement.setAttribute('style', 'margin: 0; width:100%; height: 100%;') // override tabbedtab.css\n const tabContainer = navElement.appendChild(dom.createElement('ul'))\n tabContainer.setAttribute(\n 'style',\n `\n list-style-type: none;\n display: flex;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-direction: ${vertical ? 'column' : 'row'}\n `\n )\n\n const tabElement = 'li'\n\n const bodyContainer = mainElement\n rootElement.tabContainer = tabContainer\n rootElement.bodyContainer = bodyContainer\n\n const corners = ['0.2em', '0.2em', '0', '0'] // top left, TR, BR, BL\n const cornersPrepped = corners.concat(corners).slice(orientation, orientation + 4)\n const cornersStyle = `border-radius: ${cornersPrepped.join(' ')};`\n\n const margins = ['0.3em', '0.3em', '0', '0.3em'] // top, right, bottom, left\n const marginsPrepped = margins.concat(margins).slice(orientation, orientation + 4)\n const marginsStyle = `margin: ${marginsPrepped.join(' ')};`\n\n const paddingStyle = `padding: ${marginsPrepped.join(' ')};`\n\n const tabStyle = cornersStyle + `position: relative; padding: 0.7em; max-width: 20em; color: ${color};`\n const unselectedStyle = `${\n tabStyle + marginsStyle\n } opacity: 50%; background-color: ${backgroundColor};`\n const selectedStyle = `${tabStyle + marginsStyle} background-color: ${selectedColor};`\n const shownStyle = 'height: 100%; width: 100%;'\n const hiddenStyle = shownStyle + 'display: none;'\n rootElement.refresh = orderedSync\n orderedSync()\n\n if (!options.startEmpty && tabContainer.children.length && options.selectedTab) {\n const selectedTab0 = Array.from(tabContainer.children) // Version left for compatability with ??\n .map((tab) => tab.firstChild as HTMLElement)\n .find((tab) => tab.dataset.name === options.selectedTab)\n\n const selectedTabURI = options.selectedTab.uri\n const selectedTab1 = Array.from(tabContainer.children)\n // @ts-ignore\n .find(\n (tab) =>\n (tab as TabElement).subject &&\n // @ts-ignore\n (tab as TabElement).subject.uri &&\n // @ts-ignore\n (tab as TabElement).subject.uri === selectedTabURI\n )\n\n const tab = selectedTab1 || selectedTab0 || (tabContainer.children[0] as HTMLButtonElement)\n const clickMe = tab.firstChild\n // @ts-ignore\n if (clickMe) clickMe.click()\n } else if (!options.startEmpty) {\n (tabContainer.children[0].firstChild as HTMLButtonElement).click() // Open first tab\n }\n return rootElement\n\n function addCancelButton (tabContainer) {\n if (tabContainer.dataset.onCloseSet) {\n // @@ TODO: this is only here to make the browser tests work\n // Discussion at https://github.com/solidos/solid-ui/pull/110#issuecomment-527080663\n const existingCancelButton = tabContainer.querySelector('.unstyled')\n tabContainer.removeChild(existingCancelButton)\n }\n const extraTab = dom.createElement(tabElement)\n extraTab.classList.add('unstyled')\n const tabCancelButton = cancelButton(dom, onClose)\n tabCancelButton.setAttribute('style', tabCancelButton.getAttribute('style') + paddingStyle)\n extraTab.appendChild(tabCancelButton)\n tabContainer.appendChild(extraTab)\n tabContainer.dataset.onCloseSet = 'true'\n }\n\n function getItems (): Array<NamedNode> {\n if (options.items) return options.items\n if (options.ordered !== false) {\n // options.ordered defaults to true\n return (store.the(subject, options.predicate) as any).elements\n } else {\n return store.each(subject, options.predicate) as any\n }\n }\n\n function makeNewSlot (item: NamedNode) {\n const ele = dom.createElement(tabElement) as TabElement\n ele.setAttribute('style', unselectedStyle)\n ele.subject = item\n const div = ele.appendChild(dom.createElement('button'))\n div.setAttribute('style', 'background: none; border: none; font: inherit; cursor: pointer')\n\n div.onclick = function () {\n resetTabStyle()\n resetBodyStyle()\n ele.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderMain && ele.subject && bodyMain.asSettings !== false) {\n bodyMain.innerHTML = 'loading item ...' + item\n options.renderMain(bodyMain, ele.subject)\n bodyMain.asSettings = false\n }\n }\n\n if (options.renderTabSettings && ele.subject) {\n const ellipsis = dom.createElement('button')\n ellipsis.textContent = '...'\n ellipsis.setAttribute('style', 'position: absolute; right: 0; bottom: 0; width: 20%; background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit;')\n\n ellipsis.onclick = function () {\n resetTabStyle()\n resetBodyStyle()\n ele.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderTabSettings && ele.subject && bodyMain.asSettings !== true) {\n bodyMain.innerHTML = 'loading settings ...' + item\n options.renderTabSettings(bodyMain, ele.subject)\n bodyMain.asSettings = true\n }\n }\n ele.appendChild(ellipsis)\n }\n\n if (options.renderTab) {\n options.renderTab(div, item)\n } else {\n div.innerHTML = label(item)\n }\n return ele\n\n function getOrCreateContainerElement (ele: TabElement): ContainerElement {\n const bodyMain = ele.bodyTR?.children[0] as ContainerElement\n if (bodyMain) return bodyMain\n const newBodyMain = ele.bodyTR!.appendChild(dom.createElement('main'))\n newBodyMain.setAttribute('style', bodyMainStyle)\n return newBodyMain\n }\n }\n\n // @@ Use common one from utils?\n function orderedSync () {\n const items = getItems()\n let slot: TabElement, i, j, left, right\n let differ = false\n // Find how many match at each end\n for (left = 0; left < tabContainer.children.length; left++) {\n slot = tabContainer.children[left] as TabElement\n if (left >= items.length || (slot.subject && !slot.subject.sameTerm(items[left]))) {\n differ = true\n break\n }\n }\n if (!differ && items.length === tabContainer.children.length) {\n return // The two just match in order: a case to optimize for\n }\n for (right = tabContainer.children.length - 1; right >= 0; right--) {\n slot = tabContainer.children[right] as TabElement\n j = right - tabContainer.children.length + items.length\n if (slot.subject && !slot.subject.sameTerm(items[j])) {\n break\n }\n }\n // The elements left ... right in tabContainer.children do not match\n const insertables = items.slice(left, right - tabContainer.children.length + items.length + 1)\n while (right >= left) {\n // remove extra\n tabContainer.removeChild(tabContainer.children[left])\n bodyContainer.removeChild(bodyContainer.children[left])\n right -= 1\n }\n for (i = 0; i < insertables.length; i++) {\n const newSlot = makeNewSlot(insertables[i])\n const newBodyDiv = dom.createElement('div')\n newSlot.bodyTR = newBodyDiv\n if (left === tabContainer.children.length) {\n // None left of original on right\n tabContainer.appendChild(newSlot)\n bodyContainer.appendChild(newBodyDiv)\n } else {\n tabContainer.insertBefore(newSlot, tabContainer.children[left + i])\n bodyContainer.insertBefore(newBodyDiv, bodyContainer.children[left + i])\n }\n }\n if (onClose) {\n addCancelButton(tabContainer)\n }\n }\n\n function resetTabStyle () {\n for (let i = 0; i < tabContainer.children.length; i++) {\n const tab = tabContainer.children[i]\n if (tab.classList.contains('unstyled')) {\n continue\n } else {\n tab.setAttribute('style', unselectedStyle)\n }\n }\n }\n\n function resetBodyStyle () {\n for (let i = 0; i < bodyContainer.children.length; i++) {\n bodyContainer.children[i].setAttribute('style', hiddenStyle)\n }\n }\n}\n\n/**\n * @internal\n */\nfunction getColors (backgroundColor: string): [string, string] {\n return isLight(backgroundColor)\n ? [colorBlend(backgroundColor, '#ffffff', 0.3), '#000000']\n : [colorBlend(backgroundColor, '#000000', 0.3), '#ffffff']\n}\n\n/**\n * @internal\n */\nfunction colorBlend (a: string, b: string, mix: number): string {\n let ca, cb, res\n let str = '#'\n const hex = '0123456789abcdef'\n for (let i = 0; i < 3; i++) {\n ca = parseInt(a.slice(i * 2 + 1, i * 2 + 3), 16)\n cb = parseInt(b.slice(i * 2 + 1, i * 2 + 3), 16)\n res = ca * (1.0 - mix) + cb * mix // @@@ rounding\n const res2 = parseInt(('' + res).split('.')[0]) // @@ ugh\n const h = parseInt(('' + res2 / 16).split('.')[0]) // @@ ugh\n const l = parseInt(('' + (res2 % 16)).split('.')[0]) // @@ ugh\n str += hex[h] + hex[l]\n }\n return str\n}\n\n/**\n * @internal\n */\nfunction isLight (x: string): boolean {\n let total = 0\n for (let i = 0; i < 3; i++) {\n total += parseInt(x.slice(i * 2 + 1, i * 2 + 3), 16)\n }\n return total > 128 * 3\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;;;;;AAEA;AACA;AACA;IACMA,gB;;;;;;;;;;;;;;;;;;;;kDAAyBC,W;;IAoBlBC,gB;;;;;;;;;;;;;;;;;;;;;;kDAAyBD,W;AAMtC;AACA;AACA;;;;;IACME,U;;;;;;;;;;;;;;;;;;;;;kDAAmBF,W;AAKzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASG,SAAT,CAAoBC,OAApB,EAA+C;EACpD,IAAMC,OAAO,GAAGD,OAAO,CAACC,OAAxB;EACA,IAAMC,GAAG,GAAGF,OAAO,CAACE,GAAR,IAAeC,QAA3B;EACA,IAAMC,WAAW,GAAGC,QAAQ,CAACL,OAAO,CAACI,WAAR,IAAuB,GAAxB,CAA5B;EACA,IAAME,eAAe,GAAGN,OAAO,CAACM,eAAR,IAA2B,SAAnD;EACA,IAAMC,OAAO,GAAGH,WAAW,GAAG,CAA9B;EACA,IAAMI,QAAQ,GAAGJ,WAAW,GAAG,CAA/B;EACA,IAAMK,OAAO,GAAGT,OAAO,CAACS,OAAxB;;EAEA,iBAA+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"}
|
|
1
|
+
{"version":3,"file":"tabs.js","names":["ContainerElement","HTMLElement","TabWidgetElement","TabElement","tabWidget","options","subject","dom","document","orientation","parseInt","backgroundColor","flipped","vertical","onClose","getColors","selectedColor","color","bodyMainStyle","rootElement","createElement","setAttribute","navElement","appendChild","mainElement","tabContainer","tabElement","bodyContainer","corners","cornersPrepped","concat","slice","cornersStyle","join","margins","marginsPrepped","marginsStyle","paddingStyle","tabStyle","unselectedStyle","selectedStyle","shownStyle","hiddenStyle","refresh","orderedSync","startEmpty","children","length","selectedTab","selectedTab0","Array","from","map","tab","firstChild","find","dataset","name","selectedTabURI","uri","selectedTab1","clickMe","click","addCancelButton","onCloseSet","existingCancelButton","querySelector","removeChild","extraTab","classList","add","tabCancelButton","cancelButton","getAttribute","getItems","items","ordered","store","the","predicate","elements","each","makeNewSlot","item","ele","div","onclick","resetTabStyle","resetBodyStyle","bodyTR","bodyMain","getOrCreateContainerElement","renderMain","asSettings","innerHTML","renderTabSettings","ellipsis","textContent","renderTab","label","newBodyMain","slot","i","j","left","right","differ","sameTerm","insertables","newSlot","newBodyDiv","insertBefore","contains","isLight","colorBlend","a","b","mix","ca","cb","res","str","hex","res2","split","h","l","x","total"],"sources":["../src/tabs.ts"],"sourcesContent":["import { cancelButton } from './widgets'\nimport { label } from './utils'\nimport { NamedNode } from 'rdflib'\nimport { store } from 'solid-logic'\n\n/**\n * @ignore\n */\nclass ContainerElement extends HTMLElement {\n asSettings?: boolean\n}\n\ntype TabWidgetOptions = {\n backgroundColor?: string;\n dom?: HTMLDocument;\n items?: Array<NamedNode>;\n onClose?: (event: Event) => void;\n ordered?: boolean;\n orientation?: '0' | '1' | '2' | '3';\n predicate?: NamedNode;\n renderMain?: (bodyMain: HTMLElement, subject: NamedNode) => void;\n renderTab?: (tabDiv: HTMLButtonElement, subject: NamedNode) => void;\n renderTabSettings?: (bodyMain: ContainerElement, subject: NamedNode) => void;\n selectedTab?: NamedNode;\n startEmpty?: boolean;\n subject?: NamedNode;\n};\n\nexport class TabWidgetElement extends HTMLElement {\n bodyContainer?: HTMLElement\n refresh?: () => void\n tabContainer?: HTMLElement\n}\n\n/**\n * @ignore\n */\nclass TabElement extends HTMLElement {\n bodyTR?: HTMLElement\n subject?: NamedNode\n}\n\n/**\n * Use this widget to generate tabs from triples set in the global store.\n *\n * [Here you can see examples of the tabs](https://solidos.github.io/solid-ui/examples/tabs/).\n *\n * It assumes that items to use for tabs will be in a collection by default,\n * e.g.:\n *\n * ```turtle\n * :subject :predicate ( :item1 :item2 ) .\n * ```\n *\n * You can override this by setting `ordered: false`, in which case it expects\n * unordered triples:\n *\n * ```turtle\n * :subject :predicate :item1, :item 2 .\n * ```\n *\n * Triples that are not ordered in collection are in principle not sorted,\n * which means that tabs could change order every time you render the widget.\n * But in this case the widget will try to sort it in order to keep it\n * consistent.\n *\n * In both of these cases you need to define options `subject` and `predicate`\n * to tell the widget which triples it should be looking for.\n *\n * Finally you can set items manually, using the `items` option, e.g.:\n *\n * ```javascript\n * {\n * items: [\n * namedNode('https://domain.tld/#item1'),\n * namedNode('https://domain.tld/#item2')\n * ]\n * }\n * ```\n *\n * When you set items manually you do not need to set `subject` and\n * `predicate`.\n *\n * In any case you probably want to set the renderMain option to specify\n * what should be rendered for the various items, e.g.:\n *\n * ```javascript\n * {\n * renderMain: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderItem(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderItem` is a custom function that you need to define yourself.\n *\n * The option `renderTabSettings` allows you to render a custom view in the\n * body container that is shown when you hold the ALT key and click on a\n * tab. It works very much like the `renderMain` option:\n *\n * ```javascript\n * {\n * renderTabSettings: (bodyMain, subject) => {\n * bodyMain.innerHTML = renderTabSettings(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabSettings` is a custom function that you need to define\n * yourself.\n *\n * By default the widget will try to guess the label by using the\n * [[utils.label]] function. If you want to customize this yourself, you can\n * use the `renderTab` option:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.innerText = renderTabText(subject)\n * }\n * }\n * ```\n *\n * **Note:** `renderTabText` is a custom function you need to define yourself.\n *\n * The option renderTab is also important if you want to set which tab should\n * be selected once the widget is rendered. By default it will simply select\n * the first tab, but you can override by setting `dataset.name` on the tab\n * and referring to the same string in `selectedTab`:\n *\n * ```javascript\n * {\n * renderTab: (tabDiv, subject) => {\n * tabDiv.dataset.name = subject.uri\n * },\n * selectedTab: item2.uri\n * }\n * ```\n *\n * You can apply a color to use for tabs and border of the container by using\n * option `background-color`. This is #ddddcc by default.\n *\n * You can override the document object that the widget uses to generate DOM\n * elements by setting the option `dom`. This is encouraged to set if you\n * intend your functionality to be used in environments that don't provide\n * a global `document` object.\n *\n * If you want to render a close button next to the tabs you can set option\n * `onClose` which takes a callback function that is triggered when the\n * button is clicked:\n *\n * ```javascript\n * {\n * onClose: (event) => {\n * // do something that hides the widget altogether\n * }\n * }\n * ```\n *\n * The option `orientation` allows you to set which side the tabs should be\n * located: `'0'` = Top, `'1'` = Left, `'2'` = Bottom, `'3'` = Right\n *\n * If you don't want to render anything in the body container by default,\n * you can set the option `startEmpty` to `true`.\n *\n * @param options\n */\nexport function tabWidget (options: TabWidgetOptions) {\n const subject = options.subject\n const dom = options.dom || document\n const orientation = parseInt(options.orientation || '0')\n const backgroundColor = options.backgroundColor || '#ddddcc'\n const flipped = orientation & 2\n const vertical = orientation & 1\n const onClose = options.onClose\n\n const [selectedColor, color] = getColors(backgroundColor)\n const bodyMainStyle = `flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ${selectedColor}; padding: 1em;`\n const rootElement: TabWidgetElement = dom.createElement('div') // 20200117a\n\n rootElement.setAttribute(\n 'style',\n 'display: flex; height: 100%; width: 100%; flex-direction: ' +\n (vertical ? 'row' : 'column') +\n (flipped ? '-reverse;' : ';')\n )\n\n const navElement = rootElement.appendChild(dom.createElement('nav'))\n navElement.setAttribute('style', 'margin: 0;')\n\n const mainElement = rootElement.appendChild(dom.createElement('main'))\n\n mainElement.setAttribute('style', 'margin: 0; width:100%; height: 100%;') // override tabbedtab.css\n const tabContainer = navElement.appendChild(dom.createElement('ul'))\n tabContainer.setAttribute(\n 'style',\n `\n list-style-type: none;\n display: flex;\n height: 100%;\n width: 100%;\n margin: 0;\n padding: 0;\n flex-direction: ${vertical ? 'column' : 'row'}\n `\n )\n\n const tabElement = 'li'\n\n const bodyContainer = mainElement\n rootElement.tabContainer = tabContainer\n rootElement.bodyContainer = bodyContainer\n\n const corners = ['0.2em', '0.2em', '0', '0'] // top left, TR, BR, BL\n const cornersPrepped = corners.concat(corners).slice(orientation, orientation + 4)\n const cornersStyle = `border-radius: ${cornersPrepped.join(' ')};`\n\n const margins = ['0.3em', '0.3em', '0', '0.3em'] // top, right, bottom, left\n const marginsPrepped = margins.concat(margins).slice(orientation, orientation + 4)\n const marginsStyle = `margin: ${marginsPrepped.join(' ')};`\n\n const paddingStyle = `padding: ${marginsPrepped.join(' ')};`\n\n const tabStyle = cornersStyle + `position: relative; padding: 0.7em; max-width: 20em; color: ${color};`\n const unselectedStyle = `${\n tabStyle + marginsStyle\n } opacity: 50%; background-color: ${backgroundColor};`\n const selectedStyle = `${tabStyle + marginsStyle} background-color: ${selectedColor};`\n const shownStyle = 'height: 100%; width: 100%;'\n const hiddenStyle = shownStyle + 'display: none;'\n rootElement.refresh = orderedSync\n orderedSync()\n\n if (!options.startEmpty && tabContainer.children.length && options.selectedTab) {\n const selectedTab0 = Array.from(tabContainer.children) // Version left for compatability with ??\n .map((tab) => tab.firstChild as HTMLElement)\n .find((tab) => tab.dataset.name === options.selectedTab)\n\n const selectedTabURI = options.selectedTab.uri\n const selectedTab1 = Array.from(tabContainer.children)\n // @ts-ignore\n .find(\n (tab) =>\n (tab as TabElement).subject &&\n // @ts-ignore\n (tab as TabElement).subject.uri &&\n // @ts-ignore\n (tab as TabElement).subject.uri === selectedTabURI\n )\n\n const tab = selectedTab1 || selectedTab0 || (tabContainer.children[0] as HTMLButtonElement)\n const clickMe = tab.firstChild\n // @ts-ignore\n if (clickMe) clickMe.click()\n } else if (!options.startEmpty) {\n (tabContainer.children[0].firstChild as HTMLButtonElement).click() // Open first tab\n }\n return rootElement\n\n function addCancelButton (tabContainer) {\n if (tabContainer.dataset.onCloseSet) {\n // @@ TODO: this is only here to make the browser tests work\n // Discussion at https://github.com/solidos/solid-ui/pull/110#issuecomment-527080663\n const existingCancelButton = tabContainer.querySelector('.unstyled')\n tabContainer.removeChild(existingCancelButton)\n }\n const extraTab = dom.createElement(tabElement)\n extraTab.classList.add('unstyled')\n const tabCancelButton = cancelButton(dom, onClose)\n tabCancelButton.setAttribute('style', tabCancelButton.getAttribute('style') + paddingStyle)\n extraTab.appendChild(tabCancelButton)\n tabContainer.appendChild(extraTab)\n tabContainer.dataset.onCloseSet = 'true'\n }\n\n function getItems (): Array<NamedNode> {\n if (options.items) return options.items\n if (options.ordered !== false) {\n // options.ordered defaults to true\n return (store.the(subject, options.predicate) as any).elements\n } else {\n return store.each(subject, options.predicate) as any\n }\n }\n\n function makeNewSlot (item: NamedNode) {\n const ele = dom.createElement(tabElement) as TabElement\n ele.setAttribute('style', unselectedStyle)\n ele.subject = item\n const div = ele.appendChild(dom.createElement('button'))\n div.setAttribute('style', 'background: none; border: none; font: inherit; cursor: pointer')\n\n div.onclick = function () {\n resetTabStyle()\n resetBodyStyle()\n ele.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderMain && ele.subject && bodyMain.asSettings !== false) {\n bodyMain.innerHTML = 'loading item ...' + item\n options.renderMain(bodyMain, ele.subject)\n bodyMain.asSettings = false\n }\n }\n\n if (options.renderTabSettings && ele.subject) {\n const ellipsis = dom.createElement('button')\n ellipsis.textContent = '...'\n ellipsis.setAttribute('style', 'position: absolute; right: 0; bottom: 0; width: 20%; background: none; color: inherit; border: none; padding: 0; font: inherit; cursor: pointer; outline: inherit;')\n\n ellipsis.onclick = function () {\n resetTabStyle()\n resetBodyStyle()\n ele.setAttribute('style', selectedStyle)\n if (!ele.bodyTR) return\n ele.bodyTR.setAttribute('style', shownStyle)\n const bodyMain = getOrCreateContainerElement(ele)\n if (options.renderTabSettings && ele.subject && bodyMain.asSettings !== true) {\n bodyMain.innerHTML = 'loading settings ...' + item\n options.renderTabSettings(bodyMain, ele.subject)\n bodyMain.asSettings = true\n }\n }\n ele.appendChild(ellipsis)\n }\n\n if (options.renderTab) {\n options.renderTab(div, item)\n } else {\n div.innerHTML = label(item)\n }\n return ele\n\n function getOrCreateContainerElement (ele: TabElement): ContainerElement {\n const bodyMain = ele.bodyTR?.children[0] as ContainerElement\n if (bodyMain) return bodyMain\n const newBodyMain = ele.bodyTR!.appendChild(dom.createElement('main'))\n newBodyMain.setAttribute('style', bodyMainStyle)\n return newBodyMain\n }\n }\n\n // @@ Use common one from utils?\n function orderedSync () {\n const items = getItems()\n let slot: TabElement, i, j, left, right\n let differ = false\n // Find how many match at each end\n for (left = 0; left < tabContainer.children.length; left++) {\n slot = tabContainer.children[left] as TabElement\n if (left >= items.length || (slot.subject && !slot.subject.sameTerm(items[left]))) {\n differ = true\n break\n }\n }\n if (!differ && items.length === tabContainer.children.length) {\n return // The two just match in order: a case to optimize for\n }\n for (right = tabContainer.children.length - 1; right >= 0; right--) {\n slot = tabContainer.children[right] as TabElement\n j = right - tabContainer.children.length + items.length\n if (slot.subject && !slot.subject.sameTerm(items[j])) {\n break\n }\n }\n // The elements left ... right in tabContainer.children do not match\n const insertables = items.slice(left, right - tabContainer.children.length + items.length + 1)\n while (right >= left) {\n // remove extra\n tabContainer.removeChild(tabContainer.children[left])\n bodyContainer.removeChild(bodyContainer.children[left])\n right -= 1\n }\n for (i = 0; i < insertables.length; i++) {\n const newSlot = makeNewSlot(insertables[i])\n const newBodyDiv = dom.createElement('div')\n newSlot.bodyTR = newBodyDiv\n if (left === tabContainer.children.length) {\n // None left of original on right\n tabContainer.appendChild(newSlot)\n bodyContainer.appendChild(newBodyDiv)\n } else {\n tabContainer.insertBefore(newSlot, tabContainer.children[left + i])\n bodyContainer.insertBefore(newBodyDiv, bodyContainer.children[left + i])\n }\n }\n if (onClose) {\n addCancelButton(tabContainer)\n }\n }\n\n function resetTabStyle () {\n for (let i = 0; i < tabContainer.children.length; i++) {\n const tab = tabContainer.children[i]\n if (tab.classList.contains('unstyled')) {\n continue\n } else {\n tab.setAttribute('style', unselectedStyle)\n }\n }\n }\n\n function resetBodyStyle () {\n for (let i = 0; i < bodyContainer.children.length; i++) {\n bodyContainer.children[i].setAttribute('style', hiddenStyle)\n }\n }\n}\n\n/**\n * @internal\n */\nfunction getColors (backgroundColor: string): [string, string] {\n return isLight(backgroundColor)\n ? [colorBlend(backgroundColor, '#ffffff', 0.3), '#000000']\n : [colorBlend(backgroundColor, '#000000', 0.3), '#ffffff']\n}\n\n/**\n * @internal\n */\nfunction colorBlend (a: string, b: string, mix: number): string {\n let ca, cb, res\n let str = '#'\n const hex = '0123456789abcdef'\n for (let i = 0; i < 3; i++) {\n ca = parseInt(a.slice(i * 2 + 1, i * 2 + 3), 16)\n cb = parseInt(b.slice(i * 2 + 1, i * 2 + 3), 16)\n res = ca * (1.0 - mix) + cb * mix // @@@ rounding\n const res2 = parseInt(('' + res).split('.')[0]) // @@ ugh\n const h = parseInt(('' + res2 / 16).split('.')[0]) // @@ ugh\n const l = parseInt(('' + (res2 % 16)).split('.')[0]) // @@ ugh\n str += hex[h] + hex[l]\n }\n return str\n}\n\n/**\n * @internal\n */\nfunction isLight (x: string): boolean {\n let total = 0\n for (let i = 0; i < 3; i++) {\n total += parseInt(x.slice(i * 2 + 1, i * 2 + 3), 16)\n }\n return total > 128 * 3\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AAEA;AAAmC;AAAA;AAEnC;AACA;AACA;AAFA,IAGMA,gBAAgB;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA;IAAA;EAAA;EAAA;AAAA,kDAASC,WAAW;AAAA,IAoB7BC,gBAAgB;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;EAAA;AAAA,kDAASD,WAAW;AAMjD;AACA;AACA;AAFA;AAAA,IAGME,UAAU;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA;IAAA;IAAA;EAAA;EAAA;AAAA,kDAASF,WAAW;AAKpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,SAAS,CAAEC,OAAyB,EAAE;EACpD,IAAMC,OAAO,GAAGD,OAAO,CAACC,OAAO;EAC/B,IAAMC,GAAG,GAAGF,OAAO,CAACE,GAAG,IAAIC,QAAQ;EACnC,IAAMC,WAAW,GAAGC,QAAQ,CAACL,OAAO,CAACI,WAAW,IAAI,GA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"}
|