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.
Files changed (136) hide show
  1. package/dist/main.js +2159 -5039
  2. package/dist/main.js.map +1 -1
  3. package/lib/acl/access-controller.js +4 -67
  4. package/lib/acl/access-controller.js.map +1 -1
  5. package/lib/acl/access-groups.js +59 -137
  6. package/lib/acl/access-groups.js.map +1 -1
  7. package/lib/acl/acl-control.js +14 -54
  8. package/lib/acl/acl-control.js.map +1 -1
  9. package/lib/acl/acl.js +32 -107
  10. package/lib/acl/acl.js.map +1 -1
  11. package/lib/acl/add-agent-buttons.js +0 -92
  12. package/lib/acl/add-agent-buttons.js.map +1 -1
  13. package/lib/acl/index.js +1 -3
  14. package/lib/acl/index.js.map +1 -1
  15. package/lib/acl/styles.js +1 -2
  16. package/lib/acl/styles.js.map +1 -1
  17. package/lib/chat/bookmarks.js +8 -80
  18. package/lib/chat/bookmarks.js.map +1 -1
  19. package/lib/chat/chatLogic.js +109 -180
  20. package/lib/chat/chatLogic.js.map +1 -1
  21. package/lib/chat/dateFolder.js +6 -91
  22. package/lib/chat/dateFolder.js.map +1 -1
  23. package/lib/chat/infinite.js +33 -185
  24. package/lib/chat/infinite.js.map +1 -1
  25. package/lib/chat/message.js +37 -150
  26. package/lib/chat/message.js.map +1 -1
  27. package/lib/chat/messageTools.js +23 -96
  28. package/lib/chat/messageTools.js.map +1 -1
  29. package/lib/chat/thread.js +33 -91
  30. package/lib/chat/thread.js.map +1 -1
  31. package/lib/create/create.js +19 -51
  32. package/lib/create/create.js.map +1 -1
  33. package/lib/create/index.js +0 -2
  34. package/lib/create/index.js.map +1 -1
  35. package/lib/debug.js +0 -8
  36. package/lib/debug.js.map +1 -1
  37. package/lib/folders.js +4 -27
  38. package/lib/folders.js.map +1 -1
  39. package/lib/footer/index.js +2 -24
  40. package/lib/footer/index.js.map +1 -1
  41. package/lib/footer/styleMap.js.map +1 -1
  42. package/lib/header/empty-profile.js.map +1 -1
  43. package/lib/header/index.js +3 -72
  44. package/lib/header/index.js.map +1 -1
  45. package/lib/header/styleMap.js +4 -3
  46. package/lib/header/styleMap.js.map +1 -1
  47. package/lib/iconBase.js +3 -4
  48. package/lib/iconBase.js.map +1 -1
  49. package/lib/index.js +5 -46
  50. package/lib/index.js.map +1 -1
  51. package/lib/jss/index.js +3 -9
  52. package/lib/jss/index.js.map +1 -1
  53. package/lib/log.js +15 -51
  54. package/lib/log.js.map +1 -1
  55. package/lib/login/login.js +74 -303
  56. package/lib/login/login.js.map +1 -1
  57. package/lib/matrix/index.js +0 -2
  58. package/lib/matrix/index.js.map +1 -1
  59. package/lib/matrix/matrix.js +7 -55
  60. package/lib/matrix/matrix.js.map +1 -1
  61. package/lib/media/index.js +0 -2
  62. package/lib/media/index.js.map +1 -1
  63. package/lib/media/media-capture.js +13 -33
  64. package/lib/media/media-capture.js.map +1 -1
  65. package/lib/messageArea.js +23 -64
  66. package/lib/messageArea.js.map +1 -1
  67. package/lib/noun_Camera_1618446_000000.js.map +1 -1
  68. package/lib/ns.js +5 -7
  69. package/lib/ns.js.map +1 -1
  70. package/lib/pad.js +48 -234
  71. package/lib/pad.js.map +1 -1
  72. package/lib/participation.js +10 -65
  73. package/lib/participation.js.map +1 -1
  74. package/lib/preferences.js +21 -42
  75. package/lib/preferences.js.map +1 -1
  76. package/lib/signup/config-default.js +1 -8
  77. package/lib/signup/config-default.js.map +1 -1
  78. package/lib/signup/signup.js +6 -13
  79. package/lib/signup/signup.js.map +1 -1
  80. package/lib/stories/decorators.js +0 -2
  81. package/lib/stories/decorators.js.map +1 -1
  82. package/lib/style.js +8 -5
  83. package/lib/style.js.map +1 -1
  84. package/lib/style_multiSelect.js +1 -5
  85. package/lib/style_multiSelect.js.map +1 -1
  86. package/lib/table.js +309 -322
  87. package/lib/table.js.map +1 -1
  88. package/lib/tabs.js +20 -100
  89. package/lib/tabs.js.map +1 -1
  90. package/lib/utils/headerFooterHelpers.js +4 -52
  91. package/lib/utils/headerFooterHelpers.js.map +1 -1
  92. package/lib/utils/index.js +41 -135
  93. package/lib/utils/index.js.map +1 -1
  94. package/lib/utils/label.js +13 -34
  95. package/lib/utils/label.js.map +1 -1
  96. package/lib/versionInfo.js +4 -4
  97. package/lib/versionInfo.js.map +1 -1
  98. package/lib/widgets/buttons/iconLinks.js +0 -8
  99. package/lib/widgets/buttons/iconLinks.js.map +1 -1
  100. package/lib/widgets/buttons.js +115 -291
  101. package/lib/widgets/buttons.js.map +1 -1
  102. package/lib/widgets/dragAndDrop.js +12 -41
  103. package/lib/widgets/dragAndDrop.js.map +1 -1
  104. package/lib/widgets/error.js +3 -9
  105. package/lib/widgets/error.js.map +1 -1
  106. package/lib/widgets/forms/autocomplete/autocompleteBar.js +8 -71
  107. package/lib/widgets/forms/autocomplete/autocompleteBar.js.map +1 -1
  108. package/lib/widgets/forms/autocomplete/autocompleteField.js +13 -65
  109. package/lib/widgets/forms/autocomplete/autocompleteField.js.map +1 -1
  110. package/lib/widgets/forms/autocomplete/autocompletePicker.js +15 -107
  111. package/lib/widgets/forms/autocomplete/autocompletePicker.js.map +1 -1
  112. package/lib/widgets/forms/autocomplete/language.js +6 -55
  113. package/lib/widgets/forms/autocomplete/language.js.map +1 -1
  114. package/lib/widgets/forms/autocomplete/publicData.js +12 -131
  115. package/lib/widgets/forms/autocomplete/publicData.js.map +1 -1
  116. package/lib/widgets/forms/basic.js +12 -55
  117. package/lib/widgets/forms/basic.js.map +1 -1
  118. package/lib/widgets/forms/comment.js +1 -15
  119. package/lib/widgets/forms/comment.js.map +1 -1
  120. package/lib/widgets/forms/fieldFunction.js +3 -16
  121. package/lib/widgets/forms/fieldFunction.js.map +1 -1
  122. package/lib/widgets/forms/fieldParams.js +0 -12
  123. package/lib/widgets/forms/fieldParams.js.map +1 -1
  124. package/lib/widgets/forms/formStyle.js +1 -14
  125. package/lib/widgets/forms/formStyle.js.map +1 -1
  126. package/lib/widgets/forms.js +70 -474
  127. package/lib/widgets/forms.js.map +1 -1
  128. package/lib/widgets/index.js +0 -21
  129. package/lib/widgets/index.js.map +1 -1
  130. package/lib/widgets/multiSelect.js +48 -171
  131. package/lib/widgets/multiSelect.js.map +1 -1
  132. package/lib/widgets/peoplePicker.js +20 -90
  133. package/lib/widgets/peoplePicker.js.map +1 -1
  134. package/lib/widgets/widgetHelpers.js +2 -9
  135. package/lib/widgets/widgetHelpers.js.map +1 -1
  136. 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
- _getColors2 = (0, _slicedToArray2["default"])(_getColors, 2),
254
- selectedColor = _getColors2[0],
255
- color = _getColors2[1];
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) // @ts-ignore
251
+ var selectedTab1 = Array.from(tabContainer.children)
252
+ // @ts-ignore
298
253
  .find(function (tab) {
299
- return tab.subject && // @ts-ignore
300
- tab.subject.uri && // @ts-ignore
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; // @ts-ignore
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
- } // @@ Use common one from utils?
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; // Find how many match at each end
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
- } // The elements left ... right in tabContainer.children do not match
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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"}