@tko/binding.component
Advanced tools
@@ -1,2 +0,2 @@ | ||
| // @tko/binding.component 🥊 4.0.0 ESM | ||
| // @tko/binding.component 🥊 4.0.1 ESM | ||
| "use strict"; | ||
@@ -12,2 +12,8 @@ import { virtualElements, makeArray, cloneNodes } from "@tko/utils"; | ||
| export default class ComponentBinding extends DescendantBindingHandler { | ||
| childBindingContext; | ||
| currentLoadingOperationId; | ||
| currentViewModel; | ||
| latestComponentName; | ||
| loadingOperationId; | ||
| originalChildNodes; | ||
| constructor(params) { | ||
@@ -14,0 +20,0 @@ super(params); |
@@ -5,4 +5,4 @@ { | ||
| "sourcesContent": ["//\n// Binding Handler for Components\n//\n\nimport { virtualElements, makeArray, cloneNodes } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport { DescendantBindingHandler } from '@tko/bind'\n\nimport { JsxObserver, maybeJsx } from '@tko/utils.jsx'\n\nimport { NativeProvider } from '@tko/provider.native'\n\nimport { LifeCycle } from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nimport type { BindingContext } from '@tko/bind'\n\nlet componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n childBindingContext: BindingContext\n currentLoadingOperationId: number | null\n currentViewModel: any\n latestComponentName: string\n loadingOperationId: number\n originalChildNodes: Node[]\n constructor(params: any) {\n super(params)\n this.originalChildNodes = makeArray(virtualElements.childNodes(this.$element as Node))\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement(componentName: string, template: any, element: Node) {\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 } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel(componentDefinition: any, element: Node, originalChildNodes: Node[], componentParams: any) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, {\n element,\n templateNodes: originalChildNodes\n })\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: HTMLElement[]) {\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: HTMLElement[]): Generator<{ [key: string]: HTMLElement }, void, unknown> {\n for (const node of templateNodes) {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n const slotName = node.getAttribute('slot')\n if (!slotName) {\n continue\n }\n yield { [slotName]: node }\n }\n }\n\n computeApplyComponent() {\n const value = unwrap(this.value)\n let componentName: string\n let componentParams: any\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) || 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: any) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext($component: any): any {\n const ctxExtender = (ctx: any) =>\n Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(this.originalChildNodes as HTMLElement[])\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition(componentName: string, componentParams: any, componentDefinition: any) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId || this.latestComponentName !== componentName) {\n return\n }\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(\n componentDefinition,\n element,\n this.originalChildNodes,\n componentParams\n )\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 override dispose() {\n this.cleanUpState()\n super.dispose()\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n}\n"], | ||
| "mappings": "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", | ||
| "mappings": "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", | ||
| "names": [] | ||
| } |
+3
-3
@@ -1,5 +0,5 @@ | ||
| // @tko/binding.component 🥊 4.0.0 ESM | ||
| // @tko/binding.component 🥊 4.0.1 ESM | ||
| "use strict"; | ||
| import component from "./componentBinding"; | ||
| import slot from "./slotBinding"; | ||
| import component from "./componentBinding.js"; | ||
| import slot from "./slotBinding.js"; | ||
| export const bindings = { component, slot }; |
+3
-3
@@ -1,5 +0,5 @@ | ||
| // @tko/binding.component 🥊 4.0.0 MJS | ||
| // @tko/binding.component 🥊 4.0.1 MJS | ||
| "use strict"; | ||
| import component from "./componentBinding"; | ||
| import slot from "./slotBinding"; | ||
| import component from "./componentBinding.js"; | ||
| import slot from "./slotBinding.js"; | ||
| export const bindings = { component, slot }; |
@@ -1,2 +0,2 @@ | ||
| // @tko/binding.component 🥊 4.0.0 ESM | ||
| // @tko/binding.component 🥊 4.0.1 ESM | ||
| "use strict"; | ||
@@ -3,0 +3,0 @@ import { virtualElements } from "@tko/utils"; |
| { | ||
| "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 { virtualElements } from '@tko/utils'\n\nimport { JsxObserver, getOriginalJsxForNode } from '@tko/utils.jsx'\n\nimport { DescendantBindingHandler, contextFor } from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor(params: any) {\n super(params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({ $slotContext, $slotData: $slotContext && $slotContext.$data })\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: HTMLElement, slotNode: Node): void {\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: Node): any[] {\n if (!node) {\n return []\n }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) {\n return jsx.children\n }\n\n if ('content' in node) {\n const clone = document.importNode(node.content as Node, 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 getSlot(slotName: string): Node {\n const { $componentTemplateSlotNodes }: any = this.$context\n\n if (!slotName) {\n return (\n $componentTemplateSlotNodes['']\n || [...(this.$context as any).$componentTemplateNodes].filter(n => !n.getAttribute || !n.getAttribute('slot'))\n )\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static override get allowVirtualElements(): true {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAgBA,SAAS,uBAAuB;AAEhC,SAAS,aAAa,6BAA6B;AAEnD,SAAS,0BAA0B,kBAAkB;AAKrD,qBAAqB,oBAAoB,yBAAyB;AAAA,EAChE,YAAY,QAAa;AACvB,UAAM,MAAM;AACZ,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK;AACxC,UAAM,eAAe,WAAW,QAAQ;AAExC,UAAM,eAAe,KAAK,SAAS,OAAO,EAAE,cAAc,WAAW,gBAAgB,aAAa,MAAM,CAAC;AAEzG,SAAK,oBAAoB,KAAK,UAAU,QAAQ;AAEhD,SAAK,2BAA2B,YAAY;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,yBAAsC,UAAsB;AAC9E,UAAM,QAAQ,KAAK,sBAAsB,QAAQ;AACjD,oBAAgB,UAAU,uBAAuB;AACjD,SAAK,cAAc,IAAI,YAAY,OAAO,yBAAyB,QAAW,QAAW,IAAI,CAAC;AAAA,EAChG;AAAA,EAEA,sBAAsB,MAAmB;AACvC,QAAI,CAAC,MAAM;AACT,aAAO,CAAC;AAAA,IACV;AACA,UAAM,MAAM,sBAAsB,IAAI;AACtC,QAAI,KAAK;AACP,aAAO,IAAI;AAAA,IACb;AAEA,QAAI,aAAa,MAAM;AACrB,YAAM,QAAQ,SAAS,WAAW,KAAK,SAAiB,IAAI;AAC5D,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,EAEA,QAAQ,UAAwB;AAC9B,UAAM,EAAE,4BAA4B,IAAS,KAAK;AAElD,QAAI,CAAC,UAAU;AACb,aACE,4BAA4B,EAAE,KAC3B,CAAC,GAAI,KAAK,SAAiB,uBAAuB,EAAE,OAAO,OAAK,CAAC,EAAE,gBAAgB,CAAC,EAAE,aAAa,MAAM,CAAC;AAAA,IAEjH;AAEA,WAAO,4BAA4B,QAAQ;AAAA,EAC7C;AAAA,EAEA,WAAoB,uBAA6B;AAC/C,WAAO;AAAA,EACT;AACF;", | ||
| "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 { virtualElements } from '@tko/utils'\n\nimport { JsxObserver, getOriginalJsxForNode } from '@tko/utils.jsx'\n\nimport { DescendantBindingHandler, contextFor } from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor(params: any) {\n super(params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({ $slotContext, $slotData: $slotContext && $slotContext.$data })\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: HTMLElement, slotNode: Node): void {\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: Node): any[] {\n if (!node) {\n return []\n }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) {\n return jsx.children\n }\n\n if ('content' in node) {\n const clone = document.importNode(node.content as Node, 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 getSlot(slotName: string): Node {\n const { $componentTemplateSlotNodes }: any = this.$context\n\n if (!slotName) {\n return (\n $componentTemplateSlotNodes[''] ||\n [...(this.$context as any).$componentTemplateNodes].filter(n => !n.getAttribute || !n.getAttribute('slot'))\n )\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static override get allowVirtualElements(): true {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAgBA,SAAS,uBAAuB;AAEhC,SAAS,aAAa,6BAA6B;AAEnD,SAAS,0BAA0B,kBAAkB;AAKrD,qBAAqB,oBAAoB,yBAAyB;AAAA,EAChE,YAAY,QAAa;AACvB,UAAM,MAAM;AACZ,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK;AACxC,UAAM,eAAe,WAAW,QAAQ;AAExC,UAAM,eAAe,KAAK,SAAS,OAAO,EAAE,cAAc,WAAW,gBAAgB,aAAa,MAAM,CAAC;AAEzG,SAAK,oBAAoB,KAAK,UAAU,QAAQ;AAEhD,SAAK,2BAA2B,YAAY;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBAAoB,yBAAsC,UAAsB;AAC9E,UAAM,QAAQ,KAAK,sBAAsB,QAAQ;AACjD,oBAAgB,UAAU,uBAAuB;AACjD,SAAK,cAAc,IAAI,YAAY,OAAO,yBAAyB,QAAW,QAAW,IAAI,CAAC;AAAA,EAChG;AAAA,EAEA,sBAAsB,MAAmB;AACvC,QAAI,CAAC,MAAM;AACT,aAAO,CAAC;AAAA,IACV;AACA,UAAM,MAAM,sBAAsB,IAAI;AACtC,QAAI,KAAK;AACP,aAAO,IAAI;AAAA,IACb;AAEA,QAAI,aAAa,MAAM;AACrB,YAAM,QAAQ,SAAS,WAAW,KAAK,SAAiB,IAAI;AAC5D,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,EAEA,QAAQ,UAAwB;AAC9B,UAAM,EAAE,4BAA4B,IAAS,KAAK;AAElD,QAAI,CAAC,UAAU;AACb,aACE,4BAA4B,EAAE,KAC9B,CAAC,GAAI,KAAK,SAAiB,uBAAuB,EAAE,OAAO,OAAK,CAAC,EAAE,gBAAgB,CAAC,EAAE,aAAa,MAAM,CAAC;AAAA,IAE9G;AAEA,WAAO,4BAA4B,QAAQ;AAAA,EAC7C;AAAA,EAEA,WAAoB,uBAA6B;AAC/C,WAAO;AAAA,EACT;AACF;", | ||
| "names": [] | ||
| } |
+15
-18
| { | ||
| "version": "4.0.0", | ||
| "version": "4.0.1", | ||
| "name": "@tko/binding.component", | ||
| "description": "component: binding for web components", | ||
| "module": "dist/binding.component.js", | ||
| "module": "dist/index.js", | ||
| "license": "MIT", | ||
| "dependencies": { | ||
| "@tko/bind": "^4.0.0", | ||
| "@tko/lifecycle": "^4.0.0", | ||
| "@tko/observable": "^4.0.0", | ||
| "@tko/provider": "^4.0.0", | ||
| "@tko/utils": "^4.0.0", | ||
| "@tko/utils.component": "^4.0.0", | ||
| "@tko/utils.jsx": "^4.0.0", | ||
| "@tko/bind": "^4.0.1", | ||
| "@tko/lifecycle": "^4.0.1", | ||
| "@tko/observable": "^4.0.1", | ||
| "@tko/provider": "^4.0.1", | ||
| "@tko/provider.native": "^4.0.1", | ||
| "@tko/utils": "^4.0.1", | ||
| "@tko/utils.component": "^4.0.1", | ||
| "@tko/utils.jsx": "^4.0.1", | ||
| "tslib": "^2.2.0" | ||
| }, | ||
| "files": [ | ||
| "dist/", | ||
| "helpers/" | ||
| "dist/" | ||
| ], | ||
| "karma": { | ||
| "frameworks": [ | ||
| "jasmine" | ||
| ] | ||
| }, | ||
| "homepage": "https://tko.io", | ||
@@ -37,4 +32,3 @@ "licenses": [ | ||
| "import": "./dist/index.js" | ||
| }, | ||
| "./helpers/*": "./helpers/*" | ||
| } | ||
| }, | ||
@@ -48,3 +42,6 @@ "bugs": { | ||
| "url": "git+https://github.com/knockout/tko.git" | ||
| }, | ||
| "scripts": { | ||
| "build": "bun ../../tools/build.ts" | ||
| } | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
0
-100%45643
-88.8%9
12.5%445
-89.58%1
Infinity%+ Added
Updated
Updated
Updated
Updated
Updated
Updated
Updated