@discoveryjs/discovery
Advanced tools
Comparing version 1.0.0-beta.47 to 1.0.0-beta.48
@@ -0,7 +1,25 @@ | ||
## 1.0.0-beta.48 (04-11-2020) | ||
- Fixed dark mode styles of action buttons in `struct` view for touch devices | ||
- Fixed context for nav to include route attributes (#70) | ||
- Added `nav.remove(name)` method to remove nav items (#72) | ||
- Removed try/catch in `Widget#queryBool()`, so now `when` and `whenData` throws instead of silently fail (#69) | ||
- Fixed missing horizontal scrolling for `tree` view | ||
- Fixed postfix style in `badge` view when used in `page-header`'s prelude | ||
- Fixed `source` view crashing on highlighting | ||
- Fixed path generation in `signature` view for objects in dictionary mode | ||
- Allowed to pass a space separated strings to `className` | ||
- Changed behaviour for a function as `className` value, it's return value can be a string or an array (any other is ignored) | ||
- Improved output view as a function in View inspector | ||
- Fixed view's tree in View inspector for components with no a container | ||
- Added display of non-rendered views with the reason in the view's tree in View inspector | ||
- Fixed jump out `context`'s content on re-render in view tree of View inspector | ||
- Bumped jora to `1.0.0-beta.4` and use `setup()` method (a bit more effective in creating functions from strings) | ||
## 1.0.0-beta.47 (02-11-2020) | ||
- Added view inspector | ||
- Added View inspector | ||
- Changed nav block to be fixed positioned | ||
- Changed nav block class name `.discovery-content-badges` -> `.discovery-nav` | ||
- Added `.overscrolled` class name that's adding to a page element when page's content scrolled over viewport top side | ||
- Added `.page_overscrolled` class name that's adding to a page element when page's content scrolled over viewport top side | ||
- Added `page-header` view | ||
@@ -8,0 +26,0 @@ - Added `passive` option support detection test and `passiveCaptureOptions` for `addEventListener()` in `utils.dom` |
@@ -6,3 +6,3 @@ module.exports = function es5toEs6(name, code, imports, cjs) { | ||
cjs | ||
? `var ${ref} = require('/gen/${lib}.js');` | ||
? `var ${ref} = require('/gen/${lib}.js').default;` | ||
: `import ${ref} from '/gen/${lib}.js';` | ||
@@ -9,0 +9,0 @@ ), |
{ | ||
"name": "@discoveryjs/discovery", | ||
"version": "1.0.0-beta.47", | ||
"version": "1.0.0-beta.48", | ||
"description": "Hackable JSON discovery tool", | ||
@@ -40,3 +40,3 @@ "author": "Roman Dvornov <rdvornov@gmail.com> (https://github.com/lahmatiy)", | ||
"hitext-prismjs": "^1.1.0", | ||
"jora": "1.0.0-beta.3", | ||
"jora": "1.0.0-beta.4", | ||
"prismjs": "^1.21.0" | ||
@@ -43,0 +43,0 @@ }, |
@@ -31,14 +31,15 @@ /* eslint-env browser */ | ||
if (fragmentEls.has(node)) { | ||
const info = fragmentEls.get(node); | ||
const child = parent.children.find(child => child.view === info); | ||
for (const info of fragmentEls.get(node)) { | ||
const child = parent.children.find(child => child.view === info); | ||
if (child) { | ||
parent = child; | ||
} else { | ||
parent.children.push(parent = { | ||
node: null, | ||
parent, | ||
view: info, | ||
children: [] | ||
}); | ||
if (child) { | ||
parent = child; | ||
} else { | ||
parent.children.push(parent = { | ||
node: null, | ||
parent, | ||
view: info, | ||
children: [] | ||
}); | ||
} | ||
} | ||
@@ -103,3 +104,3 @@ } | ||
function condition(type, host, config, data, context) { | ||
function condition(type, host, config, data, context, placeholder) { | ||
if (!hasOwnProperty.call(config, type) || config[type] === undefined) { | ||
@@ -109,3 +110,13 @@ return true; | ||
return host.queryBool(config[type] === true ? '' : config[type], data, context); | ||
if (host.queryBool(config[type] === true ? '' : config[type], data, context)) { | ||
return true; | ||
} | ||
viewEls.set(placeholder, { | ||
skipped: type, | ||
config, | ||
data, | ||
context | ||
}); | ||
return false; | ||
} | ||
@@ -134,10 +145,11 @@ | ||
if (typeof classNames === 'function') { | ||
classNames = classNames(data, context); | ||
} | ||
if (typeof classNames === 'string') { | ||
// fast path | ||
el.classList.add(classNames); | ||
} else { | ||
if (!Array.isArray(classNames)) { | ||
classNames = [classNames]; | ||
} | ||
classNames = classNames.trim().split(/\s+/); | ||
} | ||
if (Array.isArray(classNames)) { | ||
el.classList.add( | ||
@@ -163,3 +175,7 @@ ...classNames | ||
for (let child of el.childNodes) { | ||
fragmentEls.set(child, info); | ||
if (fragmentEls.has(child)) { | ||
fragmentEls.get(child).unshift(info); | ||
} else { | ||
fragmentEls.set(child, [info]); | ||
} | ||
} | ||
@@ -246,5 +262,6 @@ } | ||
if ('when' in config === false || condition('when', this.host, config, data, context)) { | ||
const placeholder = container.appendChild(document.createComment('')); | ||
if (condition('when', this.host, config, data, context, placeholder)) { | ||
// immediately append a view insert point (a placeholder) | ||
const placeholder = container.appendChild(document.createComment('')); | ||
const getData = 'data' in config | ||
@@ -257,3 +274,3 @@ ? Promise.resolve().then(() => this.host.query(config.data, data, context)) | ||
.then(data => | ||
condition('whenData', this.host, config, data, context) | ||
condition('whenData', this.host, config, data, context, placeholder) | ||
? renderDom( | ||
@@ -267,3 +284,3 @@ renderer, | ||
) | ||
: placeholder.remove() | ||
: null // placeholder.remove() | ||
) | ||
@@ -499,2 +516,12 @@ .catch(e => { | ||
adoptFragment(fragment, probe) { | ||
const info = fragmentEls.get(probe); | ||
if (info) { | ||
for (const node of fragment.childNodes) { | ||
fragmentEls.set(node, info); | ||
} | ||
} | ||
} | ||
setViewRoot(node, name, props) { | ||
@@ -501,0 +528,0 @@ rootViewEls.set(node, { |
@@ -51,2 +51,28 @@ /* eslint-env browser */ | ||
for (const leaf of leafs) { | ||
// if (leaf.fragmentNodes && leaf.fragmentNodes.length) { | ||
// const r = new Range(); | ||
// r.setStartBefore(leaf.fragmentNodes[0]); | ||
// r.setEndAfter(leaf.fragmentNodes[leaf.fragmentNodes.length - 1]); | ||
// const { top, left, right, bottom } = r.getBoundingClientRect(); | ||
// const offset = getPageOffset(parentEl); | ||
// const box = { | ||
// top: top + offset.top, | ||
// left: left + offset.left, | ||
// width: right - left, | ||
// height: bottom - top | ||
// }; | ||
// const overlay = { | ||
// el: parentEl.appendChild(document.createElement('div')), | ||
// box: null | ||
// }; | ||
// overlay.el.className = leaf.viewRoot ? 'overlay view-root' : 'overlay'; | ||
// viewByEl.set(overlay.el, leaf); | ||
// overlay.el.style.top = `${box.top}px`; | ||
// overlay.el.style.left = `${box.left}px`; | ||
// overlay.el.style.width = `${box.width}px`; | ||
// overlay.el.style.height = `${box.height}px`; | ||
// } | ||
if (!leaf.node || (!leaf.view && !leaf.viewRoot)) { | ||
@@ -65,5 +91,6 @@ if (leaf.children.length) { | ||
overlay = { | ||
el: parentEl.appendChild(createElement('div', leaf.viewRoot ? 'overlay view-root' : 'overlay')), | ||
el: parentEl.appendChild(document.createElement('div')), | ||
box: null | ||
}; | ||
overlay.el.className = leaf.viewRoot ? 'overlay view-root' : 'overlay'; | ||
overlayByViewNode.set(leaf.node, overlay); | ||
@@ -84,3 +111,6 @@ viewByEl.set(overlay.el, leaf); | ||
if (leaf.children.length) { | ||
overlay.el.style.overflow = getComputedStyle(leaf.node).overflow !== 'visible' ? 'hidden' : 'visible'; | ||
if (leaf.node.nodeType === 1) { | ||
overlay.el.style.overflow = getComputedStyle(leaf.node).overflow !== 'visible' ? 'hidden' : 'visible'; | ||
} | ||
walk(leaf.children, overlay.el); | ||
@@ -247,4 +277,7 @@ } | ||
view: 'block', | ||
className: 'selected', | ||
content: 'text:(view.config.view or "#root")', | ||
className: [ | ||
data => data.view && data.view.skipped ? 'skipped' : false, | ||
'selected' | ||
], | ||
content: 'text:(view.config.view or "#root" | $ + "" = $ ? $ : "ƒn")', | ||
postRender(el) { | ||
@@ -258,3 +291,4 @@ requestAnimationFrame(() => el.scrollIntoView()); | ||
view: 'link', | ||
data: '{ text: view.config.view or "#root", href: false, leaf: $ }', | ||
className: data => data.leaf.view && data.leaf.view.skipped ? 'skipped' : false, | ||
data: '{ text: view.config.view or "#root" | $ + "" = $ ? $ : "ƒn", href: false, leaf: $ }', | ||
onClick(_, data) { | ||
@@ -281,5 +315,8 @@ selectTreeViewLeaf(data.leaf); | ||
toggleConfig: { | ||
className: data => data.value.viewRoot ? 'view-root' : '', | ||
className: [ | ||
data => data.value.viewRoot ? 'view-root' : false, | ||
data => data.value.view && data.value.view.skipped ? 'skipped' : false | ||
], | ||
content: [ | ||
'text:value | viewRoot.name or view.config.view', | ||
'text:value | viewRoot.name or view.config.view | $ + "" = $ ? $ : "ƒn"', // FIXME: `$ + "" = $` is a hack to check value is a string | ||
{ | ||
@@ -322,3 +359,16 @@ view: 'list', | ||
view: 'block', | ||
className: ['content-section', 'props'], | ||
className: 'content-section skip', | ||
when: 'skipped', | ||
content: 'block{ content: "badge:{ text: skipped }" }' | ||
}, | ||
{ | ||
view: 'block', | ||
className: 'content-section render', | ||
when: 'config | view + "" != view', | ||
content: 'source:{ content: config.view + "", syntax: "js" }' | ||
}, | ||
{ | ||
view: 'block', | ||
when: 'props != undefined', | ||
className: 'content-section props', | ||
content: { | ||
@@ -332,3 +382,3 @@ view: 'struct', | ||
view: 'block', | ||
className: ['content-section', 'config'], | ||
className: 'content-section config', | ||
content: [ | ||
@@ -363,3 +413,3 @@ { | ||
view: 'block', | ||
className: ['content-section', 'data'], | ||
className: 'content-section data', | ||
content: { | ||
@@ -382,3 +432,3 @@ view: 'struct', | ||
view: 'block', | ||
className: ['content-section', 'context'], | ||
className: 'content-section context', | ||
content: { | ||
@@ -385,0 +435,0 @@ view: 'struct', |
@@ -19,2 +19,3 @@ /* eslint-env browser */ | ||
let { color, textColor, darkColor, darkTextColor, text, href, prefix, postfix, hint } = data || {}; | ||
let render; | ||
@@ -52,8 +53,10 @@ if (typeof data === 'string' || typeof data === 'number' || typeof data === 'boolean') { | ||
if (content) { | ||
discovery.view.render(el, content, data, context); | ||
render = discovery.view.render(el, content, data, context); | ||
} else { | ||
el.appendChild(document.createTextNode(String(text))); | ||
el.textContent = text; | ||
} | ||
maybeFix(el, 'postfix', postfix); | ||
return render; | ||
} | ||
@@ -60,0 +63,0 @@ |
@@ -20,2 +20,3 @@ /* eslint-env browser */ | ||
if (buffer === lastRender) { | ||
discovery.view.adoptFragment(buffer, contentStartMarker); | ||
contentStartMarker.after(buffer); | ||
@@ -22,0 +23,0 @@ } |
@@ -163,4 +163,4 @@ /* eslint-env browser */ | ||
renderCaption(); | ||
return renderCaption(); | ||
}, { usage }); | ||
} |
@@ -10,3 +10,3 @@ /* eslint-env browser */ | ||
discovery.view.render(el, content || 'text', data, context); | ||
return discovery.view.render(el, content || 'text', data, context); | ||
} | ||
@@ -13,0 +13,0 @@ |
@@ -9,6 +9,3 @@ /* eslint-env browser */ | ||
buffer.innerHTML = data; | ||
while (buffer.firstChild) { | ||
el.appendChild(buffer.firstChild); | ||
} | ||
el.append(...buffer.childNodes); | ||
}, { | ||
@@ -15,0 +12,0 @@ tag: null, |
export default (view) => ({ | ||
demo: `${view}:"Page header \\"${view}\\""`, | ||
demo: `${view}:"That's a \\"${view}\\""`, | ||
examples: [ | ||
@@ -8,3 +8,6 @@ { | ||
view, | ||
prelude: 'badge:{ text: "demo" }', | ||
prelude: [ | ||
'badge:{ text: "demo" }', | ||
'badge:{ text: "demo", prefix: "prelude", postfix: "postfix" }' | ||
], | ||
content: 'h1:"Header"' | ||
@@ -11,0 +14,0 @@ } |
@@ -8,3 +8,3 @@ /* eslint-env browser */ | ||
discovery.view.render(el, [ | ||
return discovery.view.render(el, [ | ||
{ view: 'header', content: header }, | ||
@@ -11,0 +11,0 @@ content |
@@ -15,3 +15,3 @@ /* eslint-env browser */ | ||
if (currentValue !== undefined) { | ||
discovery.view.render(el, discovery.view.composeConfig({ | ||
return discovery.view.render(el, discovery.view.composeConfig({ | ||
view: 'menu-item', | ||
@@ -117,4 +117,4 @@ data: variantQuery, | ||
renderCaption(); | ||
return renderCaption(); | ||
}, { usage }); | ||
} |
@@ -108,3 +108,3 @@ import { createElement, createText } from '../../core/utils/dom.js'; | ||
contentEl.appendChild(createText(': ')); | ||
renderStat(contentEl, map, elementToData, path.concat(name), propertyOffset); | ||
renderStat(contentEl, map, elementToData, path.concat(dictMode ? '*' : name), propertyOffset); | ||
contentEl.appendChild(createText(';')); | ||
@@ -111,0 +111,0 @@ } |
@@ -6,2 +6,3 @@ /* eslint-env browser */ | ||
import CodeMirror from '/gen/codemirror.js'; | ||
import usage from './source.usage.js'; | ||
@@ -147,3 +148,3 @@ const maxSourceSizeToHighlight = 100 * 1024; | ||
} | ||
}); | ||
}, { usage }); | ||
} |
@@ -26,3 +26,3 @@ /* eslint-env browser */ | ||
discovery.view.render(el, renderConfig, data, context); | ||
return discovery.view.render(el, renderConfig, data, context); | ||
}, { | ||
@@ -29,0 +29,0 @@ tag: false, |
@@ -8,7 +8,7 @@ /* eslint-env browser */ | ||
if (Array.isArray(cols)) { | ||
cols.forEach((col, index) => | ||
return Promise.all(cols.map((col, index) => | ||
discovery.view.render(el, col, data, { ...context, colIndex: index }) | ||
); | ||
)); | ||
} | ||
}, { tag: 'tr' }); | ||
} |
@@ -128,3 +128,3 @@ /* eslint-env browser */ | ||
discovery.view.renderList(bodyEl, this.composeConfig({ | ||
return discovery.view.renderList(bodyEl, this.composeConfig({ | ||
view: 'table-row', | ||
@@ -227,3 +227,3 @@ cols | ||
moreEl.colSpan = cols.length; | ||
render(data); | ||
return render(data); | ||
}, { | ||
@@ -230,0 +230,0 @@ tag: 'table', |
@@ -6,3 +6,3 @@ /* eslint-env browser */ | ||
discovery.view.define('tabs', function(el, config, data, context) { | ||
function renderContent(value) { | ||
async function renderContent(value) { | ||
const handler = inited ? onChange : onInit; | ||
@@ -26,15 +26,15 @@ | ||
beforeTabsEl.innerHTML = ''; | ||
discovery.view.render(beforeTabsEl, beforeTabs, data, renderContext); | ||
await discovery.view.render(beforeTabsEl, beforeTabs, data, renderContext); | ||
tabsEl.appendChild(beforeTabsEl); | ||
} | ||
tabs.forEach(tab => | ||
await Promise.all(tabs.map(tab => | ||
discovery.view.render(tabsEl, discovery.view.composeConfig(tab, { | ||
active: tab.value === currentValue | ||
}), data, context) | ||
); | ||
)); | ||
if (afterTabs) { | ||
afterTabsEl.innerHTML = ''; | ||
discovery.view.render(afterTabsEl, afterTabs, data, renderContext); | ||
await discovery.view.render(afterTabsEl, afterTabs, data, renderContext); | ||
tabsEl.appendChild(afterTabsEl); | ||
@@ -46,3 +46,3 @@ } | ||
contentEl.innerHTML = ''; | ||
discovery.view.render(contentEl, content, data, renderContext); | ||
await discovery.view.render(contentEl, content, data, renderContext); | ||
} | ||
@@ -118,4 +118,4 @@ | ||
renderContent(initValue); | ||
return renderContent(initValue); | ||
}, { usage }); | ||
} |
@@ -7,3 +7,3 @@ /* eslint-env browser */ | ||
discovery.view.render(el, [ | ||
return discovery.view.render(el, [ | ||
{ | ||
@@ -10,0 +10,0 @@ view: 'block', |
@@ -6,3 +6,3 @@ /* eslint-env browser */ | ||
discovery.view.define('toggle-group', function(el, config, data, context) { | ||
function render(_, value) { | ||
async function render(_, value) { | ||
const handler = inited ? onChange : onInit; | ||
@@ -22,3 +22,3 @@ | ||
beforeTogglesEl.innerHTML = ''; | ||
discovery.view.render(beforeTogglesEl, beforeToggles, data, { ...context, [name]: value }); | ||
await discovery.view.render(beforeTogglesEl, beforeToggles, data, { ...context, [name]: value }); | ||
el.appendChild(beforeTogglesEl); | ||
@@ -29,11 +29,11 @@ } | ||
afterTogglesEl.innerHTML = ''; | ||
discovery.view.render(afterTogglesEl, afterToggles, data, { ...context, [name]: value }); | ||
await discovery.view.render(afterTogglesEl, afterToggles, data, { ...context, [name]: value }); | ||
el.appendChild(afterTogglesEl); | ||
} | ||
toggles.forEach((toggle, idx) => | ||
await Promise.all(toggles.map((toggle, idx) => | ||
discovery.view.render(el, discovery.view.composeConfig(toggle, { | ||
checked: toggle.value === currentValue | ||
}), data[idx], context) | ||
); | ||
)); | ||
} | ||
@@ -97,4 +97,4 @@ | ||
render(true, initValue); | ||
return render(true, initValue); | ||
}, { usage }); | ||
} |
@@ -27,3 +27,3 @@ /* eslint-env browser */ | ||
discovery.view.define('tree-leaf', function(el, config, data, context) { | ||
discovery.view.define('tree-leaf', async function(el, config, data, context) { | ||
const { expanded, content = 'text', itemConfig, collapsible = true, last, hasChildren, children, limit, onToggle } = config; | ||
@@ -43,3 +43,3 @@ const toggleEl = el.appendChild(createElement('span', 'view-tree-leaf-toggle')); | ||
let renderState = this.render(contentEl, content, data, context); | ||
await this.render(contentEl, content, data, context); | ||
@@ -76,3 +76,3 @@ if (children) { | ||
if (childrenData) { | ||
renderState = renderState.then(() => renderChildren(childrenData, expanded)); | ||
await renderChildren(childrenData, expanded); | ||
} | ||
@@ -90,4 +90,2 @@ } else { | ||
} | ||
return renderState; | ||
}, { | ||
@@ -94,0 +92,0 @@ tag: 'li' |
@@ -67,3 +67,3 @@ /* eslint-env browser */ | ||
const lookupObjectMarkerAll = (value) => objectMarkers.lookupAll(value); | ||
const queryExtensions = { | ||
const queryCustomMethods = { | ||
query: (...args) => instance.query(...args), | ||
@@ -94,3 +94,3 @@ pageLink: (pageRef, pageId, pageParams) => | ||
annotations, | ||
queryExtensions | ||
queryFnFromString: jora.setup(queryCustomMethods) | ||
}); | ||
@@ -157,3 +157,3 @@ }, | ||
addQueryHelpers(helpers) { | ||
Object.assign(queryExtensions, helpers); | ||
Object.assign(queryCustomMethods, helpers); | ||
} | ||
@@ -193,10 +193,3 @@ } | ||
this.prepare = data => data; | ||
this.objectMarkers = []; | ||
this.linkResolvers = []; | ||
this.annotations = []; | ||
this.queryExtensions = { | ||
query: (...args) => this.query(...args), | ||
pageLink: (pageRef, pageId, pageParams) => | ||
this.encodePageHash(pageId, pageRef, pageParams) | ||
}; | ||
createDataExtensionApi(this).apply(); | ||
@@ -262,3 +255,2 @@ this.defaultPageId = this.options.defaultPageId || 'default'; | ||
const dataExtension = createDataExtensionApi(this); | ||
this._extensitionApi = dataExtension.methods; // TODO: remove | ||
const checkIsNotPrevented = () => { | ||
@@ -283,3 +275,3 @@ const lastPromise = lastSetDataPromise.get(this); | ||
this.context = context; | ||
dataExtension.apply(this); | ||
dataExtension.apply(); | ||
@@ -339,3 +331,3 @@ this.emit('data'); | ||
case 'string': | ||
return jora(query, { methods: this.queryExtensions }); | ||
return this.queryFnFromString(query); | ||
} | ||
@@ -358,7 +350,3 @@ } | ||
queryBool(...args) { | ||
try { | ||
return jora.buildin.bool(this.query(...args)); | ||
} catch (e) { | ||
return false; | ||
} | ||
return jora.buildin.bool(this.query(...args)); | ||
} | ||
@@ -434,3 +422,2 @@ | ||
const options = { | ||
methods: this.queryExtensions, | ||
tolerant: true, | ||
@@ -441,3 +428,3 @@ stat: true | ||
lastQuerySuggestionsStat.set(this, stat = { query, data, context, suggestion() {} }); | ||
Object.assign(stat, jora(query, options)(data, context)); | ||
Object.assign(stat, this.queryFnFromString(query, options)(data, context)); | ||
} | ||
@@ -469,5 +456,7 @@ | ||
return path.map((part, idx) => | ||
typeof part === 'number' || !/^[a-zA-Z_][a-zA-Z_$0-9]*$/.test(part) | ||
? (idx === 0 ? `$[${JSON.stringify(part)}]` : `[${JSON.stringify(part)}]`) | ||
: (idx === 0 ? part : '.' + part) | ||
part === '*' | ||
? (idx === 0 ? 'values()' : '.values()') | ||
: typeof part === 'number' || !/^[a-zA-Z_][a-zA-Z_$0-9]*$/.test(part) | ||
? (idx === 0 ? `$[${JSON.stringify(part)}]` : `[${JSON.stringify(part)}]`) | ||
: (idx === 0 ? part : '.' + part) | ||
).join(''); | ||
@@ -474,0 +463,0 @@ } |
@@ -46,2 +46,11 @@ import { createFragment } from '../core/utils/dom.js'; | ||
insert(config, 'after', name); | ||
}, | ||
remove(name) { | ||
const position = items.findIndex(item => item.name === name); | ||
if (position !== -1) { | ||
return items.splice(position, 1)[0]; | ||
} | ||
return null; | ||
} | ||
@@ -97,3 +106,3 @@ }); | ||
render() { | ||
const { data, context, dom } = this.host; | ||
const { data, dom } = this.host; | ||
const el = dom && dom.nav; | ||
@@ -104,3 +113,6 @@ | ||
if (el) { | ||
const renderContext = { ...context, widget: this.host }; | ||
const context = { | ||
...this.host.getRenderContext(), | ||
widget: this.host | ||
}; | ||
@@ -110,9 +122,9 @@ this.host.view.setViewRoot(el, 'nav', { | ||
data, | ||
context: renderContext | ||
context | ||
}); | ||
el.innerHTML = ''; | ||
this.host.view.render(el, this.config, data, renderContext); | ||
this.host.view.render(el, this.config, data, context); | ||
} | ||
} | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
1826121
226
15793
+ Addedjora@1.0.0-beta.4(transitive)
- Removedjora@1.0.0-beta.3(transitive)
Updatedjora@1.0.0-beta.4