@mjhls/mjh-framework 1.0.550 → 1.0.551

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- # mjh-framework v. 1.0.550
2
+ # mjh-framework v. 1.0.551
3
3
 
4
4
  > Foundation Framework
5
5
 
@@ -22,11 +22,12 @@ require('./_set-species-4458e975.js');
22
22
  require('./beam-d22818d3.js');
23
23
  var AdSlot = require('./AdSlot.js');
24
24
 
25
+ // removed static slotID ,because defining static slotID is restricting AD to render only once.
25
26
  var AD300x250 = function AD300x250(_ref) {
26
27
  var networkID = _ref.networkID,
27
28
  adUnit = _ref.adUnit,
28
29
  _ref$slotId = _ref.slotId,
29
- slotId = _ref$slotId === undefined ? 'AD300x250' : _ref$slotId,
30
+ slotId = _ref$slotId === undefined ? '' : _ref$slotId,
30
31
  _ref$targeting = _ref.targeting,
31
32
  targeting = _ref$targeting === undefined ? {} : _ref$targeting,
32
33
  _ref$pos = _ref.pos,
@@ -53,11 +54,12 @@ var AD300x250 = function AD300x250(_ref) {
53
54
  var mobileSizes = [[300, 250], [300, 100]];
54
55
 
55
56
  // Function to collapse ad
56
- var collapseAd = function collapseAd() {
57
- var parent = document.getElementById('AD300x250');
58
- var parentMedia = parent && parent.closest('.media');
59
- // removing the style of the parent div for collpased ad
60
- if (parentMedia) parentMedia.style = null;
57
+ var collapseAd = function collapseAd(slotID) {
58
+ var parent = document.getElementById(slotID);
59
+ // finding the parent wrapper div
60
+ var parentWrapper = parent && parent.closest('.AD300x250');
61
+ // collapsing the parent wrapper div
62
+ if (parentWrapper) parentWrapper.style.display = 'none';
61
63
  parent.style.height = '0%';
62
64
  parent.style.width = '0%';
63
65
  parent.style.display = 'none';
@@ -66,7 +68,8 @@ var AD300x250 = function AD300x250(_ref) {
66
68
  // CallBack function to check if ad has got creative or not.
67
69
  var checkIsAdFound = function checkIsAdFound(isFound, adData) {
68
70
  if (isFound) {
69
- var parent = document.getElementById('AD300x250');
71
+ // Dynamically fetching parent from slotID to display or collapse.
72
+ var parent = document.getElementById(adData.slotId);
70
73
  parent.style.display = 'block';
71
74
  var adSizes = [[1, 1]];
72
75
  // Collapsing ad if the as size is [1,1]
@@ -76,13 +79,14 @@ var AD300x250 = function AD300x250(_ref) {
76
79
  };
77
80
 
78
81
  if (adSizes.some(checkAdSize)) {
79
- collapseAd();
82
+ // passing slotID to collape
83
+ collapseAd(adData.slotId);
80
84
  parent.style.display = 'none';
81
85
  }
82
86
  }
83
87
  } else {
84
88
  // collapsing ad if no creative is found
85
- collapseAd();
89
+ collapseAd(adData.slotId);
86
90
  }
87
91
  };
88
92
 
@@ -22,11 +22,12 @@ require('./_set-species-4458e975.js');
22
22
  require('./beam-d22818d3.js');
23
23
  var AdSlot = require('./AdSlot.js');
24
24
 
25
+ // removed static slotID ,because defining static slotID is restricting AD to render only once.
25
26
  var AD300x250x600 = function AD300x250x600(_ref) {
26
27
  var networkID = _ref.networkID,
27
28
  adUnit = _ref.adUnit,
28
29
  _ref$slotId = _ref.slotId,
29
- slotId = _ref$slotId === undefined ? 'AD300x250x600' : _ref$slotId,
30
+ slotId = _ref$slotId === undefined ? '' : _ref$slotId,
30
31
  _ref$targeting = _ref.targeting,
31
32
  targeting = _ref$targeting === undefined ? {} : _ref$targeting,
32
33
  _ref$pos = _ref.pos,
@@ -67,11 +68,12 @@ var AD300x250x600 = function AD300x250x600(_ref) {
67
68
  }];
68
69
 
69
70
  // Function to collapse ad
70
- var collapseAd = function collapseAd() {
71
- var parent = document.getElementById('AD300x250x600');
72
- var parentMedia = parent && parent.closest('.media');
73
- // removing the style of the parent div for collpased ad
74
- if (parentMedia) parentMedia.style = null;
71
+ var collapseAd = function collapseAd(slotID) {
72
+ var parent = document.getElementById(slotID);
73
+ // finding the parent wrapper div
74
+ var parentWrapper = parent && parent.closest('.AD300x250');
75
+ // collapsing the parent wrapper div
76
+ if (parentWrapper) parentWrapper.style.display = 'none';
75
77
  parent.style.height = '0%';
76
78
  parent.style.width = '0%';
77
79
  parent.style.display = 'none';
@@ -80,7 +82,8 @@ var AD300x250x600 = function AD300x250x600(_ref) {
80
82
  // CallBack function to check if ad has got creative or not.
81
83
  var checkIsAdFound = function checkIsAdFound(isFound, adData) {
82
84
  if (isFound) {
83
- var parent = document.getElementById('AD300x250x600');
85
+ // Dynamically fetching parent from slotID to display or collapse.
86
+ var parent = document.getElementById(adData.slotId);
84
87
  parent.style.display = 'block';
85
88
  var adSizes = [[1, 1]];
86
89
  // Collapsing ad if the as size is [1,1]
@@ -90,20 +93,21 @@ var AD300x250x600 = function AD300x250x600(_ref) {
90
93
  };
91
94
 
92
95
  if (adSizes.some(checkAdSize)) {
93
- collapseAd();
96
+ // passing slotID to collape
97
+ collapseAd(adData.slotId);
94
98
  parent.style.display = 'none';
95
99
  }
96
100
  }
97
101
  } else {
98
102
  // collapsing ad if no creative is found
99
- collapseAd();
103
+ collapseAd(adData.slotId);
100
104
  }
101
105
  };
102
106
 
103
107
  return React__default.createElement(AdSlot, {
104
108
  networkID: networkID,
105
109
  adUnit: adUnit,
106
- className: '',
110
+ className: 'AD300x250',
107
111
  slotId: slotId,
108
112
  targeting: adTargeting
109
113
  // passing all possible sizes.
@@ -82,8 +82,9 @@ var DFPAdSlot = function DFPAdSlot(_ref) {
82
82
  Segment.Segment.adViewed(eventData.domain, eventData.advertiserId, eventData.campID, eventData.cID, eventData.lID, eventData.adSize, eventData.isEmpty, eventData.sourceAgnosticCreativeId, eventData.sourceAgnosticLineItemId);
83
83
  },
84
84
  onSlotRender: function onSlotRender(eventData) {
85
- if (eventData && eventData.slotId && eventData.slotId === slotId && checkIsAdFound) {
86
- if (eventData.event && eventData.event.creativeId == null) {
85
+ // Updating the condition to remove the dependency on static slotId.
86
+ if (eventData && eventData.event && checkIsAdFound) {
87
+ if (eventData.event.creativeId == null) {
87
88
  checkIsAdFound(false, eventData);
88
89
  } else {
89
90
  checkIsAdFound(true, eventData);
@@ -42,7 +42,7 @@ require('./asyncToGenerator-8e707718.js');
42
42
  require('./_set-species-4458e975.js');
43
43
  require('./beam-d22818d3.js');
44
44
  require('./AdSlot.js');
45
- var ADInfeed = require('./ADInfeed-3404200f.js');
45
+ var ADInfeed = require('./ADInfeed-17a378db.js');
46
46
 
47
47
  var DeckContent = function (_React$Component) {
48
48
  inherits._inherits(DeckContent, _React$Component);
@@ -42,9 +42,9 @@ require('./asyncToGenerator-8e707718.js');
42
42
  require('./_set-species-4458e975.js');
43
43
  require('./beam-d22818d3.js');
44
44
  require('./AdSlot.js');
45
- var ADInfeed = require('./ADInfeed-3404200f.js');
45
+ var ADInfeed = require('./ADInfeed-17a378db.js');
46
46
  var lodash = require('./lodash-fc2922d0.js');
47
- var ADlgInfeed = require('./ADlgInfeed-2611e1a9.js');
47
+ var ADlgInfeed = require('./ADlgInfeed-070d911c.js');
48
48
  require('./_arrayMap-3b4a0f75.js');
49
49
  var get = require('./get-5dfcdc33.js');
50
50
  require('./AD.js');
@@ -34,9 +34,9 @@ require('./asyncToGenerator-8e707718.js');
34
34
  require('./_set-species-4458e975.js');
35
35
  require('./beam-d22818d3.js');
36
36
  require('./AdSlot.js');
37
- require('./ADInfeed-3404200f.js');
37
+ require('./ADInfeed-17a378db.js');
38
38
  require('./lodash-fc2922d0.js');
39
- require('./ADlgInfeed-2611e1a9.js');
39
+ require('./ADlgInfeed-070d911c.js');
40
40
  require('./AuthorComponent-cb8b8128.js');
41
41
  require('react-bootstrap');
42
42
  var QueueDeckExpanded = require('./QueueDeckExpanded.js');
@@ -40,9 +40,9 @@ var asyncToGenerator = require('./asyncToGenerator-8e707718.js');
40
40
  require('./_set-species-4458e975.js');
41
41
  require('./beam-d22818d3.js');
42
42
  require('./AdSlot.js');
43
- var ADInfeed = require('./ADInfeed-3404200f.js');
43
+ var ADInfeed = require('./ADInfeed-17a378db.js');
44
44
  var lodash = require('./lodash-fc2922d0.js');
45
- var ADlgInfeed = require('./ADlgInfeed-2611e1a9.js');
45
+ var ADlgInfeed = require('./ADlgInfeed-070d911c.js');
46
46
 
47
47
  var MasterDeck = function (_React$Component) {
48
48
  inherits._inherits(MasterDeck, _React$Component);
@@ -36,9 +36,9 @@ var asyncToGenerator = require('./asyncToGenerator-8e707718.js');
36
36
  require('./_set-species-4458e975.js');
37
37
  require('./beam-d22818d3.js');
38
38
  require('./AdSlot.js');
39
- require('./ADInfeed-3404200f.js');
39
+ require('./ADInfeed-17a378db.js');
40
40
  require('./lodash-fc2922d0.js');
41
- require('./ADlgInfeed-2611e1a9.js');
41
+ require('./ADlgInfeed-070d911c.js');
42
42
  require('./AuthorComponent-cb8b8128.js');
43
43
  var BlockContent = require('./BlockContent-f942392e.js');
44
44
  require('./smoothscroll-95231a70.js');
@@ -35,9 +35,9 @@ require('./asyncToGenerator-8e707718.js');
35
35
  require('./_set-species-4458e975.js');
36
36
  require('./beam-d22818d3.js');
37
37
  require('./AdSlot.js');
38
- var ADInfeed = require('./ADInfeed-3404200f.js');
38
+ var ADInfeed = require('./ADInfeed-17a378db.js');
39
39
  var lodash = require('./lodash-fc2922d0.js');
40
- var ADlgInfeed = require('./ADlgInfeed-2611e1a9.js');
40
+ var ADlgInfeed = require('./ADlgInfeed-070d911c.js');
41
41
  var AuthorComponent = require('./AuthorComponent-cb8b8128.js');
42
42
  var reactBootstrap = require('react-bootstrap');
43
43
 
package/dist/cjs/index.js CHANGED
@@ -40,10 +40,10 @@ require('./asyncToGenerator-8e707718.js');
40
40
  require('./_set-species-4458e975.js');
41
41
  var Segment = require('./beam-d22818d3.js');
42
42
  var AdSlot = require('./AdSlot.js');
43
- require('./ADInfeed-3404200f.js');
43
+ require('./ADInfeed-17a378db.js');
44
44
  var DeckContent = require('./DeckContent.js');
45
45
  require('./lodash-fc2922d0.js');
46
- require('./ADlgInfeed-2611e1a9.js');
46
+ require('./ADlgInfeed-070d911c.js');
47
47
  require('./_arrayMap-3b4a0f75.js');
48
48
  require('./get-5dfcdc33.js');
49
49
  var AD = require('./AD.js');
@@ -17,11 +17,12 @@ import './_set-species-6f64f1c1.js';
17
17
  import './beam-a25bd8fd.js';
18
18
  import DFPAdSlot from './AdSlot.js';
19
19
 
20
+ // removed static slotID ,because defining static slotID is restricting AD to render only once.
20
21
  var AD300x250 = function AD300x250(_ref) {
21
22
  var networkID = _ref.networkID,
22
23
  adUnit = _ref.adUnit,
23
24
  _ref$slotId = _ref.slotId,
24
- slotId = _ref$slotId === undefined ? 'AD300x250' : _ref$slotId,
25
+ slotId = _ref$slotId === undefined ? '' : _ref$slotId,
25
26
  _ref$targeting = _ref.targeting,
26
27
  targeting = _ref$targeting === undefined ? {} : _ref$targeting,
27
28
  _ref$pos = _ref.pos,
@@ -48,11 +49,12 @@ var AD300x250 = function AD300x250(_ref) {
48
49
  var mobileSizes = [[300, 250], [300, 100]];
49
50
 
50
51
  // Function to collapse ad
51
- var collapseAd = function collapseAd() {
52
- var parent = document.getElementById('AD300x250');
53
- var parentMedia = parent && parent.closest('.media');
54
- // removing the style of the parent div for collpased ad
55
- if (parentMedia) parentMedia.style = null;
52
+ var collapseAd = function collapseAd(slotID) {
53
+ var parent = document.getElementById(slotID);
54
+ // finding the parent wrapper div
55
+ var parentWrapper = parent && parent.closest('.AD300x250');
56
+ // collapsing the parent wrapper div
57
+ if (parentWrapper) parentWrapper.style.display = 'none';
56
58
  parent.style.height = '0%';
57
59
  parent.style.width = '0%';
58
60
  parent.style.display = 'none';
@@ -61,7 +63,8 @@ var AD300x250 = function AD300x250(_ref) {
61
63
  // CallBack function to check if ad has got creative or not.
62
64
  var checkIsAdFound = function checkIsAdFound(isFound, adData) {
63
65
  if (isFound) {
64
- var parent = document.getElementById('AD300x250');
66
+ // Dynamically fetching parent from slotID to display or collapse.
67
+ var parent = document.getElementById(adData.slotId);
65
68
  parent.style.display = 'block';
66
69
  var adSizes = [[1, 1]];
67
70
  // Collapsing ad if the as size is [1,1]
@@ -71,13 +74,14 @@ var AD300x250 = function AD300x250(_ref) {
71
74
  };
72
75
 
73
76
  if (adSizes.some(checkAdSize)) {
74
- collapseAd();
77
+ // passing slotID to collape
78
+ collapseAd(adData.slotId);
75
79
  parent.style.display = 'none';
76
80
  }
77
81
  }
78
82
  } else {
79
83
  // collapsing ad if no creative is found
80
- collapseAd();
84
+ collapseAd(adData.slotId);
81
85
  }
82
86
  };
83
87
 
@@ -17,11 +17,12 @@ import './_set-species-6f64f1c1.js';
17
17
  import './beam-a25bd8fd.js';
18
18
  import DFPAdSlot from './AdSlot.js';
19
19
 
20
+ // removed static slotID ,because defining static slotID is restricting AD to render only once.
20
21
  var AD300x250x600 = function AD300x250x600(_ref) {
21
22
  var networkID = _ref.networkID,
22
23
  adUnit = _ref.adUnit,
23
24
  _ref$slotId = _ref.slotId,
24
- slotId = _ref$slotId === undefined ? 'AD300x250x600' : _ref$slotId,
25
+ slotId = _ref$slotId === undefined ? '' : _ref$slotId,
25
26
  _ref$targeting = _ref.targeting,
26
27
  targeting = _ref$targeting === undefined ? {} : _ref$targeting,
27
28
  _ref$pos = _ref.pos,
@@ -62,11 +63,12 @@ var AD300x250x600 = function AD300x250x600(_ref) {
62
63
  }];
63
64
 
64
65
  // Function to collapse ad
65
- var collapseAd = function collapseAd() {
66
- var parent = document.getElementById('AD300x250x600');
67
- var parentMedia = parent && parent.closest('.media');
68
- // removing the style of the parent div for collpased ad
69
- if (parentMedia) parentMedia.style = null;
66
+ var collapseAd = function collapseAd(slotID) {
67
+ var parent = document.getElementById(slotID);
68
+ // finding the parent wrapper div
69
+ var parentWrapper = parent && parent.closest('.AD300x250');
70
+ // collapsing the parent wrapper div
71
+ if (parentWrapper) parentWrapper.style.display = 'none';
70
72
  parent.style.height = '0%';
71
73
  parent.style.width = '0%';
72
74
  parent.style.display = 'none';
@@ -75,7 +77,8 @@ var AD300x250x600 = function AD300x250x600(_ref) {
75
77
  // CallBack function to check if ad has got creative or not.
76
78
  var checkIsAdFound = function checkIsAdFound(isFound, adData) {
77
79
  if (isFound) {
78
- var parent = document.getElementById('AD300x250x600');
80
+ // Dynamically fetching parent from slotID to display or collapse.
81
+ var parent = document.getElementById(adData.slotId);
79
82
  parent.style.display = 'block';
80
83
  var adSizes = [[1, 1]];
81
84
  // Collapsing ad if the as size is [1,1]
@@ -85,20 +88,21 @@ var AD300x250x600 = function AD300x250x600(_ref) {
85
88
  };
86
89
 
87
90
  if (adSizes.some(checkAdSize)) {
88
- collapseAd();
91
+ // passing slotID to collape
92
+ collapseAd(adData.slotId);
89
93
  parent.style.display = 'none';
90
94
  }
91
95
  }
92
96
  } else {
93
97
  // collapsing ad if no creative is found
94
- collapseAd();
98
+ collapseAd(adData.slotId);
95
99
  }
96
100
  };
97
101
 
98
102
  return React__default.createElement(DFPAdSlot, {
99
103
  networkID: networkID,
100
104
  adUnit: adUnit,
101
- className: '',
105
+ className: 'AD300x250',
102
106
  slotId: slotId,
103
107
  targeting: adTargeting
104
108
  // passing all possible sizes.
@@ -77,8 +77,9 @@ var DFPAdSlot = function DFPAdSlot(_ref) {
77
77
  Segment.adViewed(eventData.domain, eventData.advertiserId, eventData.campID, eventData.cID, eventData.lID, eventData.adSize, eventData.isEmpty, eventData.sourceAgnosticCreativeId, eventData.sourceAgnosticLineItemId);
78
78
  },
79
79
  onSlotRender: function onSlotRender(eventData) {
80
- if (eventData && eventData.slotId && eventData.slotId === slotId && checkIsAdFound) {
81
- if (eventData.event && eventData.event.creativeId == null) {
80
+ // Updating the condition to remove the dependency on static slotId.
81
+ if (eventData && eventData.event && checkIsAdFound) {
82
+ if (eventData.event.creativeId == null) {
82
83
  checkIsAdFound(false, eventData);
83
84
  } else {
84
85
  checkIsAdFound(true, eventData);
@@ -36,7 +36,7 @@ import './asyncToGenerator-0379e924.js';
36
36
  import './_set-species-6f64f1c1.js';
37
37
  import './beam-a25bd8fd.js';
38
38
  import './AdSlot.js';
39
- import { A as ADInfeed } from './ADInfeed-27674dc6.js';
39
+ import { A as ADInfeed } from './ADInfeed-c7dba95f.js';
40
40
 
41
41
  var DeckContent = function (_React$Component) {
42
42
  _inherits(DeckContent, _React$Component);
@@ -36,9 +36,9 @@ import './asyncToGenerator-0379e924.js';
36
36
  import './_set-species-6f64f1c1.js';
37
37
  import './beam-a25bd8fd.js';
38
38
  import './AdSlot.js';
39
- import { A as ADInfeed } from './ADInfeed-27674dc6.js';
39
+ import { A as ADInfeed } from './ADInfeed-c7dba95f.js';
40
40
  import { l as lodash } from './lodash-17fdfebb.js';
41
- import { A as ADlgInfeed } from './ADlgInfeed-43060a77.js';
41
+ import { A as ADlgInfeed } from './ADlgInfeed-8bfd6d58.js';
42
42
  import './_arrayMap-64cbe0e4.js';
43
43
  import { g as get_1 } from './get-0eb56363.js';
44
44
  import './AD.js';
@@ -29,9 +29,9 @@ import './asyncToGenerator-0379e924.js';
29
29
  import './_set-species-6f64f1c1.js';
30
30
  import './beam-a25bd8fd.js';
31
31
  import './AdSlot.js';
32
- import './ADInfeed-27674dc6.js';
32
+ import './ADInfeed-c7dba95f.js';
33
33
  import './lodash-17fdfebb.js';
34
- import './ADlgInfeed-43060a77.js';
34
+ import './ADlgInfeed-8bfd6d58.js';
35
35
  import './AuthorComponent-158226c9.js';
36
36
  import 'react-bootstrap';
37
37
  import QueueDeckExpanded from './QueueDeckExpanded.js';
@@ -34,9 +34,9 @@ import { _ as _Promise } from './asyncToGenerator-0379e924.js';
34
34
  import './_set-species-6f64f1c1.js';
35
35
  import './beam-a25bd8fd.js';
36
36
  import './AdSlot.js';
37
- import { A as ADInfeed } from './ADInfeed-27674dc6.js';
37
+ import { A as ADInfeed } from './ADInfeed-c7dba95f.js';
38
38
  import { l as lodash } from './lodash-17fdfebb.js';
39
- import { A as ADlgInfeed } from './ADlgInfeed-43060a77.js';
39
+ import { A as ADlgInfeed } from './ADlgInfeed-8bfd6d58.js';
40
40
 
41
41
  var MasterDeck = function (_React$Component) {
42
42
  _inherits(MasterDeck, _React$Component);
@@ -31,9 +31,9 @@ import { a as _asyncToGenerator, r as regenerator, _ as _Promise } from './async
31
31
  import './_set-species-6f64f1c1.js';
32
32
  import './beam-a25bd8fd.js';
33
33
  import './AdSlot.js';
34
- import './ADInfeed-27674dc6.js';
34
+ import './ADInfeed-c7dba95f.js';
35
35
  import './lodash-17fdfebb.js';
36
- import './ADlgInfeed-43060a77.js';
36
+ import './ADlgInfeed-8bfd6d58.js';
37
37
  import './AuthorComponent-158226c9.js';
38
38
  import { B as BlockContent } from './BlockContent-a614acdf.js';
39
39
  import './smoothscroll-4b699764.js';
@@ -29,9 +29,9 @@ import './asyncToGenerator-0379e924.js';
29
29
  import './_set-species-6f64f1c1.js';
30
30
  import './beam-a25bd8fd.js';
31
31
  import './AdSlot.js';
32
- import { A as ADInfeed } from './ADInfeed-27674dc6.js';
32
+ import { A as ADInfeed } from './ADInfeed-c7dba95f.js';
33
33
  import { l as lodash } from './lodash-17fdfebb.js';
34
- import { A as ADlgInfeed } from './ADlgInfeed-43060a77.js';
34
+ import { A as ADlgInfeed } from './ADlgInfeed-8bfd6d58.js';
35
35
  import { A as AuthorComponent } from './AuthorComponent-158226c9.js';
36
36
  import { Container, Media } from 'react-bootstrap';
37
37
 
package/dist/esm/index.js CHANGED
@@ -36,10 +36,10 @@ import './asyncToGenerator-0379e924.js';
36
36
  import './_set-species-6f64f1c1.js';
37
37
  export { B as Beam, S as Segment } from './beam-a25bd8fd.js';
38
38
  export { default as AdSlot } from './AdSlot.js';
39
- import './ADInfeed-27674dc6.js';
39
+ import './ADInfeed-c7dba95f.js';
40
40
  export { default as DeckContent } from './DeckContent.js';
41
41
  import './lodash-17fdfebb.js';
42
- import './ADlgInfeed-43060a77.js';
42
+ import './ADlgInfeed-8bfd6d58.js';
43
43
  import './_arrayMap-64cbe0e4.js';
44
44
  import './get-0eb56363.js';
45
45
  export { default as AD } from './AD.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mjhls/mjh-framework",
3
- "version": "1.0.550",
3
+ "version": "1.0.551",
4
4
  "description": "Foundation Framework",
5
5
  "author": "mjh-framework",
6
6
  "license": "MIT",