Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@tko/binding.component

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tko/binding.component - npm Package Compare versions

Comparing version
4.0.0-alpha9.0
to
4.0.0-beta1.0
+138
dist/componentBinding.js
// @tko/binding.component 🥊 4.0.0-beta1.0 ESM
import {
virtualElements,
makeArray,
cloneNodes
} from "@tko/utils";
import {
unwrap
} from "@tko/observable";
import {
DescendantBindingHandler
} from "@tko/bind";
import {
JsxObserver,
maybeJsx
} from "@tko/utils.jsx";
import {
NativeProvider
} from "@tko/provider.native";
import { LifeCycle } from "@tko/lifecycle";
import registry from "@tko/utils.component";
var componentLoadingOperationUniqueId = 0;
export default class ComponentBinding extends DescendantBindingHandler {
constructor(params) {
super(params);
this.originalChildNodes = makeArray(virtualElements.childNodes(this.$element));
this.computed("computeApplyComponent");
}
cloneTemplateIntoElement(componentName, template, element) {
if (!template) {
throw new Error("Component '" + componentName + "' has no template");
}
if (maybeJsx(template)) {
virtualElements.emptyNode(element);
this.addDisposable(new JsxObserver(template, element, null, void 0, true));
} else {
const clonedNodesArray = cloneNodes(template);
virtualElements.setDomNodeChildren(element, clonedNodesArray);
}
}
createViewModel(componentDefinition, element, originalChildNodes, componentParams) {
const componentViewModelFactory = componentDefinition.createViewModel;
return componentViewModelFactory ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes }) : componentParams;
}
makeTemplateSlotNodes(originalChildNodes) {
return Object.assign({}, ...this.genSlotsByName(originalChildNodes));
}
*genSlotsByName(templateNodes) {
for (const node of templateNodes) {
if (node.nodeType !== 1) {
continue;
}
const slotName = node.getAttribute("slot");
if (!slotName) {
continue;
}
yield { [slotName]: node };
}
}
computeApplyComponent() {
const value = unwrap(this.value);
let componentName;
let componentParams;
if (typeof value === "string") {
componentName = value;
} else {
componentName = unwrap(value.name);
componentParams = NativeProvider.getNodeValues(this.$element) || unwrap(value.params);
}
this.latestComponentName = componentName;
if (!componentName) {
throw new Error("No component name specified");
}
this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId;
registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn));
}
makeChildBindingContext($component) {
const ctxExtender = (ctx) => Object.assign(ctx, {
$component,
$componentTemplateNodes: this.originalChildNodes,
$componentTemplateSlotNodes: this.makeTemplateSlotNodes(this.originalChildNodes)
});
return this.$context.createChildContext($component, void 0, ctxExtender);
}
applyComponentDefinition(componentName, componentParams, componentDefinition) {
if (this.currentLoadingOperationId !== this.loadingOperationId || this.latestComponentName !== componentName) {
return;
}
this.cleanUpState();
const element = this.$element;
if (!componentDefinition) {
throw new Error("Unknown component '" + componentName + "'");
}
if (componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, componentDefinition.template, element);
}
const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams);
this.childBindingContext = this.makeChildBindingContext(componentViewModel);
const viewTemplate = componentViewModel && componentViewModel.template;
if (!viewTemplate && !componentDefinition.template) {
throw new Error("Component '" + componentName + "' has no template");
}
if (!componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, viewTemplate, element);
}
if (componentViewModel instanceof LifeCycle) {
componentViewModel.anchorTo(this.$element);
}
this.currentViewModel = componentViewModel;
const onBinding = this.onBindingComplete.bind(this, componentViewModel);
this.applyBindingsToDescendants(this.childBindingContext, onBinding);
}
onBindingComplete(componentViewModel, bindingResult) {
if (componentViewModel && componentViewModel.koDescendantsComplete) {
componentViewModel.koDescendantsComplete(this.$element);
}
this.completeBinding(bindingResult);
}
cleanUpState() {
const currentView = this.currentViewModel;
const currentViewDispose = currentView && currentView.dispose;
if (typeof currentViewDispose === "function") {
currentViewDispose.call(currentView);
}
this.currentViewModel = null;
this.currentLoadingOperationId = null;
}
dispose() {
this.cleanUpState();
super.dispose();
}
get controlsDescendants() {
return true;
}
static get allowVirtualElements() {
return true;
}
}
{
"version": 3,
"sources": ["../src/componentBinding.ts"],
"sourcesContent": ["//\n// Binding Handler for Components\n//\n\nimport {\n virtualElements, makeArray, cloneNodes\n} from '@tko/utils'\n\nimport {\n unwrap, isObservable\n} from '@tko/observable'\n\nimport {\n DescendantBindingHandler, applyBindingsToDescendants\n} from '@tko/bind'\n\nimport {\n JsxObserver, maybeJsx\n} from '@tko/utils.jsx'\n\nimport {\n NativeProvider\n} from '@tko/provider.native'\n\nimport {LifeCycle} from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nvar componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n constructor (params) {\n super(params)\n this.originalChildNodes = makeArray(\n virtualElements.childNodes(this.$element)\n )\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement (componentName, template, element) {\n if (!template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element)\n this.addDisposable(new JsxObserver(template, element, null, undefined, true))\n\n } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel (componentDefinition, element, originalChildNodes, componentParams) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes })\n : componentParams // Template-only component\n }\n\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes (originalChildNodes) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes))\n }\n\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement} templateNodes\n */\n * genSlotsByName (templateNodes) {\n for (const node of templateNodes) {\n if (node.nodeType !== 1) { continue }\n const slotName = node.getAttribute('slot')\n if (!slotName) { continue }\n yield {[slotName]: node}\n }\n }\n\n computeApplyComponent () {\n const value = unwrap(this.value)\n let componentName\n let componentParams\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) ||\n unwrap(value.params)\n }\n\n this.latestComponentName = componentName\n\n if (!componentName) {\n throw new Error('No component name specified')\n }\n\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId\n registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext ($component) {\n const ctxExtender = (ctx) => Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(\n this.originalChildNodes)\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition (componentName, componentParams, componentDefinition) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId ||\n this.latestComponentName !== componentName) { return }\n\n // Clean up previous state\n this.cleanUpState()\n\n const element = this.$element\n\n // Instantiate and bind new component. Implicitly this cleans any old DOM nodes.\n if (!componentDefinition) {\n throw new Error('Unknown component \\'' + componentName + '\\'')\n }\n\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element)\n }\n\n const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams)\n\n this.childBindingContext = this.makeChildBindingContext(componentViewModel)\n\n const viewTemplate = componentViewModel && componentViewModel.template\n\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element)\n }\n\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element)\n }\n\n this.currentViewModel = componentViewModel\n\n const onBinding = this.onBindingComplete.bind(this, componentViewModel)\n this.applyBindingsToDescendants(this.childBindingContext, onBinding)\n }\n\n onBindingComplete (componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element)\n }\n this.completeBinding(bindingResult)\n }\n\n cleanUpState () {\n const currentView = this.currentViewModel\n const currentViewDispose = currentView && currentView.dispose\n if (typeof currentViewDispose === 'function') {\n currentViewDispose.call(currentView)\n }\n this.currentViewModel = null\n // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion\n this.currentLoadingOperationId = null\n }\n\n dispose () {\n this.cleanUpState()\n super.dispose()\n }\n\n get controlsDescendants () { return true }\n static get allowVirtualElements () { return true }\n}\n"],
"mappings": "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",
"names": []
}

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

