diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ed5755 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +npm-debug.log +dist +README.md +package-lock.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..567dadd --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "preact-shadow-root", + "amdName": "Shadow", + "version": "1.0.0", + "description": "Render a Preact subtree into the Shadow DOM.", + "source": "preact-shadow-root.js", + "main": "dist/preact-shadow-root.js", + "module": "dist/preact-shadow-root.es.js", + "umd:main": "dist/preact-shadow-root.umd.js", + "scripts": { + "build": "microbundle", + "prepare": "npm run -s build", + "test": "eslint src && npm run -s build" + }, + "eslintConfig": { + "extends": "eslint-config-developit" + }, + "files": [ + "preact-shadow-root.js", + "dist" + ], + "keywords": [ + "preact", + "component", + "shadow root", + "shadow dom" + ], + "author": "Jason Miller ", + "license": "MIT", + "devDependencies": { + "eslint": "^4.6.1", + "eslint-config-developit": "^1.1.1", + "microbundle": "^0.3.1" + }, + "peerDependencies": { + "preact": "*" + } +} diff --git a/preact-shadow-root.js b/preact-shadow-root.js new file mode 100644 index 0000000..b1311cf --- /dev/null +++ b/preact-shadow-root.js @@ -0,0 +1,20 @@ +import { render } from 'preact'; + +/* Shadow Root component */ +export default class Shadow { + shouldComponentUpdate(nextProps) { + this.update(nextProps); + return false; + } + componentDidMount() { + let parent = this.base && this.base.parentNode; + if (parent) { + this.shadow = parent.attachShadow({ mode: 'open' }); + this.update(this.props); + } + } + update(props) { + render(props.children[0], this.shadow, this.shadow.firstChild); + } + render() {} +}