
Security News
TypeScript is Porting Its Compiler to Go for 10x Faster Builds
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
ember-block-slots
Advanced tools
Adds contextual layout to component interfaces.
Ember has a number of tools for component authors: a yield, block params, contextual components and block defaults (else/inverse). However, since only a single yield is available, Ember does not provide a way for component authors to hide complex layouts behind a component interface. For authors of higher-order components this is a problem.
Suppose you want to create a higher-order component that acts as an inventory browser.
You want to arrange a title bar on the top of the page, a filter pane on the left and a list on the right. The title bar can be customized with summary information (text, badges, graphs) and contexual actions (e.g. keyword search, add). The filter pane needs to be wired to the list, but filtering should be handled in the route/controller. The list has a set of potential controls (e.g. sort, paginate, expand/collapse) and contextual actions based on the items selected that should also be handled in the route/controller.
The first choice is to pre-select all the components (e.g. form, list, buttons, links, graphs) to fill these roles and proxy the relevant properties through the component interface, modifying the interface whenever additional features are available. Maybe your underlying components are stable and maybe your feature set never expands, but don't bet the house on it; it's more likely that you'll need to rev and release your component based on the progression of the components you select. This means a lot of maintenance and a broad interface - not ideal.
The second choice is to loosely couple the components, providing a number of CSS classes and rely on the consumer to wrap the components in the correct HTML to layout the pattern as required. This works fine for a single instance, but before you know it there are 10 instances of the pattern in your product and as the design team keeps making minor (or major) tweaks and each of your browsers is starting to look a bit different...
You use this addon :wink:
With multiple yield targets available, you're now able to combine the structured DOM from the first choice with the loose coupling of the second choice. Now consumers of the addon don't need to worry about:
ember install ember-block-slots
Import and apply the SlotsMixin in the component where you want to provide multiple yield slots.
import Ember from 'ember'
import SlotsMixin from 'ember-block-slots'
export default Ember.Component.extend(SlotsMixin, {
In the component template, yield once to allow instances to register block slots, then provide one or more named yield slots
{{yield}}
{{#yield-slot 'name'}}
<div class='surrounding-layout'>
{{yield}}
</div>
{{/yield-slot}}
When using the component, target content for the yield slots using block slots
{{#pattern-component}}
{{#block-slot 'name'}}
<div>Content for the yield</div>
{{/block-slot}}
{{/pattern-component}}
Of course, this is only a glimpse at the interface designs now available to you. Block slots also support:
See the demo for additional syntax and examples.
Found a corner case? Thought of a design pattern we haven't listed? PRs and issues are welcome!
This project uses pr-bumper https://github.com/ciena-blueplanet/pr-bumper to publish to npm - add a semver comment in your PR in the following format: #fix# / #minor# / #major#
We also lint the project using eslint - to check for errors and fix basic style issues run ./node_modules/.bin/eslint . --fix
in the root of the project (probably a better command for this)
Thanks to @runspired for the initial inspiration for this implementation.
FAQs
Support for targeted yield slots within a component block
The npm package ember-block-slots receives a total of 509 weekly downloads. As such, ember-block-slots popularity was classified as not popular.
We found that ember-block-slots demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
TypeScript is porting its compiler to Go, delivering 10x faster builds, lower memory usage, and improved editor performance for a smoother developer experience.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.