// @tko/binding.component 🥊 4.0.0-beta1.0 ESM
import component from "./componentBinding";
import slot from "./slotBinding";
export var bindings = { component, slot };
{
"version": 3,
"sources": ["../src/index.ts"],
"sourcesContent": ["\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"],
"mappings": ";AACA;AACA;AACO,WAAI,WAAW,EAAE,WAAW,KAAK;",
"names": []
}
// @tko/binding.component 🥊 4.0.0-beta1.0 MJS
import component from "./componentBinding";
import slot from "./slotBinding";
export var bindings = { component, slot };
{
"version": 3,
"sources": ["../src/index.ts"],
"sourcesContent": ["\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"],
"mappings": ";AACA;AACA;AACO,WAAI,WAAW,EAAE,WAAW,KAAK;",
"names": []
}
// @tko/binding.component 🥊 4.0.0-beta1.0 ESM
import {
virtualElements
} from "@tko/utils";
import {
JsxObserver,
getOriginalJsxForNode
} from "@tko/utils.jsx";
import {
DescendantBindingHandler,
contextFor
} from "@tko/bind";
export default class SlotBinding extends DescendantBindingHandler {
constructor(...params) {
super(...params);
const slotNode = this.getSlot(this.value);
const $slotContext = contextFor(slotNode);
const childContext = this.$context.extend({
$slotContext,
$slotData: $slotContext && $slotContext.$data
});
this.replaceSlotWithNode(this.$element, slotNode);
this.applyBindingsToDescendants(childContext);
}
replaceSlotWithNode(nodeInComponentTemplate, slotNode) {
const nodes = this.cloneNodeFromOriginal(slotNode);
virtualElements.emptyNode(nodeInComponentTemplate);
this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, void 0, void 0, true));
}
cloneNodeFromOriginal(node) {
if (!node) {
return [];
}
const jsx = getOriginalJsxForNode(node);
if (jsx) {
return jsx.children;
}
if ("content" in node) {
const clone = document.importNode(node.content, true);
return [...clone.childNodes];
}
const nodeArray = Array.isArray(node) ? node : [node];
return nodeArray.map((n) => n.cloneNode(true));
}
getSlot(slotName) {
const { $componentTemplateSlotNodes } = this.$context;
if (!slotName) {
return $componentTemplateSlotNodes[""] || [...this.$context.$componentTemplateNodes].filter((n) => !n.getAttribute || !n.getAttribute("slot"));
}
return $componentTemplateSlotNodes[slotName];
}
static get allowVirtualElements() {
return true;
}
}
{
"version": 3,
"sources": ["../src/slotBinding.ts"],
"sourcesContent": ["/**\n * Slots work as follows (you'll note a similarity to vue).\n *\n * Component template definitions have <slot name='abc'> tags.\n *\n * <template id='custom-component-template'>\n * <slot name='abc'>\n *\n * Component use these slots with e.g.\n *\n * <custom-component>\n * <template slot='abc'>\n *\n * When the component template is rendered, the `slot` binding will map\n * every binding to its respective slot.\n */\nimport {\n virtualElements\n} from '@tko/utils'\n\nimport {\n JsxObserver, getOriginalJsxForNode\n} from '@tko/utils.jsx'\n\nimport {\n DescendantBindingHandler, contextFor\n} from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor (...params) {\n super(...params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({\n $slotContext,\n $slotData: $slotContext && $slotContext.$data\n })\n\n this.replaceSlotWithNode(this.$element, slotNode)\n\n this.applyBindingsToDescendants(childContext)\n }\n\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement}} slotValue\n */\n replaceSlotWithNode (nodeInComponentTemplate, slotNode) {\n const nodes = this.cloneNodeFromOriginal(slotNode)\n virtualElements.emptyNode(nodeInComponentTemplate)\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true))\n }\n\n cloneNodeFromOriginal (node) {\n if (!node) { return [] }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) { return jsx.children }\n\n if ('content' in node) {\n const clone = document.importNode(node.content, true)\n return [...clone.childNodes]\n }\n\n const nodeArray = Array.isArray(node) ? node : [node]\n return nodeArray.map(n => n.cloneNode(true))\n }\n\n\n getSlot (slotName) {\n const {$componentTemplateSlotNodes} = this.$context\n\n if (!slotName) {\n return $componentTemplateSlotNodes[''] ||\n [...this.$context.$componentTemplateNodes]\n .filter(n => !n.getAttribute || !n.getAttribute('slot'))\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static get allowVirtualElements () { return true }\n}\n"],
"mappings": ";AAgBA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAOA,qBAAqB,oBAAoB,yBAAyB;AAAA,EAChE,eAAgB,QAAQ;AACtB,UAAM,GAAG,MAAM;AACf,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK;AACxC,UAAM,eAAe,WAAW,QAAQ;AAExC,UAAM,eAAe,KAAK,SAAS,OAAO;AAAA,MACxC;AAAA,MACA,WAAW,gBAAgB,aAAa;AAAA,IAC1C,CAAC;AAED,SAAK,oBAAoB,KAAK,UAAU,QAAQ;AAEhD,SAAK,2BAA2B,YAAY;AAAA,EAC9C;AAAA,EAOA,oBAAqB,yBAAyB,UAAU;AACtD,UAAM,QAAQ,KAAK,sBAAsB,QAAQ;AACjD,oBAAgB,UAAU,uBAAuB;AACjD,SAAK,cAAc,IAAI,YAAY,OAAO,yBAAyB,QAAW,QAAW,IAAI,CAAC;AAAA,EAChG;AAAA,EAEA,sBAAuB,MAAM;AAC3B,QAAI,CAAC,MAAM;AAAE,aAAO,CAAC;AAAA,IAAE;AACvB,UAAM,MAAM,sBAAsB,IAAI;AACtC,QAAI,KAAK;AAAE,aAAO,IAAI;AAAA,IAAS;AAE/B,QAAI,aAAa,MAAM;AACrB,YAAM,QAAQ,SAAS,WAAW,KAAK,SAAS,IAAI;AACpD,aAAO,CAAC,GAAG,MAAM,UAAU;AAAA,IAC7B;AAEA,UAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACpD,WAAO,UAAU,IAAI,OAAK,EAAE,UAAU,IAAI,CAAC;AAAA,EAC7C;AAAA,EAGA,QAAS,UAAU;AACjB,UAAM,EAAC,gCAA+B,KAAK;AAE3C,QAAI,CAAC,UAAU;AACb,aAAO,4BAA4B,OACjC,CAAC,GAAG,KAAK,SAAS,uBAAuB,EACtC,OAAO,OAAK,CAAC,EAAE,gBAAgB,CAAC,EAAE,aAAa,MAAM,CAAC;AAAA,IAC7D;AAEA,WAAO,4BAA4B;AAAA,EACrC;AAAA,aAEW,uBAAwB;AAAE,WAAO;AAAA,EAAK;AACnD;",
"names": []
}
+26
-27
{
"version": "4.0.0-beta1.0",
"name": "@tko/binding.component",
"version": "4.0.0-alpha9.0",
"description": "component: binding for web components",

@@ -8,9 +8,10 @@ "module": "dist/binding.component.js",

"dependencies": {
"@tko/bind": "^4.0.0-alpha9.0",
"@tko/lifecycle": "^4.0.0-alpha9.0",
"@tko/observable": "^4.0.0-alpha8.0",
"@tko/provider": "^4.0.0-alpha8.4",
"@tko/utils": "^4.0.0-alpha8.0",
"@tko/utils.component": "^4.0.0-alpha9.0",
"tslib": "^1.8.0"
"@tko/bind": "^4.0.0-beta1.0",
"@tko/lifecycle": "^4.0.0-beta1.0",
"@tko/observable": "^4.0.0-beta1.0",
"@tko/provider": "^4.0.0-beta1.0",
"@tko/utils": "^4.0.0-beta1.0",
"@tko/utils.component": "^4.0.0-beta1.0",
"@tko/utils.jsx": "^4.0.0-beta1.0",
"tslib": "^2.2.0"
},

@@ -26,19 +27,2 @@ "files": [

},
"__about__shared.package.json": "These properties are copied into all packages/*/package.json. Run `yarn repackage`",
"standard": {
"env": [
"browser",
"jasmine",
"mocha"
]
},
"scripts": {
"test": "npx karma start ../../karma.conf.js --once",
"build": "npx rollup -c ../../rollup.config.js",
"watch": "npx karma start ../../karma.conf.js",
"prepare": "npx rollup -c ../../rollup.config.js"
},
"publishConfig": {
"access": "public"
},
"homepage": "https://tko.io",

@@ -48,6 +32,21 @@ "licenses": [

"type": "MIT",
"url": "http://www.opensource.org/licenses/mit-license.php"
"url": "https://opensource.org/licenses/MIT"
}
],
"gitHead": "90cdb597db01d50725c567810af092e70a5b32d9"
"exports": {
".": {
"require": "./dist/index.cjs",
"import": "./dist/index.js"
},
"./helpers/*": "./helpers/*"
},
"bugs": {
"url": "https://github.com/knockout/tko/issues"
},
"author": "The Knockout Team",
"repository": {
"type": "git",
"url": "git+https://github.com/knockout/tko.git"
},
"gitHead": "99114c4deded3fc5dbddd5c7c9c63c845a18263b"
}
/*!
* component: binding for web components 🥊 @tko/binding.component@4.0.0-alpha9.0
* (c) The Knockout.js Team - https://tko.io
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
import { virtualElements, makeArray, cloneNodes } from '@tko/utils';
import { unwrap } from '@tko/observable';
import { DescendantBindingHandler, contextFor } from '@tko/bind';
import { JsxObserver, maybeJsx, getOriginalJsxForNode } from '@tko/utils.jsx';
import { NativeProvider } from '@tko/provider.native';
import { LifeCycle } from '@tko/lifecycle';
import registry from '@tko/utils.component';
//
var componentLoadingOperationUniqueId = 0;
class ComponentBinding extends DescendantBindingHandler {
constructor (params) {
super(params);
this.originalChildNodes = makeArray(
virtualElements.childNodes(this.$element)
);
this.computed('computeApplyComponent');
}
cloneTemplateIntoElement (componentName, template, element) {
if (!template) {
throw new Error('Component \'' + componentName + '\' has no template')
}
if (maybeJsx(template)) {
virtualElements.emptyNode(element);
this.addDisposable(new JsxObserver(template, element, null, undefined, true));
} else {
const clonedNodesArray = cloneNodes(template);
virtualElements.setDomNodeChildren(element, clonedNodesArray);
}
}
createViewModel (componentDefinition, element, originalChildNodes, componentParams) {
const componentViewModelFactory = componentDefinition.createViewModel;
return componentViewModelFactory
? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes })
: componentParams // Template-only component
}
/**
* Return the $componentTemplateSlotNodes for the given template
* @param {HTMLElement|jsx} template
*/
makeTemplateSlotNodes (originalChildNodes) {
return Object.assign({}, ...this.genSlotsByName(originalChildNodes))
}
/**
* Iterate over the templateNodes, yielding each '<element slot=name>'
* as an object * of {name: element}.
* @param {HTMLElement} templateNodes
*/
* genSlotsByName (templateNodes) {
for (const node of templateNodes) {
if (node.nodeType !== 1) { continue }
const slotName = node.getAttribute('slot');
if (!slotName) { continue }
yield {[slotName]: node};
}
}
computeApplyComponent () {
const value = unwrap(this.value);
let componentName;
let componentParams;
if (typeof value === 'string') {
componentName = value;
} else {
componentName = unwrap(value.name);
componentParams = NativeProvider.getNodeValues(this.$element) ||
unwrap(value.params);
}
this.latestComponentName = componentName;
if (!componentName) {
throw new Error('No component name specified')
}
this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId;
registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn));
}
makeChildBindingContext ($component) {
const ctxExtender = (ctx) => Object.assign(ctx, {
$component,
$componentTemplateNodes: this.originalChildNodes,
$componentTemplateSlotNodes: this.makeTemplateSlotNodes(
this.originalChildNodes)
});
return this.$context.createChildContext($component, undefined, ctxExtender)
}
applyComponentDefinition (componentName, componentParams, componentDefinition) {
// If this is not the current load operation for this element, ignore it.
if (this.currentLoadingOperationId !== this.loadingOperationId ||
this.latestComponentName !== componentName) { return }
// Clean up previous state
this.cleanUpState();
const element = this.$element;
// Instantiate and bind new component. Implicitly this cleans any old DOM nodes.
if (!componentDefinition) {
throw new Error('Unknown component \'' + componentName + '\'')
}
if (componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, componentDefinition.template, element);
}
const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams);
this.childBindingContext = this.makeChildBindingContext(componentViewModel);
const viewTemplate = componentViewModel && componentViewModel.template;
if (!viewTemplate && !componentDefinition.template) {
throw new Error('Component \'' + componentName + '\' has no template')
}
if (!componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, viewTemplate, element);
}
if (componentViewModel instanceof LifeCycle) {
componentViewModel.anchorTo(this.$element);
}
this.currentViewModel = componentViewModel;
const onBinding = this.onBindingComplete.bind(this, componentViewModel);
this.applyBindingsToDescendants(this.childBindingContext, onBinding);
}
onBindingComplete (componentViewModel, bindingResult) {
if (componentViewModel && componentViewModel.koDescendantsComplete) {
componentViewModel.koDescendantsComplete(this.$element);
}
this.completeBinding(bindingResult);
}
cleanUpState () {
const currentView = this.currentViewModel;
const currentViewDispose = currentView && currentView.dispose;
if (typeof currentViewDispose === 'function') {
currentViewDispose.call(currentView);
}
this.currentViewModel = null;
// Any in-flight loading operation is no longer relevant, so make sure we ignore its completion
this.currentLoadingOperationId = null;
}
dispose () {
this.cleanUpState();
super.dispose();
}
get controlsDescendants () { return true }
static get allowVirtualElements () { return true }
}
/**
* Slots work as follows (you'll note a similarity to vue).
*
* Component template definitions have <slot name='abc'> tags.
*
* <template id='custom-component-template'>
* <slot name='abc'>
*
* Component use these slots with e.g.
*
* <custom-component>
* <template slot='abc'>
*
* When the component template is rendered, the `slot` binding will map
* every binding to its respective slot.
*/
/**
* SlotBinding replaces a slot with
*/
class SlotBinding extends DescendantBindingHandler {
constructor (...params) {
super(...params);
const slotNode = this.getSlot(this.value);
const $slotContext = contextFor(slotNode);
const childContext = this.$context.extend({
$slotContext,
$slotData: $slotContext && $slotContext.$data
});
this.replaceSlotWithNode(this.$element, slotNode);
this.applyBindingsToDescendants(childContext);
}
/**
*
* @param {HTMLElement} nodeToReplace
* @param {HTMLElement}} slotValue
*/
replaceSlotWithNode (nodeInComponentTemplate, slotNode) {
const nodes = this.cloneNodeFromOriginal(slotNode);
virtualElements.emptyNode(nodeInComponentTemplate);
this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true));
}
cloneNodeFromOriginal (node) {
if (!node) { return [] }
const jsx = getOriginalJsxForNode(node);
if (jsx) { return jsx.children }
if ('content' in node) {
const clone = document.importNode(node.content, true);
return [...clone.childNodes]
}
const nodeArray = Array.isArray(node) ? node : [node];
return nodeArray.map(n => n.cloneNode(true))
}
getSlot (slotName) {
const {$componentTemplateSlotNodes} = this.$context;
if (!slotName) {
return $componentTemplateSlotNodes[''] ||
[...this.$context.$componentTemplateNodes]
.filter(n => !n.getAttribute || !n.getAttribute('slot'))
}
return $componentTemplateSlotNodes[slotName]
}
static get allowVirtualElements () { return true }
}
var bindings = { component: ComponentBinding, slot: SlotBinding };
export { bindings };
//# sourceMappingURL=binding.component.es6.js.map
{"version":3,"file":"binding.component.es6.js","sources":["../src/componentBinding.js","../src/slotBinding.js","../src/index.js"],"sourcesContent":["//\n// Binding Handler for Components\n//\n\nimport {\n virtualElements, makeArray, cloneNodes\n} from '@tko/utils'\n\nimport {\n unwrap, isObservable\n} from '@tko/observable'\n\nimport {\n DescendantBindingHandler, applyBindingsToDescendants\n} from '@tko/bind'\n\nimport {\n JsxObserver, maybeJsx\n} from '@tko/utils.jsx'\n\nimport {\n NativeProvider\n} from '@tko/provider.native'\n\nimport {LifeCycle} from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nvar componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n constructor (params) {\n super(params)\n this.originalChildNodes = makeArray(\n virtualElements.childNodes(this.$element)\n )\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement (componentName, template, element) {\n if (!template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element)\n this.addDisposable(new JsxObserver(template, element, null, undefined, true))\n\n } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel (componentDefinition, element, originalChildNodes, componentParams) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes })\n : componentParams // Template-only component\n }\n\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes (originalChildNodes) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes))\n }\n\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement} templateNodes\n */\n * genSlotsByName (templateNodes) {\n for (const node of templateNodes) {\n if (node.nodeType !== 1) { continue }\n const slotName = node.getAttribute('slot')\n if (!slotName) { continue }\n yield {[slotName]: node}\n }\n }\n\n computeApplyComponent () {\n const value = unwrap(this.value)\n let componentName\n let componentParams\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) ||\n unwrap(value.params)\n }\n\n this.latestComponentName = componentName\n\n if (!componentName) {\n throw new Error('No component name specified')\n }\n\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId\n registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext ($component) {\n const ctxExtender = (ctx) => Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(\n this.originalChildNodes)\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition (componentName, componentParams, componentDefinition) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId ||\n this.latestComponentName !== componentName) { return }\n\n // Clean up previous state\n this.cleanUpState()\n\n const element = this.$element\n\n // Instantiate and bind new component. Implicitly this cleans any old DOM nodes.\n if (!componentDefinition) {\n throw new Error('Unknown component \\'' + componentName + '\\'')\n }\n\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element)\n }\n\n const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams)\n\n this.childBindingContext = this.makeChildBindingContext(componentViewModel)\n\n const viewTemplate = componentViewModel && componentViewModel.template\n\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element)\n }\n\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element)\n }\n\n this.currentViewModel = componentViewModel\n\n const onBinding = this.onBindingComplete.bind(this, componentViewModel)\n this.applyBindingsToDescendants(this.childBindingContext, onBinding)\n }\n\n onBindingComplete (componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element)\n }\n this.completeBinding(bindingResult)\n }\n\n cleanUpState () {\n const currentView = this.currentViewModel\n const currentViewDispose = currentView && currentView.dispose\n if (typeof currentViewDispose === 'function') {\n currentViewDispose.call(currentView)\n }\n this.currentViewModel = null\n // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion\n this.currentLoadingOperationId = null\n }\n\n dispose () {\n this.cleanUpState()\n super.dispose()\n }\n\n get controlsDescendants () { return true }\n static get allowVirtualElements () { return true }\n}\n","/**\n * Slots work as follows (you'll note a similarity to vue).\n *\n * Component template definitions have <slot name='abc'> tags.\n *\n * <template id='custom-component-template'>\n * <slot name='abc'>\n *\n * Component use these slots with e.g.\n *\n * <custom-component>\n * <template slot='abc'>\n *\n * When the component template is rendered, the `slot` binding will map\n * every binding to its respective slot.\n */\nimport {\n virtualElements\n} from '@tko/utils'\n\nimport {\n JsxObserver, getOriginalJsxForNode\n} from '@tko/utils.jsx'\n\nimport {\n DescendantBindingHandler, contextFor\n} from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor (...params) {\n super(...params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({\n $slotContext,\n $slotData: $slotContext && $slotContext.$data\n })\n\n this.replaceSlotWithNode(this.$element, slotNode)\n\n this.applyBindingsToDescendants(childContext)\n }\n\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement}} slotValue\n */\n replaceSlotWithNode (nodeInComponentTemplate, slotNode) {\n const nodes = this.cloneNodeFromOriginal(slotNode)\n virtualElements.emptyNode(nodeInComponentTemplate)\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true))\n }\n\n cloneNodeFromOriginal (node) {\n if (!node) { return [] }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) { return jsx.children }\n\n if ('content' in node) {\n const clone = document.importNode(node.content, true)\n return [...clone.childNodes]\n }\n\n const nodeArray = Array.isArray(node) ? node : [node]\n return nodeArray.map(n => n.cloneNode(true))\n }\n\n\n getSlot (slotName) {\n const {$componentTemplateSlotNodes} = this.$context\n\n if (!slotName) {\n return $componentTemplateSlotNodes[''] ||\n [...this.$context.$componentTemplateNodes]\n .filter(n => !n.getAttribute || !n.getAttribute('slot'))\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static get allowVirtualElements () { return true }\n}\n","\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"],"names":["component","slot"],"mappings":"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"}
/*!
* component: binding for web components 🥊 @tko/binding.component@4.0.0-alpha9.0
* (c) The Knockout.js Team - https://tko.io
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
import { virtualElements, makeArray, cloneNodes } from '@tko/utils';
import { unwrap } from '@tko/observable';
import { DescendantBindingHandler, contextFor } from '@tko/bind';
import { JsxObserver, maybeJsx, getOriginalJsxForNode } from '@tko/utils.jsx';
import { NativeProvider } from '@tko/provider.native';
import { LifeCycle } from '@tko/lifecycle';
import registry from '@tko/utils.component';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __values(o) {
var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
if (m) return m.call(o);
return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {
for (var ar = [], i = 0; i < arguments.length; i++)
ar = ar.concat(__read(arguments[i]));
return ar;
}
//
var componentLoadingOperationUniqueId = 0;
var ComponentBinding = /** @class */ (function (_super) {
__extends(ComponentBinding, _super);
function ComponentBinding(params) {
var _this = _super.call(this, params) || this;
_this.originalChildNodes = makeArray(virtualElements.childNodes(_this.$element));
_this.computed('computeApplyComponent');
return _this;
}
ComponentBinding.prototype.cloneTemplateIntoElement = function (componentName, template, element) {
if (!template) {
throw new Error('Component \'' + componentName + '\' has no template');
}
if (maybeJsx(template)) {
virtualElements.emptyNode(element);
this.addDisposable(new JsxObserver(template, element, null, undefined, true));
}
else {
var clonedNodesArray = cloneNodes(template);
virtualElements.setDomNodeChildren(element, clonedNodesArray);
}
};
ComponentBinding.prototype.createViewModel = function (componentDefinition, element, originalChildNodes, componentParams) {
var componentViewModelFactory = componentDefinition.createViewModel;
return componentViewModelFactory
? componentViewModelFactory.call(componentDefinition, componentParams, { element: element, templateNodes: originalChildNodes })
: componentParams; // Template-only component
};
/**
* Return the $componentTemplateSlotNodes for the given template
* @param {HTMLElement|jsx} template
*/
ComponentBinding.prototype.makeTemplateSlotNodes = function (originalChildNodes) {
return Object.assign.apply(Object, __spread([{}], this.genSlotsByName(originalChildNodes)));
};
/**
* Iterate over the templateNodes, yielding each '<element slot=name>'
* as an object * of {name: element}.
* @param {HTMLElement} templateNodes
*/
ComponentBinding.prototype.genSlotsByName = function (templateNodes) {
var e_1, _a, _b, templateNodes_1, templateNodes_1_1, node, slotName, e_1_1;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
_c.trys.push([0, 5, 6, 7]);
templateNodes_1 = __values(templateNodes), templateNodes_1_1 = templateNodes_1.next();
_c.label = 1;
case 1:
if (!!templateNodes_1_1.done) return [3 /*break*/, 4];
node = templateNodes_1_1.value;
if (node.nodeType !== 1) {
return [3 /*break*/, 3];
}
slotName = node.getAttribute('slot');
if (!slotName) {
return [3 /*break*/, 3];
}
return [4 /*yield*/, (_b = {}, _b[slotName] = node, _b)];
case 2:
_c.sent();
_c.label = 3;
case 3:
templateNodes_1_1 = templateNodes_1.next();
return [3 /*break*/, 1];
case 4: return [3 /*break*/, 7];
case 5:
e_1_1 = _c.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 7];
case 6:
try {
if (templateNodes_1_1 && !templateNodes_1_1.done && (_a = templateNodes_1["return"])) _a.call(templateNodes_1);
}
finally { if (e_1) throw e_1.error; }
return [7 /*endfinally*/];
case 7: return [2 /*return*/];
}
});
};
ComponentBinding.prototype.computeApplyComponent = function () {
var _this = this;
var value = unwrap(this.value);
var componentName;
var componentParams;
if (typeof value === 'string') {
componentName = value;
}
else {
componentName = unwrap(value.name);
componentParams = NativeProvider.getNodeValues(this.$element) ||
unwrap(value.params);
}
this.latestComponentName = componentName;
if (!componentName) {
throw new Error('No component name specified');
}
this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId;
registry.get(componentName, function (defn) { return _this.applyComponentDefinition(componentName, componentParams, defn); });
};
ComponentBinding.prototype.makeChildBindingContext = function ($component) {
var _this = this;
var ctxExtender = function (ctx) { return Object.assign(ctx, {
$component: $component,
$componentTemplateNodes: _this.originalChildNodes,
$componentTemplateSlotNodes: _this.makeTemplateSlotNodes(_this.originalChildNodes)
}); };
return this.$context.createChildContext($component, undefined, ctxExtender);
};
ComponentBinding.prototype.applyComponentDefinition = function (componentName, componentParams, componentDefinition) {
// If this is not the current load operation for this element, ignore it.
if (this.currentLoadingOperationId !== this.loadingOperationId ||
this.latestComponentName !== componentName) {
return;
}
// Clean up previous state
this.cleanUpState();
var element = this.$element;
// Instantiate and bind new component. Implicitly this cleans any old DOM nodes.
if (!componentDefinition) {
throw new Error('Unknown component \'' + componentName + '\'');
}
if (componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, componentDefinition.template, element);
}
var componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams);
this.childBindingContext = this.makeChildBindingContext(componentViewModel);
var viewTemplate = componentViewModel && componentViewModel.template;
if (!viewTemplate && !componentDefinition.template) {
throw new Error('Component \'' + componentName + '\' has no template');
}
if (!componentDefinition.template) {
this.cloneTemplateIntoElement(componentName, viewTemplate, element);
}
if (componentViewModel instanceof LifeCycle) {
componentViewModel.anchorTo(this.$element);
}
this.currentViewModel = componentViewModel;
var onBinding = this.onBindingComplete.bind(this, componentViewModel);
this.applyBindingsToDescendants(this.childBindingContext, onBinding);
};
ComponentBinding.prototype.onBindingComplete = function (componentViewModel, bindingResult) {
if (componentViewModel && componentViewModel.koDescendantsComplete) {
componentViewModel.koDescendantsComplete(this.$element);
}
this.completeBinding(bindingResult);
};
ComponentBinding.prototype.cleanUpState = function () {
var currentView = this.currentViewModel;
var currentViewDispose = currentView && currentView.dispose;
if (typeof currentViewDispose === 'function') {
currentViewDispose.call(currentView);
}
this.currentViewModel = null;
// Any in-flight loading operation is no longer relevant, so make sure we ignore its completion
this.currentLoadingOperationId = null;
};
ComponentBinding.prototype.dispose = function () {
this.cleanUpState();
_super.prototype.dispose.call(this);
};
Object.defineProperty(ComponentBinding.prototype, "controlsDescendants", {
get: function () { return true; },
enumerable: true,
configurable: true
});
Object.defineProperty(ComponentBinding, "allowVirtualElements", {
get: function () { return true; },
enumerable: true,
configurable: true
});
return ComponentBinding;
}(DescendantBindingHandler));
/**
* SlotBinding replaces a slot with
*/
var SlotBinding = /** @class */ (function (_super) {
__extends(SlotBinding, _super);
function SlotBinding() {
var params = [];
for (var _i = 0; _i < arguments.length; _i++) {
params[_i] = arguments[_i];
}
var _this = _super.apply(this, __spread(params)) || this;
var slotNode = _this.getSlot(_this.value);
var $slotContext = contextFor(slotNode);
var childContext = _this.$context.extend({
$slotContext: $slotContext,
$slotData: $slotContext && $slotContext.$data
});
_this.replaceSlotWithNode(_this.$element, slotNode);
_this.applyBindingsToDescendants(childContext);
return _this;
}
/**
*
* @param {HTMLElement} nodeToReplace
* @param {HTMLElement}} slotValue
*/
SlotBinding.prototype.replaceSlotWithNode = function (nodeInComponentTemplate, slotNode) {
var nodes = this.cloneNodeFromOriginal(slotNode);
virtualElements.emptyNode(nodeInComponentTemplate);
this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true));
};
SlotBinding.prototype.cloneNodeFromOriginal = function (node) {
if (!node) {
return [];
}
var jsx = getOriginalJsxForNode(node);
if (jsx) {
return jsx.children;
}
if ('content' in node) {
var clone = document.importNode(node.content, true);
return __spread(clone.childNodes);
}
var nodeArray = Array.isArray(node) ? node : [node];
return nodeArray.map(function (n) { return n.cloneNode(true); });
};
SlotBinding.prototype.getSlot = function (slotName) {
var $componentTemplateSlotNodes = this.$context.$componentTemplateSlotNodes;
if (!slotName) {
return $componentTemplateSlotNodes[''] ||
__spread(this.$context.$componentTemplateNodes).filter(function (n) { return !n.getAttribute || !n.getAttribute('slot'); });
}
return $componentTemplateSlotNodes[slotName];
};
Object.defineProperty(SlotBinding, "allowVirtualElements", {
get: function () { return true; },
enumerable: true,
configurable: true
});
return SlotBinding;
}(DescendantBindingHandler));
var bindings = { component: ComponentBinding, slot: SlotBinding };
export { bindings };
//# sourceMappingURL=binding.component.js.map
{"version":3,"file":"binding.component.js","sources":["../../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":[],"mappings":"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"}