wj-elements 0.1.70 → 0.1.72

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.
@@ -97,9 +97,8 @@ class Dialog extends WJElement {
97
97
  this.onClose();
98
98
  }
99
99
  afterDraw(context, store, params) {
100
- this.button = document.querySelector(`[dialog=${params.trigger}]`);
101
100
  if (params.trigger) {
102
- event.addListener(this.button, params.trigger, null, this.onOpen);
101
+ event.addListener(document, params.trigger, null, this.onOpen);
103
102
  }
104
103
  }
105
104
  beforeOpen() {
package/dist/wje-input.js CHANGED
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  import WJElement, { event } from "./wje-element.js";
8
- const styles = '/*\n[ WJ Input ]\n*/\n\n:host {\n --wje-input-font-family: var(--wje-font-family);\n --wje-input-background-color: var(--wje-background);\n --wje-input-color: var(--wje-color);\n --wje-input-color-invalid: var(--wje-color-danger);\n --wje-input-border-color: var(--wje-border-color);\n --wje-input-border-color-focus: var(--wje-color-primary);\n --wje-input-border-width: 1px;\n --wje-input-border-style: solid;\n --wje-input-border-radius: 4px;\n --wje-input-margin-bottom: .5rem;\n --wje-input-line-height: 20px;\n --wje-input-slot-padding-inline: .5rem;\n width: 100%;\n margin-bottom: var(--wje-input-margin-bottom);\n display: block;\n\n .wrapper {\n display: flex;\n width: 100%;\n }\n .native-input {\n .input-wrapper {\n width: 100%;\n position: relative;\n }\n &.default {\n background-color: var(--wje-input-background-color);\n font-family: var(--wje-input-font-family);\n position: relative;\n border-radius: var(--wje-input-border-radius);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n padding-inline: 0;\n padding-top: .25rem;\n padding-bottom: .25rem;\n transition: background-color 0.2s ease;\n cursor: text;\n .input-wrapper {\n margin-inline: .5rem;\n }\n &.focused {\n border-color: var(--wje-input-border-color-focus) !important;\n label {\n opacity: 0.67;\n font-size: 12px;\n letter-spacing: normal;\n }\n }\n input {\n border: none;\n height: 25px;\n min-height: 25px;\n padding: 0;\n margin-top: -4px;\n background: none;\n box-shadow: none;\n width: 100%;\n }\n label {\n margin: 0;\n display: block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-input-line-height);\n &.fade {\n opacity: 0.5;\n font-size: 12px;\n letter-spacing: normal;\n }\n }\n ::slotted([slot="start"]) {\n border-left: none;\n border-top: none;\n border-bottom: none;\n }\n\n ::slotted([slot="end"]) {\n border-right: none;\n border-top: none;\n border-bottom: none;\n }\n }\n &.standard {\n font-family: var(--wje-input-font-family);\n position: relative;\n border-radius: var(--wje-input-border-radius);\n padding-inline: 0;\n padding-top: 0;\n padding-bottom: 0;\n transition: background-color 0.2s ease;\n cursor: text;\n &.focused {\n input {\n border-color: var(--wje-input-border-color-focus) !important;\n }\n }\n input {\n background-color: var(--wje-input-background-color);\n display: block;\n min-height: 32px;\n padding-inline: .5rem;\n padding-top: 0;\n padding-bottom: 0;\n /*background: none;*/\n box-shadow: none;\n width: 100%;\n box-sizing: border-box;\n border-radius: var(--wje-input-border-radius);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n }\n label {\n margin: 0;\n display: inline-block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-input-line-height);\n }\n .input-wrapper {\n &:hover .clear {\n visibility: visible;\n }\n }\n ::slotted([slot="start"]) {\n border-right: none;\n border-radius: var(--wje-input-border-radius) 0 0 var(--wje-input-border-radius);\n }\n\n ::slotted([slot="end"]) {\n border-left: none;\n border-radius: 0 var(--wje-input-border-radius) var(--wje-input-border-radius) 0;\n }\n\n &.has-start input{\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.has-end input{\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .error-message {\n position: static;\n\n background: transparent;\n padding: 0.25rem 0;\n left: auto;\n transform: none;\n color: var(--wje-input-color-invalid);\n font-size: 12px;\n line-height: normal;\n }\n }\n }\n}\n\n.clear {\n visibility: hidden;\n position: absolute;\n right: 0;\n top: 3px;\n --wje-padding-top: .25rem;\n --wje-padding-start: .25rem;\n --wje-padding-end: .25rem;\n --wje-padding-bottom: .25rem;\n --wje-button-margin-inline: 0 .25rem;\n}\n\n:host([required]) .input-wrapper::after {\n color: var(--wje-input-color-invalid);\n content: "*";\n font-family: var(--wje-force-mac-font-family);\n font-size: 20px;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n:host([required]) .standard .input-wrapper::after {\n top: 0;\n}\n\n:host([invalid]) {\n .error-message {\n display: block;\n }\n .default {\n label {\n opacity: 1 !important;\n color: var(--wje-input-color-invalid) !important;\n animation-name: shake;\n animation-duration: 0.4s;\n animation-iteration-count: 1;\n }\n }\n}\n\n::slotted([slot="start"]), ::slotted([slot="end"]) {\n display: flex;\n align-items: center;\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n padding-inline: var(--wje-input-slot-padding-inline);\n}\n\nslot[name="start"], slot[name="end"] {\n display: flex;\n}\n\nslot[name="error"] {\n display: none;\n margin-inline: .5rem;\n}\n\n:host([invalid]) slot[name="error"] {\n display: block;\n}\n\ninput {\n background-color: var(--wje-input-background-color);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n font-family: var(--wjinput-font-family);\n color: var(--wje-input-color);\n appearance: none;\n outline: 0;\n padding: .25rem .5rem;\n line-height: var(--wje-input-line-height);\n font-size: 14px;\n font-weight: normal;\n vertical-align: middle;\n min-height: 32px;\n}\n\n.error-message {\n display: none;\n position: absolute;\n width: auto;\n max-width: 100%;\n min-width: auto;\n border-radius: 50px;\n background: black;\n padding: .25rem .5rem;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n font-size: 12px;\n line-height: normal;\n}\n\n@keyframes shake {\n 8%,\n 41% {\n transform: translateX(-4px);\n }\n 25%,\n 58% {\n transform: translateX(4px);\n }\n 75% {\n transform: translateX(-2px);\n }\n 92% {\n transform: translateX(2px);\n }\n 0%,\n 100% {\n transform: translateX(0);\n }\n}';
8
+ const styles = '/*\n[ WJ Input ]\n*/\n\n:host {\n --wje-input-font-family: var(--wje-font-family);\n --wje-input-background-color: var(--wje-background);\n --wje-input-color: var(--wje-color);\n --wje-input-color-invalid: var(--wje-color-danger);\n --wje-input-border-color: var(--wje-border-color);\n --wje-input-border-color-focus: var(--wje-color-primary);\n --wje-input-border-width: 1px;\n --wje-input-border-style: solid;\n --wje-input-border-radius: 4px;\n --wje-input-margin-bottom: .5rem;\n --wje-input-line-height: 20px;\n --wje-input-slot-padding-inline: .5rem;\n width: 100%;\n margin-bottom: var(--wje-input-margin-bottom);\n display: block;\n\n .wrapper {\n display: flex;\n width: 100%;\n }\n .native-input {\n .input-wrapper {\n width: 100%;\n position: relative;\n }\n &.default {\n background-color: var(--wje-input-background-color);\n font-family: var(--wje-input-font-family);\n position: relative;\n border-radius: var(--wje-input-border-radius);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n padding-inline: 0;\n padding-top: .25rem;\n padding-bottom: .25rem;\n transition: background-color 0.2s ease;\n cursor: text;\n .input-wrapper {\n margin-inline: .5rem;\n }\n &.focused {\n border-color: var(--wje-input-border-color-focus) !important;\n label {\n opacity: 0.67;\n font-size: 12px;\n letter-spacing: normal;\n }\n }\n input {\n border: none;\n height: 25px;\n min-height: 25px;\n padding: 0;\n margin-top: -4px;\n background: none;\n box-shadow: none;\n width: 100%;\n }\n label {\n margin: 0;\n display: block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-input-line-height);\n &.fade {\n opacity: 0.5;\n font-size: 12px;\n letter-spacing: normal;\n }\n }\n ::slotted([slot="start"]) {\n border-left: none;\n border-top: none;\n border-bottom: none;\n }\n\n ::slotted([slot="end"]) {\n border-right: none;\n border-top: none;\n border-bottom: none;\n }\n }\n &.standard {\n font-family: var(--wje-input-font-family);\n position: relative;\n border-radius: var(--wje-input-border-radius);\n padding-inline: 0;\n padding-top: 0;\n padding-bottom: 0;\n transition: background-color 0.2s ease;\n cursor: text;\n &.focused {\n input {\n border-color: var(--wje-input-border-color-focus) !important;\n }\n }\n input {\n background-color: var(--wje-input-background-color);\n display: block;\n min-height: 32px;\n padding-inline: .5rem;\n padding-top: 0;\n padding-bottom: 0;\n /*background: none;*/\n box-shadow: none;\n width: 100%;\n box-sizing: border-box;\n border-radius: var(--wje-input-border-radius);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n }\n label {\n margin: 0;\n display: inline-block;\n opacity: 1;\n cursor: text;\n transition: opacity 0.2s ease;\n line-height: var(--wje-input-line-height);\n }\n .input-wrapper {\n &:hover .clear {\n visibility: visible;\n }\n }\n ::slotted([slot="start"]) {\n border-right: none;\n border-radius: var(--wje-input-border-radius) 0 0 var(--wje-input-border-radius);\n }\n\n ::slotted([slot="end"]) {\n border-left: none;\n border-radius: 0 var(--wje-input-border-radius) var(--wje-input-border-radius) 0;\n }\n\n &.has-start input{\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.has-end input{\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .error-message {\n position: static;\n\n background: transparent;\n padding: 0.25rem 0;\n left: auto;\n transform: none;\n color: var(--wje-input-color-invalid);\n font-size: 12px;\n line-height: normal;\n }\n }\n }\n}\n\n.clear {\n visibility: hidden;\n position: absolute;\n right: 0;\n top: 3px;\n --wje-padding-top: .25rem;\n --wje-padding-start: .25rem;\n --wje-padding-end: .25rem;\n --wje-padding-bottom: .25rem;\n --wje-button-margin-inline: 0 .25rem;\n}\n\n:host([required]) .input-wrapper::after {\n color: var(--wje-input-color-invalid);\n content: "*";\n font-family: var(--wje-force-mac-font-family);\n font-size: 20px;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n:host([required]) .standard .input-wrapper::after {\n top: 0;\n}\n\n:host([invalid]) {\n .error-message {\n display: block;\n }\n .default {\n label {\n opacity: 1 !important;\n color: var(--wje-input-color-invalid) !important;\n animation-name: shake;\n animation-duration: 0.4s;\n animation-iteration-count: 1;\n }\n }\n}\n\n::slotted([slot="start"]), ::slotted([slot="end"]) {\n display: flex;\n align-items: center;\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n padding-inline: var(--wje-input-slot-padding-inline);\n}\n\nslot[name="start"], slot[name="end"] {\n display: flex;\n}\n\nslot[name="error"] {\n display: none;\n margin-inline: .5rem;\n}\n\n:host([invalid]) slot[name="error"] {\n display: block;\n}\n\ninput {\n background-color: var(--wje-input-background-color);\n border-width: var(--wje-input-border-width);\n border-style: var(--wje-input-border-style);\n border-color: var(--wje-input-border-color);\n font-family: var(--wje-input-font-family);\n color: var(--wje-input-color);\n appearance: none;\n outline: 0;\n padding: .25rem .5rem;\n line-height: var(--wje-input-line-height);\n font-size: 14px;\n font-weight: normal;\n vertical-align: middle;\n min-height: 32px;\n}\n\n.error-message {\n display: none;\n position: absolute;\n width: auto;\n max-width: 100%;\n min-width: auto;\n border-radius: 50px;\n background: black;\n padding: .25rem .5rem;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n color: white;\n font-size: 12px;\n line-height: normal;\n}\n\n@keyframes shake {\n 8%,\n 41% {\n transform: translateX(-4px);\n }\n 25%,\n 58% {\n transform: translateX(4px);\n }\n 75% {\n transform: translateX(-2px);\n }\n 92% {\n transform: translateX(2px);\n }\n 0%,\n 100% {\n transform: translateX(0);\n }\n}';
9
9
  class Input extends WJElement {
10
10
  /**
11
11
  * Constructor for the Input class.
@@ -61,39 +61,40 @@ import { default as default50 } from "./wje-menu-label.js";
61
61
  import { default as default51 } from "./wje-option.js";
62
62
  import { default as default52 } from "./wje-options.js";
63
63
  import { default as default53 } from "./wje-orgchart.js";
64
- import { default as default54 } from "./wje-orgchart-item.js";
64
+ import { default as default54 } from "./wje-orgchart-group.js";
65
+ import { default as default55 } from "./wje-orgchart-item.js";
65
66
  import "./wje-popup.js";
66
- import { default as default55 } from "./wje-progress-bar.js";
67
- import { default as default56 } from "./wje-qr-code.js";
68
- import { default as default57 } from "./wje-radio.js";
69
- import { default as default58 } from "./wje-radio-group.js";
70
- import { default as default59 } from "./wje-rate.js";
71
- import { default as default60 } from "./wje-relative-time.js";
72
- import { default as default61 } from "./wje-reorder.js";
73
- import { default as default62 } from "./wje-reorder-dropzone.js";
74
- import { default as default63 } from "./wje-reorder-handle.js";
75
- import { default as default64 } from "./wje-reorder-item.js";
76
- import { default as default65 } from "./wje-route.js";
77
- import { default as default66 } from "./wje-routerx.js";
78
- import { default as default67 } from "./wje-router-link.js";
79
- import { default as default68 } from "./wje-router-outlet.js";
80
- import { default as default69 } from "./wje-row.js";
81
- import { default as default70 } from "./wje-select.js";
82
- import { default as default71 } from "./wje-slider.js";
83
- import { default as default72 } from "./wje-split-view.js";
84
- import { default as default73 } from "./wje-status.js";
85
- import { default as default74 } from "./wje-tab.js";
86
- import { default as default75 } from "./wje-tab-group.js";
87
- import { default as default76 } from "./wje-tab-panel.js";
88
- import { default as default77 } from "./wje-textarea.js";
89
- import { default as default78 } from "./wje-thumbnail.js";
90
- import { default as default79 } from "./wje-toast.js";
91
- import { default as default80 } from "./wje-toggle.js";
92
- import { default as default81 } from "./wje-toolbar.js";
93
- import { default as default82 } from "./wje-toolbar-action.js";
94
- import { default as default83 } from "./wje-tooltip.js";
95
- import { default as default84 } from "./wje-visually-hidden.js";
96
- import { default as default85 } from "./wje-sliding-container.js";
67
+ import { default as default56 } from "./wje-progress-bar.js";
68
+ import { default as default57 } from "./wje-qr-code.js";
69
+ import { default as default58 } from "./wje-radio.js";
70
+ import { default as default59 } from "./wje-radio-group.js";
71
+ import { default as default60 } from "./wje-rate.js";
72
+ import { default as default61 } from "./wje-relative-time.js";
73
+ import { default as default62 } from "./wje-reorder.js";
74
+ import { default as default63 } from "./wje-reorder-dropzone.js";
75
+ import { default as default64 } from "./wje-reorder-handle.js";
76
+ import { default as default65 } from "./wje-reorder-item.js";
77
+ import { default as default66 } from "./wje-route.js";
78
+ import { default as default67 } from "./wje-routerx.js";
79
+ import { default as default68 } from "./wje-router-link.js";
80
+ import { default as default69 } from "./wje-router-outlet.js";
81
+ import { default as default70 } from "./wje-row.js";
82
+ import { default as default71 } from "./wje-select.js";
83
+ import { default as default72 } from "./wje-slider.js";
84
+ import { default as default73 } from "./wje-split-view.js";
85
+ import { default as default74 } from "./wje-status.js";
86
+ import { default as default75 } from "./wje-tab.js";
87
+ import { default as default76 } from "./wje-tab-group.js";
88
+ import { default as default77 } from "./wje-tab-panel.js";
89
+ import { default as default78 } from "./wje-textarea.js";
90
+ import { default as default79 } from "./wje-thumbnail.js";
91
+ import { default as default80 } from "./wje-toast.js";
92
+ import { default as default81 } from "./wje-toggle.js";
93
+ import { default as default82 } from "./wje-toolbar.js";
94
+ import { default as default83 } from "./wje-toolbar-action.js";
95
+ import { default as default84 } from "./wje-tooltip.js";
96
+ import { default as default85 } from "./wje-visually-hidden.js";
97
+ import { default as default86 } from "./wje-sliding-container.js";
97
98
  import { P } from "./popup.element-DvPGL_NN.js";
98
99
  function formatDate(input, format) {
99
100
  let date;
@@ -5096,6 +5097,7 @@ class Stepper extends WJElement {
5096
5097
  this.setStepDone(step, badge);
5097
5098
  });
5098
5099
  this.setStepActive(this.headerSteps[stepIndex], null, stepIndex);
5100
+ this.setContentActive(stepIndex);
5099
5101
  this.currentStep = stepIndex;
5100
5102
  this.prev.disabled = this.currentStep === 0;
5101
5103
  this.next.disabled = this.currentStep === this.steps.length - 1;
@@ -5118,6 +5120,16 @@ class Stepper extends WJElement {
5118
5120
  badge.innerHTML = stepIndex + 1;
5119
5121
  badge.setAttribute("color", this.active);
5120
5122
  }
5123
+ setContentActive(stepIndex) {
5124
+ var _a2;
5125
+ (_a2 = this.steps) == null ? void 0 : _a2.forEach((step, index) => {
5126
+ if (index === stepIndex) {
5127
+ step.style.display = "block";
5128
+ } else {
5129
+ step.style.display = "none";
5130
+ }
5131
+ });
5132
+ }
5121
5133
  setStepDone(nav, badge = null) {
5122
5134
  nav.setAttribute("done", "");
5123
5135
  const checkIcon = document.createElement("wje-icon");
@@ -5309,43 +5321,44 @@ export {
5309
5321
  default51 as Option,
5310
5322
  default52 as Options,
5311
5323
  default53 as Orgchart,
5312
- default54 as OrgchartItem,
5324
+ default54 as OrgchartGroup,
5325
+ default55 as OrgchartItem,
5313
5326
  P as Popup,
5314
- default55 as ProgressBar,
5315
- default56 as QrCode,
5316
- default57 as Radio,
5317
- default58 as RadioGroup,
5318
- default59 as Rate,
5319
- default60 as RelativeTime,
5320
- default61 as Reorder,
5321
- default62 as ReorderDropzone,
5322
- default63 as ReorderHandle,
5323
- default64 as ReorderItem,
5324
- default65 as Route,
5325
- default67 as RouterLink,
5326
- default68 as RouterOutlet,
5327
- default66 as Routerx,
5328
- default69 as Row,
5329
- default70 as Select,
5330
- default71 as Slider,
5331
- default85 as SlidingContainer,
5332
- default72 as SplitView,
5333
- default73 as Status,
5327
+ default56 as ProgressBar,
5328
+ default57 as QrCode,
5329
+ default58 as Radio,
5330
+ default59 as RadioGroup,
5331
+ default60 as Rate,
5332
+ default61 as RelativeTime,
5333
+ default62 as Reorder,
5334
+ default63 as ReorderDropzone,
5335
+ default64 as ReorderHandle,
5336
+ default65 as ReorderItem,
5337
+ default66 as Route,
5338
+ default68 as RouterLink,
5339
+ default69 as RouterOutlet,
5340
+ default67 as Routerx,
5341
+ default70 as Row,
5342
+ default71 as Select,
5343
+ default72 as Slider,
5344
+ default86 as SlidingContainer,
5345
+ default73 as SplitView,
5346
+ default74 as Status,
5334
5347
  Step,
5335
5348
  Stepper,
5336
- default74 as Tab,
5337
- default75 as TabGroup,
5338
- default76 as TabPanel,
5339
- default77 as Textarea,
5340
- default78 as Thumbnail,
5349
+ default75 as Tab,
5350
+ default76 as TabGroup,
5351
+ default77 as TabPanel,
5352
+ default78 as Textarea,
5353
+ default79 as Thumbnail,
5341
5354
  Timeline,
5342
5355
  TimelineItem,
5343
- default79 as Toast,
5344
- default80 as Toggle,
5345
- default81 as Toolbar,
5346
- default82 as ToolbarAction,
5347
- default83 as Tooltip,
5348
- default84 as VisuallyHidden,
5356
+ default80 as Toast,
5357
+ default81 as Toggle,
5358
+ default82 as Toolbar,
5359
+ default83 as ToolbarAction,
5360
+ default84 as Tooltip,
5361
+ default85 as VisuallyHidden,
5349
5362
  WJElement,
5350
5363
  b as bindRouterLinks,
5351
5364
  defaultStoreActions,
@@ -0,0 +1,64 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import WJElement from "./wje-element.js";
8
+ const styles = ":host {\n --wje-orgchart-group-width: auto;\n --wje-orgchart-group-border-radius: var(--wje-border-radius-large);\n --wje-orgchart-group-height-line: 10px;\n text-align: center;\n list-style-type: none;\n position: relative;\n padding: var(--wje-orgchart-group-height-line) 0 0 0;\n transition: all 0.5s;\n\n &::before, &::after {\n content: '';\n position: absolute;\n top: 0;\n right: 50%;\n border-top: 1px solid var(--wje-border-color);\n width: 50%;\n height: var(--wje-orgchart-group-height-line);\n }\n\n &::after {\n right: auto;\n left: 50%;\n border-left: 1px solid var(--wje-border-color);\n }\n\n wje-card::part(native) {\n box-sizing: border-box;\n padding: .25rem 0;\n }\n\n wje-card h4 {\n margin: 0;\n }\n wje-card .items {\n display: flex;\n }\n\n .orgchart-group {\n display: flex;\n flex-direction: column;\n wje-card {\n margin: 0 auto;\n width: var(--wje-orgchart-group-width);\n }\n }\n}\n\n:host(:only-child)::after, :host(:only-child)::before {\n display: none;\n}\n\n:host(:only-child) {\n padding-top: 0;\n}\n\n:host(:first-child)::before,\n:host(:last-child)::after {\n border: 0 none;\n}\n\n:host(:last-child)::before {\n border-right: 1px solid var(--wje-border-color);\n border-radius: 0 var(--wje-orgchart-group-border-radius) 0 0;\n}\n\n:host(:first-child)::after {\n border-radius: var(--wje-orgchart-group-border-radius) 0 0 0;\n}";
9
+ class OrgchartGroup extends WJElement {
10
+ /**
11
+ * Creates an instance of OrgchartGroup.
12
+ *
13
+ * @constructor
14
+ */
15
+ constructor() {
16
+ super();
17
+ __publicField(this, "className", "OrgchartGroup");
18
+ }
19
+ /**
20
+ * Returns the CSS styles for the component.
21
+ *
22
+ * @static
23
+ * @returns {CSSStyleSheet}
24
+ */
25
+ static get cssStyleSheet() {
26
+ return styles;
27
+ }
28
+ /**
29
+ * Sets up the attributes for the component.
30
+ */
31
+ setupAttributes() {
32
+ this.isShadowRoot = "open";
33
+ }
34
+ /**
35
+ * Draws the component.
36
+ *
37
+ * @param {Object} context - The context for drawing.
38
+ * @param {Object} store - The store for drawing.
39
+ * @param {Object} params - The parameters for drawing.
40
+ * @returns {DocumentFragment}
41
+ */
42
+ draw(context, store, params) {
43
+ let fragment = document.createDocumentFragment();
44
+ let native = document.createElement("div");
45
+ native.setAttribute("part", "native");
46
+ native.classList.add("orgchart-group");
47
+ let card = document.createElement("wje-card");
48
+ let title = document.createElement("h4");
49
+ title.innerHTML = this.getAttribute("title") || "";
50
+ let items = document.createElement("div");
51
+ items.classList.add("items");
52
+ let slot = document.createElement("slot");
53
+ items.appendChild(slot);
54
+ card.appendChild(title);
55
+ card.appendChild(items);
56
+ native.appendChild(card);
57
+ fragment.appendChild(native);
58
+ return fragment;
59
+ }
60
+ }
61
+ OrgchartGroup.define("wje-orgchart-group", OrgchartGroup);
62
+ export {
63
+ OrgchartGroup as default
64
+ };
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  import WJElement from "./wje-element.js";
8
- const styles = ".orgchart-item {\n border-width: 1px;\n border-style: solid;\n border-color: var(--wje-color-contrast-3);\n border-radius: var(--wje-border-radius-large);\n padding: .5rem;\n p {\n margin: 0;\n }\n}";
8
+ const styles = ":host {\n --wje-orgchart-item-width: 75px;\n --wje-orgchart-item-border-radius: var(--wje-border-radius-large);\n --wje-orgchart-item-height-line: 10px;\n width: var(--wje-orgchart-item-width);\n box-sizing: border-box;\n\n .orgchart-item {\n display: flex;\n flex-direction: column;\n\n wje-card {\n margin: 0 auto;\n padding-inline: .25rem;\n width: var(--wje-orgchart-item-width);\n box-sizing: border-box;\n &::part(native) {\n border-radius: var(--wje-orgchart-border-radius) !important;\n box-sizing: border-box;\n }\n }\n }\n}\n\n/* ak nie je parent-group */\n:host(:not(.parent-group)) {\n text-align: center;\n list-style-type: none;\n position: relative;\n padding: var(--wje-orgchart-item-height-line) 0 0 0;\n transition: all 0.5s;\n width: auto;\n\n &::before, &::after {\n content: '';\n position: absolute;\n top: 0;\n right: 50%;\n border-top: 1px solid var(--wje-border-color);\n width: 50%;\n height: var(--wje-orgchart-item-height-line);\n }\n\n &::after {\n right: auto;\n left: 50%;\n border-left: 1px solid var(--wje-border-color);\n }\n\n wje-card::part(native) {\n box-sizing: border-box;\n }\n}\n\n:host(:hover){\n wje-card::part(native) {\n background: var(--wje-color-contrast-3);\n /*color: #000;*/\n }\n}\n\n:host(.highlight){\n wje-card::part(native) {\n background: var(--wje-color-complete-2);\n /*color: #000;*/\n }\n}\n\n\n:host(:only-child)::after, :host(:only-child)::before {\n display: none;\n}\n\n:host(:only-child) {\n padding-top: 0;\n}\n\n:host(:first-child)::before,\n:host(:last-child)::after {\n border: 0 none;\n}\n\n:host(:last-child)::before {\n border-right: 1px solid var(--wje-border-color);\n border-radius: 0 var(--wje-orgchart-item-border-radius) 0 0;\n}\n\n:host(:first-child)::after {\n border-radius: var(--wje-orgchart-item-border-radius) 0 0 0;\n}";
9
9
  class OrgchartItem extends WJElement {
10
10
  /**
11
11
  * Creates an instance of OrgchartItem.
@@ -31,6 +31,11 @@ class OrgchartItem extends WJElement {
31
31
  setupAttributes() {
32
32
  this.isShadowRoot = "open";
33
33
  }
34
+ beforeDraw() {
35
+ if (this.parentElement && this.parentElement.tagName === "WJE-ORGCHART-GROUP") {
36
+ this.classList.add("parent-group");
37
+ }
38
+ }
34
39
  /**
35
40
  * Draws the component.
36
41
  *
@@ -44,8 +49,13 @@ class OrgchartItem extends WJElement {
44
49
  let native = document.createElement("div");
45
50
  native.setAttribute("part", "native");
46
51
  native.classList.add("orgchart-item");
52
+ let card = document.createElement("wje-card");
47
53
  let slot = document.createElement("slot");
48
- native.appendChild(slot);
54
+ let child = document.createElement("slot");
55
+ child.setAttribute("name", "child");
56
+ card.appendChild(slot);
57
+ native.appendChild(card);
58
+ native.appendChild(child);
49
59
  fragment.appendChild(native);
50
60
  return fragment;
51
61
  }
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  import WJElement from "./wje-element.js";
8
- const styles = '#orgChartView {\n margin: 10px\n}\n\ndiv#UpToManager,\ndiv.manager_undefined,\ndiv.manager_true {\n border: solid #dcdee0 2px;\n border-radius: 10px !important;\n}\n\ndiv#UpToManager,\n.topPerson .nestedPerson div.manager_undefined,\n.topPerson .nestedPerson div.manager_true {\n cursor: pointer;\n}\n\n.topPerson div.manager_undefined,\n.topPerson div.manager_true {\n cursor: default;\n}\n\nspan.link:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\n\nbody, table {\n font-size: 16px;\n color: #1D252C;\n}\n\nthead th {\n font-size: 20px;\n}\n\nthead td {\n font-size: 12px;\n font-style: italic;\n}\n\n.suppressPointerEvents * {\n pointer-events: none;\n}\n\n#UpToManager {\n width: 500px;\n font-weight: bold;\n font-size: 20px;\n background-color: #f3f3f4;\n min-height: 20px;\n}\n\n/*#UpToManager.survived_false {*/\n/* background-color: red;*/\n/*}*/\n\n\n.manager {\n margin: -10px;\n padding-top: 10px;\n height: 35px;\n}\n\n/* OrgChart CSS Base: Reference https://www.cssscript.com/responsive-hierarchical-organization-chart-pure-css/ */\nol.organizational-chart,\nol.organizational-chart ol,\nol.organizational-chart li,\nol.organizational-chart li > div {\n position: relative;\n}\n\nol.organizational-chart,\nol.organizational-chart ol {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\nol.organizational-chart {\n text-align: center;\n}\n\nol.organizational-chart ol {\n padding-top: 1em;\n}\n\n/* the connector line */\nol.organizational-chart ol:before,\nol.organizational-chart ol:after,\nol.organizational-chart li:before,\nol.organizational-chart li:after,\nol.organizational-chart > li > div:before,\nol.organizational-chart > li > div:after {\n /* all connectors */\n background-color: #b7a6aa;\n content: "";\n position: absolute;\n}\n\nol.organizational-chart ol > li {\n padding: 1em 0 0 1em;\n}\n\nol.organizational-chart > li ol:before {\n height: 1.2em;\n left: 50%;\n top: 0;\n width: 3px;\n}\n\nol.organizational-chart > li ol:after {\n /* horizontal connector */\n height: 3px;\n left: 3px;\n top: 1em;\n width: 50%;\n}\n\nol.organizational-chart > li ol > li:not(:last-of-type):before {\n height: 3px;\n left: 0;\n top: 2em;\n width: 1em;\n}\n\nol.organizational-chart > li ol > li:not(:last-of-type):after {\n height: 100%;\n left: 0;\n top: 0;\n width: 3px;\n}\n\nol.organizational-chart > li ol > li:last-of-type:before {\n height: 3px;\n left: 0;\n top: 2em;\n width: 1em;\n}\n\nol.organizational-chart > li ol > li:last-of-type:after {\n height: 2em;\n left: 0;\n top: 0;\n width: 3px;\n}\n\nol.organizational-chart li > div {\n background-color: #fff;\n border-radius: 3px;\n min-height: 2em;\n padding: 0.5em;\n}\n\n/*** PRIMARY ***/\nol.organizational-chart > li > div {\n\n background-color: #8dccad;\n margin-right: 1em;\n}\n\n\nol.organizational-chart > li > div + div {\n margin-top: 1em;\n}\n\nol.organizational-chart > li > div + div:after {\n right: -1em;\n top: -1em;\n width: 3px;\n}\n\n/*** SECONDARY ***/\nol.organizational-chart > li > ol:before {\n /* descender */\n left: inherit;\n}\n\nol.organizational-chart > li > ol:after {\n /* horizontal connector */\n left: 0;\n}\n\n\nol.organizational-chart > li > ol > li > div {\n background-color: #f3f3f4;\n}\n\n/* topPerson ol.organizational-chart */\n/*ol.organizational-chart > li.topPerson > div.survived_false {*/\n/* background-color: red;*/\n/*}*/\n/*\n ol.organizational-chart > li.topPerson > ol > li > div.survived_false,\n ol.organizational-chart > li.topPerson > ol > li > ol > li > div.survived_false,\n ol.organizational-chart > li.topPerson > ol > li > ol > li > ol > li > div.survived_false,\n ol.organizational-chart > li.topPerson > ol > li > ol > li > ol > li > ol > li > div.survived_false {\n background-color: red;\n }\n\n */\n/* topPerson ol.organizational-chart */\nol.organizational-chart > li > div.contractor_true,\nol.organizational-chart > li > ol > li > div.contractor_true,\nol.organizational-chart > li > ol > li > ol > li > div.contractor_true,\nol.organizational-chart > li > ol > li > ol > li > ol > li > div.contractor_true,\nol.organizational-chart > li > ol > li > ol > li > ol > li > ol > li > div.contractor_true {\n background-color: #c2c2c2;\n}\n\n/*** TERTIARY ***/\nol.organizational-chart > li > ol > li > ol > li > div {\n background-color: #f3f3f4;\n}\n\n/*** QUATERNARY ***/\nol.organizational-chart > li > ol > li > ol > li > ol > li > div {\n background-color: #f3f3f4;\n}\n\n/*** QUINARY ***/\nol.organizational-chart > li > ol > li > ol > li > ol > li > ol > li > div {\n background-color: #f3f3f4;\n}\n\n\n/* OrgChart CSS Response Screen: Reference https://www.cssscript.com/responsive-hierarchical-organization-chart-pure-css/ */\n\n@media only screen and (max-width: 64em) {\n .largePhoto {\n width: 100px !important;\n height: 100px !important;\n }\n}\n\n@media only screen and (min-width: 64em) {\n ol.organizational-chart {\n margin-left: -1em;\n margin-right: -1em;\n }\n\n ol.organizational-chart li div.topPersonDiv {\n width: 500px;\n }\n\n #UpToManager {\n width: 500px;\n }\n\n /* PRIMARY */\n ol.organizational-chart > li > div {\n display: inline-block;\n float: none;\n margin: 0 1em 1em 1em;\n vertical-align: bottom;\n }\n\n ol.organizational-chart > li > div:only-of-type {\n margin-bottom: 0;\n }\n\n ol.organizational-chart > li > div:before,\n ol.organizational-chart > li > div:after {\n bottom: -1em !important;\n top: inherit !important;\n }\n\n ol.organizational-chart > li > div:before {\n /* right side horizontal connector */\n height: 1em !important;\n left: 50% !important;\n width: 3px !important;\n }\n\n ol.organizational-chart > li > div:only-of-type:after {\n display: none;\n }\n\n ol.organizational-chart > li > div:first-of-type:not(:only-of-type):after,\n ol.organizational-chart > li > div:last-of-type:not(:only-of-type):after {\n bottom: -1em;\n height: 3px;\n width: calc(50% + 1em + 3px);\n }\n\n ol.organizational-chart > li > div:first-of-type:not(:only-of-type):after {\n left: calc(50% + 3px);\n }\n\n ol.organizational-chart > li > div:last-of-type:not(:only-of-type):after {\n left: calc(-1em - 3px);\n }\n\n ol.organizational-chart > li > div + div:not(:last-of-type):after {\n height: 3px;\n left: -2em;\n width: calc(100% + 4em);\n }\n\n /* SECONDARY */\n ol.organizational-chart > li > ol {\n display: flex;\n flex-wrap: nowrap;\n }\n\n ol.organizational-chart > li > ol:before,\n ol.organizational-chart > li > ol > li:before {\n height: 1em !important;\n left: 50% !important;\n top: 0 !important;\n width: 3px !important;\n }\n\n ol.organizational-chart > li > ol:after {\n display: none;\n }\n\n ol.organizational-chart > li > ol > li {\n flex-grow: 1;\n padding-left: 1em;\n padding-right: 1em;\n padding-top: 1em;\n }\n\n ol.organizational-chart > li > ol > li:only-of-type {\n padding-top: 0;\n }\n\n ol.organizational-chart > li > ol > li:only-of-type:before,\n ol.organizational-chart > li > ol > li:only-of-type:after {\n display: none;\n }\n\n ol.organizational-chart > li > ol > li:first-of-type:not(:only-of-type):after,\n ol.organizational-chart > li > ol > li:last-of-type:not(:only-of-type):after {\n height: 3px;\n top: 0;\n width: 50%;\n }\n\n ol.organizational-chart > li > ol > li:first-of-type:not(:only-of-type):after {\n left: 50%;\n }\n\n ol.organizational-chart > li > ol > li:last-of-type:not(:only-of-type):after {\n left: 0;\n }\n\n ol.organizational-chart > li > ol > li + li:not(:last-of-type):after {\n height: 3px;\n left: 0;\n top: 0;\n width: 100%;\n }\n}\n\nol.level_3,\nol.level_4,\nol.level_5 {\n display: none;\n}\n\n.center {\n text-align: center;\n}\n\n.left {\n text-align: left;\n}\n\n.largePhoto {\n margin: 1em 0 1em 2em;\n}\n\n\n.orgChartViewContainer {\n position: absolute;\n left: 20px;\n top: 110px;\n height: 600px;\n margin-top: -50px;\n overflow: hidden;\n}\n\n\nol.organizational-chart li div.topPersonDiv {\n padding: 2px;\n margin: 0;\n}\n\n\n.organizational-chart {\n margin-top: 150px;\n}\n\n#orgChartView {\n top: 85px;\n position: relative;\n}\n\n#searchArea {\n margin-top: 0;\n}\n\n.jobTitle,\nol.organizational-chart li div.nestedPersonDiv .jobTitle {\n font-size: 12px;\n font-style: italic;\n font-weight: normal;\n}\n\ndiv.nestedSearchDiv {\n padding: 2px;\n min-height: 53px;\n margin: 10px;\n width: 400px;\n background-color: white;\n cursor: pointer;\n}\n\nol.organizational-chart li div.nestedPersonDiv {\n padding: 2px;\n min-height: 53px;\n}\n\n.smallPhoto {\n float: left;\n border-radius: 50px;\n margin: 2px;\n}\n\n#searchArea {\n position: absolute;\n margin: 0 20px;\n background-color: #d881fe;\n z-index: 2;\n padding: 15px;\n border-radius: 20px;\n}\n\n#detailView {\n font-size: 90%;\n width: 90%;\n\n}\n\n#detailView table {\n font-size: 90%;\n\n\n}\n\n#detailView .largePhoto {\n height: 100px;\n width: 100px;\n}\n ';
8
+ const styles = "\n\n* {margin: 0; padding: 0;}\n\n:host {\n --wje-orgchart-height-line: 10px;\n --wje-orgchart-border-radius: var(--wje-border-radius-large);\n\n position: relative;\n .native-orgchart {\n padding-top: var(--wje-orgchart-height-line);\n display: flex;\n /*column-gap: .5rem;*/\n }\n &::before {\n content: '';\n position: absolute;\n top: 0;\n left: 50%;\n border-left: 1px solid var(--wje-border-color);\n width: 0;\n height: var(--wje-orgchart-height-line);\n }\n}\n\n";
9
9
  class Orgchart extends WJElement {
10
10
  /**
11
11
  * Creates an instance of Orgchart.
@@ -15,257 +15,6 @@ class Orgchart extends WJElement {
15
15
  constructor() {
16
16
  super();
17
17
  __publicField(this, "className", "Orgchart");
18
- __publicField(this, "getCookieValue", (name) => {
19
- var _a;
20
- return ((_a = document.cookie.match("(^|;)\\s*" + name + "\\s*=\\s*([^;]+)")) == null ? void 0 : _a.pop()) || "";
21
- });
22
- __publicField(this, "upTemplate", (person) => {
23
- console.log("PERSON:", person);
24
- return `<div class="manager">${person["Reports To Full Name"]}</div>`;
25
- });
26
- //
27
- // hide() {
28
- // document.getElementById('detailView').style.display = "none";
29
- // }
30
- //
31
- // showDetails(person_id) {
32
- // let oldMaxDepth = this.maxDepth;
33
- // this.maxDepth = 1;
34
- // document.getElementById('detailView').style.display = "block";
35
- // document.getElementById('detailView').innerHTML = this.render(this.ORGCHART_DATA[person_id], personTemplate);
36
- // this.maxDepth = oldMaxDepth;
37
- // }
38
- //
39
- // search(sText, sType) {
40
- // if (sText.length === 0) {
41
- // return;
42
- // }
43
- // const people = this.ORGCHART_DATA;
44
- // const searchString = new RegExp(sText, "i");
45
- // const oMatches = {};
46
- // switch (sType) {
47
- // case "name" :
48
- // searchName(searchString);
49
- // break;
50
- //
51
- // case "team" :
52
- // searchTeam(searchString);
53
- // break;
54
- //
55
- // case "title" :
56
- // searchJobTitle(searchString);
57
- // break;
58
- // }
59
- // showResults();
60
- //
61
- // function showResults() {
62
- // document.getElementById("searchResults").innerHTML = "";
63
- // for (let person in oMatches) {
64
- // document.getElementById("searchResults").innerHTML += this.render(oMatches [person], searchResultTemplate);
65
- // }
66
- // }
67
- //
68
- // function searchTeam(searchString) {
69
- // let iMatches = 0;
70
- //
71
- // for (const person_id in people) {
72
- // const person = people[person_id];
73
- // if (searchString.test(person["Department"]) || searchString.test(person["Division"]) || searchString.test(person["Teams"])) {
74
- // if (iMatches < 20) {
75
- // iMatches++;
76
- // oMatches[person_id] = person;
77
- // } else {
78
- // break;
79
- // }
80
- // }
81
- // }
82
- // return iMatches;
83
- // }
84
- //
85
- // function searchJobTitle() {
86
- // let iMatches = 0;
87
- // for (const person_id in people) {
88
- // const person = people[person_id];
89
- // if (searchString.test(person["Job Title"])) {
90
- // if (iMatches < 20) {
91
- // iMatches++;
92
- // oMatches[person_id] = person;
93
- // } else {
94
- // break;
95
- // }
96
- // }
97
- // }
98
- // return iMatches;
99
- // }
100
- //
101
- // function isInList(aList) {
102
- // let results = false;
103
- // if (aList) {
104
- // for (let i = 0; aList.length > i; i++) {
105
- //
106
- // const sListItem = aList[i];
107
- // if (searchString.test(sListItem)) {
108
- // results = true;
109
- // break;
110
- // }
111
- // }
112
- // }
113
- // return results;
114
- // }
115
- //
116
- // function searchName() {
117
- // let iMatches = 0;
118
- // for (const person_id in people) {
119
- // const person = people[person_id];
120
- // if (searchString.test(person["First name"]) ||
121
- // searchString.test(person["Preferred first name"]) ||
122
- // searchString.test(person["Last name"]) ||
123
- // searchString.test(person["id"]) ||
124
- // searchString.test((person["First name"] + " " + person["Last name"])) ||
125
- // searchString.test((person["Preferred first name"] + " " + person["Last name"]))
126
- // ) {
127
- // if (iMatches < 20) {
128
- // iMatches++;
129
- // oMatches[person_id] = person;
130
- // } else {
131
- // break;
132
- // }
133
- // }
134
- // }
135
- // return iMatches;
136
- // }
137
- // }
138
- //
139
- // showSearchResults() {
140
- // const oSearchResults = document.getElementById('searchResults');
141
- // oSearchResults.style.display = 'block';
142
- // if (event.keyCode === 13) {
143
- // oSearchResults.children[0].onmouseover(null);
144
- // this.hideSearchResults();
145
- // }
146
- // }
147
- //
148
- // previewPerson(person_id) {
149
- // const person = this.ORGCHART_DATA[person_id];
150
- // if (person) {
151
- // this.initializeLevels(person);
152
- // this.makeRoot(person.id, true);
153
- // this.hide();
154
- // }
155
- // }
156
- //
157
- // showSearch() {
158
- // this.native.getElementById('searchArea').style.display = 'block';
159
- // }
160
- //
161
- // hideSearchResults() {
162
- // document.getElementById('searchResults').style.display = 'none';
163
- // const newHash = "person=" + this.lastUnsavedId;
164
- // if (newHash && newHash !== "person=null" && ("#" + newHash) !== (document.location.hash)) {
165
- // this.lastHash = "#" + newHash;
166
- // document.location.hash = newHash;
167
- // }
168
- // setTimeout(function() {
169
- // document.getElementById('searchResults').style.display = 'none';
170
- // }, 10); // does this need to be async?
171
- // }
172
- //
173
- __publicField(this, "personTemplate", (person) => {
174
- this.htmlTemplate`
175
- <!--suppress ALL -->
176
- <li class="topPerson">
177
- <div id="${this.initializeLevels(person)}"
178
- class="topPersonDiv manager_${person.directs && person.directs.length > 0}
179
- survived_${this.isCurrentEmployee(person.id)}
180
- contractor_${this.isContractor(person.id)}
181
- ">
182
- <table border="0" cellpadding="0" cellspacing="0" width="100%">
183
- <thead>
184
- <tr>
185
- <th colspan="3" class="center">
186
- ${this.getFullName(person.id)}
187
- </th>
188
- </tr>
189
- <tr>
190
- <td colspan="3" class="center" class="center">
191
- ${person["Job Title"]}
192
- </td>
193
- </tr>
194
- </thead>
195
- <tbody>
196
-
197
- <tr>
198
- <td rowspan="3" width="1"><img src="${this.getPhotoUrl(person.id, "medium")}"
199
- class="largePhoto"
200
- height="200"
201
- width="200"
202
- alt="a photograph of ${this.getFullName(person.id)}" onerror="this.hideImage(this)"/>
203
- </td>
204
- <td rowspan="3" width="5%">&nbsp;</td>
205
- </tr>
206
-
207
- <tr>
208
- <td>
209
- </td>
210
- </tr>
211
- <tr>
212
- <td class="left">
213
-
214
- <div title="${person["Start date"]}">
215
- Higher Standards for
216
- </div>
217
- ${this.getRelativeTime(person["Start date"])}
218
-
219
- <div>Department:
220
- ${person["Department"]}
221
- </div>
222
-
223
- ${person["Division"] ? `
224
- <div>Division:
225
- ${person["Division"]}
226
- </div>` : ``}
227
-
228
-
229
-
230
- <div>Email:
231
- <a href="mailto:${person.Email}" target="_blank" rel="noreferrer">${person.Email}</a>
232
- </div>
233
- ${person["Mobile phone"] ? `
234
- <div>Phone:
235
- ${person["Mobile phone"]}
236
- </div>` : ``}
237
- <div>Location:
238
- ${person["Office Locations"]}
239
- </div>
240
-
241
-
242
-
243
- <div>&nbsp;</div>
244
-
245
-
246
- <!-- <div>Email</div>-->
247
- <!-- <div>Phone</div>-->
248
- <!-- <div>Employment Status</div>-->
249
- <!-- <div>End Date</div>-->
250
- <!-- <div>GitHub</div>-->
251
- <!-- <div>Jira</div>-->
252
- <!-- <div>OpsGenie</div>-->
253
- <!-- <div>Blameless</div>-->
254
-
255
-
256
- </td>
257
-
258
- </tr>
259
- </tbody>
260
-
261
-
262
- </table>
263
-
264
-
265
- </div>
266
- ${person.directs && person.level < this.maxDepth ? `<ol class="level_${person.level}"> ${this.orgchartRender(person.directs.map((person_id) => this.ORGCHART_DATA[person_id]), this.nestedPersonTemplate)} </ol>` : ""}
267
- </li>`;
268
- });
269
18
  }
270
19
  /**
271
20
  * Returns the CSS styles for the component.
@@ -294,42 +43,9 @@ class Orgchart extends WJElement {
294
43
  let fragment = document.createDocumentFragment();
295
44
  let native = document.createElement("div");
296
45
  native.setAttribute("part", "native");
297
- native.classList.add("orgchart");
298
- native.innerHTML = `<div id="searchArea">
299
- <form name="SearchForm">
300
- <label>
301
- Search:
302
- <input type="text" placeholder="Search" name="searchText" id="searchText"></label>
303
- <label>For:
304
- <select name="type">
305
- <option value="name" selected="selected">Name</option>
306
- <option value="team">Team</option>
307
- <option value="title">Job Title</option>
308
- </select>
309
- </label>
310
- <button >Search</button>
311
- <div id="searchResults">
312
- <div></div>
313
- </div>
314
- </form>
315
- </div>
316
- <div id="orgChartView">
317
- <div class="orgChartViewContainer">
318
- <div id="detailView"></div>
319
- </div>
320
- <ol class="organizational-chart">
321
- <li>
322
- <div id="UpToManager"></div>
323
- <ol class="organizational-chart" id="root">
324
- <li>
325
- <div>
326
- <h1>Org Chart</h1>
327
- </div>
328
- </li>
329
- </ol>
330
- </li>
331
- </ol>
332
- </div>`;
46
+ native.classList.add("native-orgchart");
47
+ let slot = document.createElement("slot");
48
+ native.appendChild(slot);
333
49
  fragment.appendChild(native);
334
50
  this.native = native;
335
51
  return fragment;
@@ -343,270 +59,7 @@ class Orgchart extends WJElement {
343
59
  * @returns {DocumentFragment}
344
60
  */
345
61
  afterDraw(context, store, params) {
346
- this.orgchartInit();
347
- this.maxDepth = 3;
348
- this.lastUnsavedId = null;
349
- this.lastHash = document.location.hash;
350
62
  }
351
- // submitForm(logData) {
352
- // const sLogData = this.encode(logData);
353
- // const sRemoteUrl = "https://acklenx.com/orgchart.png?" + sLogData;
354
- // document.getElementById("visitor").src = sRemoteUrl;
355
- // }
356
- //
357
- // encode(data) {
358
- // return Object.keys(data).map((key) => encodeURIComponent(key) + "=" + encodeURIComponent(data[key])).join("&");
359
- // }
360
- orgchartInit() {
361
- this.loadExternalDataset();
362
- this.loadPerson();
363
- this.native.querySelector("#searchText").focus();
364
- }
365
- loadExternalDataset() {
366
- new URLSearchParams(window.location.search);
367
- let sExternalDataUrl = "/demo/assets/data/orgchart.json";
368
- {
369
- var data = this.getData(sExternalDataUrl);
370
- this.ORGCHART_DATA = JSON.parse(data);
371
- }
372
- }
373
- getData(sUrl = "demo/assets/data/orgchart.json", fCallback) {
374
- let responseBody = "";
375
- const xhttp = new XMLHttpRequest();
376
- xhttp.onreadystatechange = function() {
377
- if (this.readyState == 4 && this.status == 200) {
378
- responseBody = xhttp.responseText;
379
- }
380
- };
381
- xhttp.open("GET", sUrl, false);
382
- xhttp.send();
383
- return responseBody;
384
- }
385
- getVisitorId() {
386
- let visitorId = this.getCookieValue("visitor");
387
- if (!visitorId) {
388
- visitorId = "visitor_" + Math.floor(Math.random() * 1e7);
389
- document.cookie = "visitor=" + visitorId + "; expires=Fri, 31 Dec 9999 23:59:59 GMT; SameSite=Strict; Secure";
390
- }
391
- return visitorId;
392
- }
393
- htmlTemplate(literals, ...vars) {
394
- let raw = literals.raw, result = "", i = 1, len = arguments.length, str, variable;
395
- while (i < len) {
396
- str = raw[i - 1];
397
- variable = vars[i - 1];
398
- result += str + variable;
399
- i++;
400
- }
401
- result += raw[raw.length - 1];
402
- return result;
403
- }
404
- orgchartRender(data, template) {
405
- if (!template) {
406
- return;
407
- }
408
- if (typeof data === "string") {
409
- return template(data);
410
- } else if (typeof data === "object" && !Array.isArray(data)) {
411
- console.log("DATA:", data, template(data));
412
- return template(data);
413
- } else if (Array.isArray(data)) {
414
- return data.map((item) => template(item)).join("");
415
- }
416
- }
417
- loadPerson(person_id, removeFromHistory) {
418
- this.native.querySelector("#orgChartView").style.display = "block";
419
- if (!person_id || !this.ORGCHART_DATA[person_id]) {
420
- person_id = this.getStartingPersonFromUrl();
421
- if (!person_id) {
422
- person_id = Object.keys(this.ORGCHART_DATA)[0];
423
- }
424
- }
425
- if (!removeFromHistory) {
426
- document.location.hash = "person=" + person_id;
427
- this.lastUnsavedId = null;
428
- } else {
429
- this.lastUnsavedId = person_id;
430
- }
431
- document.title = "OrgChart:" + this.getFullName(person_id);
432
- this.native.querySelector("#root").innerHTML = this.personTemplate(this.ORGCHART_DATA[person_id]);
433
- this.native.querySelector("#UpToManager").innerHTML = this.orgchartRender(this.ORGCHART_DATA[person_id], this.upTemplate);
434
- this.setUpToManagerColor(this.ORGCHART_DATA[person_id]);
435
- this.lastHash = document.location.hash;
436
- this.context.querySelector(".manager").addEventListener("click", () => {
437
- this.makeRoot(person_id);
438
- });
439
- }
440
- setUpToManagerColor(person) {
441
- const bIsCurrentEmployee = this.isCurrentEmployee(person["Reports To ID"]);
442
- this.native.querySelector("#UpToManager").classList.remove("survived_true");
443
- this.native.querySelector("#UpToManager").classList.remove("survived_false");
444
- this.native.querySelector("#UpToManager").classList.add("survived_" + bIsCurrentEmployee);
445
- }
446
- getStartingPersonFromUrl() {
447
- let startingPerson = null;
448
- let sUrl = document.location.hash;
449
- let person_id = sUrl.match(/person=([^&]*)/gi);
450
- if (person_id && person_id[0]) {
451
- person_id = person_id[0].replace("person=", "");
452
- if (this.ORGCHART_DATA[person_id]) {
453
- startingPerson = person_id;
454
- }
455
- }
456
- return startingPerson;
457
- }
458
- //
459
- // hideImage(oImage) {
460
- // oImage.style.display = 'none';
461
- // }
462
- initializeLevels(person) {
463
- if (!person.level) {
464
- person.level = 1;
465
- }
466
- if (person.directs) {
467
- for (let i = 0; person.directs.length > i; i++) {
468
- const directReport = this.ORGCHART_DATA[person.directs[i]];
469
- directReport.level = person.level + 1;
470
- }
471
- }
472
- return "";
473
- }
474
- makeRoot(person_id, removeFromHistory) {
475
- if (person_id) {
476
- let root = this.ORGCHART_DATA[person_id];
477
- if (root.level === 1) {
478
- root = this.ORGCHART_DATA[this.ORGCHART_DATA[person_id].id];
479
- if (!root) {
480
- root = this.ORGCHART_DATA[person_id];
481
- }
482
- }
483
- root.level = null;
484
- this.loadPerson(person_id, removeFromHistory);
485
- document.body.scrollTop = 0;
486
- document.documentElement.scrollTop = 0;
487
- }
488
- }
489
- getFullName(person_id) {
490
- const person = this.ORGCHART_DATA[person_id];
491
- return (person["Preferred first name"] || person["First name"] || person.name) + " " + person["Last name"];
492
- }
493
- getPhotoUrl(person_id, sSizePath) {
494
- sSizePath = "";
495
- return "./photos/" + sSizePath + person_id + ".jpg";
496
- }
497
- isCurrentEmployee(person_id) {
498
- let isCurrentEmployee = true;
499
- const person = this.ORGCHART_DATA[person_id];
500
- if (person) {
501
- const endDate = person["End date"];
502
- if (endDate) {
503
- isCurrentEmployee = false;
504
- }
505
- }
506
- return isCurrentEmployee;
507
- }
508
- isContractor(person_id) {
509
- let isCurrentEmployee = false;
510
- const person = this.ORGCHART_DATA[person_id];
511
- const type = person["Employee type"];
512
- if (type === "Contractor") {
513
- isCurrentEmployee = true;
514
- }
515
- return isCurrentEmployee;
516
- }
517
- // getRole(person) {
518
- // let sRole = "";
519
- // let sTeam = person["Teams"];
520
- // if (person.directs && person.directs.length > 0 && sTeam && sTeam !== "") {
521
- // if (sTeam === "CTO Team") {
522
- // sRole = person["Job Title"].replace(/^VP,? /, "");
523
- // } else {
524
- // sRole = sTeam;
525
- // }
526
- // } else {
527
- // sRole += person["Job Title"];
528
- // }
529
- // return sRole;
530
- // }
531
- getRelativeTime(date) {
532
- const startDate = new Date(date);
533
- const ago = (/* @__PURE__ */ new Date() - startDate) / 26298e5;
534
- let yearsAgo = ago / 12;
535
- let sYearsAgo = "";
536
- if (yearsAgo >= 1) {
537
- sYearsAgo = Math.floor(yearsAgo) + " Year";
538
- if (sYearsAgo !== "1 Year") {
539
- sYearsAgo += "s";
540
- }
541
- let monthsAgo = Math.floor(ago % 12) + " month";
542
- if (monthsAgo !== "1 month") {
543
- monthsAgo += "s";
544
- }
545
- sYearsAgo += " " + monthsAgo;
546
- } else {
547
- let monthsAgo = ago % 12;
548
- let sMonthsAgo = Math.floor(monthsAgo) + " month";
549
- if (monthsAgo >= 1) {
550
- if (sMonthsAgo !== "1 month") {
551
- sMonthsAgo += "s";
552
- }
553
- sYearsAgo += sMonthsAgo;
554
- } else {
555
- let daysAgo = (/* @__PURE__ */ new Date() - startDate) / 864e5;
556
- let sDaysAgo = Math.ceil(daysAgo) + " day";
557
- if (sDaysAgo !== "1 day") {
558
- sDaysAgo += "s";
559
- }
560
- sYearsAgo += sDaysAgo;
561
- }
562
- }
563
- return sYearsAgo;
564
- }
565
- // nestedPersonTemplate = ( person ) => {
566
- // htmlTemplate`
567
- // <!--suppress ALL -->
568
- // <li class="nestedPerson">
569
- // <div onclick="${this.initializeLevels( person ) };this.makeRoot( '${ person.id }' ); this.hide();"
570
- // onmouseover="this.showDetails( '${ person.id }' ); this.hideSearchResults();"
571
- // onmouseout="this.hide()"
572
- // class="manager_${ person.directs && person.directs.length > 0 }
573
- // survived_${this.isCurrentEmployee( person.id ) }
574
- // contractor_${this.isContractor( person.id ) }
575
- // suppressPointerEvents nestedPersonDiv">
576
- //
577
- // <img src="${this.getPhotoUrl( person.id, '50x50' ) }"
578
- // alt="Small photograph of ${this.getFullName( person.id ) }"
579
- // class="smallPhoto"
580
- // height="50" width="50"
581
- // onerror="this.hideImage(this)"/>
582
- //
583
- // <strong>${this.getFullName( person.id ) }</strong>
584
- // <br/>
585
- // <span class="jobTitle" title="${ person[ 'Job Title' ] }">${this.getRole( person ) }</span>
586
- //
587
- // </div>
588
- // ${ person.directs && person.level < this.maxDepth ? `<ol class="level_${ person.level }"> ${this.render( person.directs.map( person_id => this.ORGCHART_DATA[ person_id ] ), this.nestedPersonTemplate ) } </ol>` : "" }
589
- // </li>`;
590
- // }
591
- //
592
- // searchResultTemplate = ( person ) => {
593
- // htmlTemplate`
594
- // <!--suppress HtmlDeprecatedAttribute -->
595
- // <div onmouseover="this.previewPerson( '${ person.id }' )"
596
- // class="nestedSearchDiv manager_${ person.directs && person.directs.length > 0 } suppressPointerEvents"
597
- // onclick="this.hideSearchResults();">
598
- //
599
- // <img src="${this.getPhotoUrl( person.id, 'thumbnail' ) }"
600
- // alt="Small photograph of ${this.getFullName( person.id ) }"
601
- // class="smallPhoto"
602
- // height="50" width="50" onerror="this.hideImage(this)" />
603
- //
604
- // <strong>${this.getFullName( person.id ) }</strong>
605
- // <br/>
606
- // <span class="jobTitle" >${ person[ "Job Title" ] }</span>
607
- // </div>
608
- // `;
609
- // }
610
63
  }
611
64
  Orgchart.define("wje-orgchart", Orgchart);
612
65
  export {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "wj-elements",
3
3
  "description": "WebJET Elements is a modern set of user interface tools harnessing the power of web components designed to simplify web application development.",
4
- "version": "0.1.70",
4
+ "version": "0.1.72",
5
5
  "homepage": "https://github.com/lencys/wj-elements",
6
6
  "author": "Lukáš Ondrejček <lukas.ondrejcek@gmail.com>",
7
7
  "license": "MIT",
@@ -1,4 +0,0 @@
1
- import { default as default2 } from "./wje-orgchart-item.js";
2
- export {
3
- default2 as default
4
- };