
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
@9am/ctrl-panel
Advanced tools
See my blog post on 9am.github.io
| Element | Screenshot | Varient | Description | Live Demo |
|---|---|---|---|---|
| ctrl-panel | ------- | ------- | The root element. | demo |
| ctrl-group | ------- | ------- | Group ctrl-* together to shape the value. | demo |
| ctrl-slider | ![]() | ![]() | A numblic slider. | demo |
| ctrl-clamp | ![]() | ![]() | Select a tuple low-high value. | demo |
| ctrl-switch | ![]() | ![]() | A ON/OFF switch. | demo |
| ctrl-radio | ![]() | ![]() | Multiple/Single switch. | demo |
| ctrl-vector | ![]() | Select a tuple vector on a 2D surface. | demo | |
| ctrl-text | ![]() | Text input. | demo | |
| ctrl-color | ![]() | Color picker. | demo |
npm install @9am/ctrl-panel
<ctrl-panel theme="neumorphism">
<ctrl-slider name="slider">slider</ctrl-slider>
<ctrl-clamp name="clamp">clamp</ctrl-clamp>
<ctrl-vector name="vector">vector</ctrl-vector>
<ctrl-switch name="switch">switch</ctrl-switch>
<ctrl-radio name="radio">
<ctrl-switch name="a">A</ctrl-switch>
<ctrl-switch name="b">B</ctrl-switch>
<ctrl-switch name="c" default="true">C</ctrl-switch>
</ctrl-radio>
<ctrl-group name="group">
<ctrl-text name="text">text</ctrl-text>
<ctrl-color name="color">color</ctrl-color>
</ctrl-group>
</ctrl-panel>
import '@9am/ctrl-panel';
// import '@9am/ctrl-panel/theme.css'; // css to enable default themes.
document.querySelector('ctrl-panel').addEventListener('CHANGE', (evt) => {
console.log('[panel value]:', evt.currentTarget.value);
/* output:
* {
* slider: 5,
* clamp: [0, 10],
* vector: [0, 0],
* switch: false,
* radio: 'c',
* group: {
* text: '',
* color: '#000000'
* }
* }
*/
});
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | name* | string | required | value key |
| attribute | orientation | h | v | h | layout direction |
| attribute | type | object | array | object | value shape |
| ---- | ||||
| property | get value | Value | {} | value |
| ---- | ||||
| slot | label | html tag | label | |
| slot | default | ctrl-* | '' | value |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | extends <ctrl-group> | ---- | ---- | ---- |
| attribute | theme | string | flat | theme (flat | oldschool | neumorphism) |
| attribute | width | css length | auto | panel width |
| attribute | height | css length | auto | panel height |
| attribute | placement | top-left | top-right | bottom-left | bottom-right | '' | if placement is set, panel will be positioned as fixed, and with a button to toggle the visibility. |
| ---- | ||||
| property | extends <ctrl-group> | ---- | ---- | ---- |
| ---- | ||||
| slot | extends <ctrl-group> | ---- | ---- | ---- |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | extends <ctrl-group> | ---- | ---- | ---- |
| attribute | multiple | boolean | false | enable select multiple items |
| ---- | ||||
| property | extends <ctrl-group> | ---- | ---- | ---- |
| ---- | ||||
| slot | extends <ctrl-group> | ---- | ---- | ---- |
| slot | default | ctrl-switch | '' | value |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | name* | string | required | value key |
| attribute | orientation | h | v | h | layout direction |
| attribute | type | range | knob | range | slider type |
| attribute | min | number | 0 | min value |
| attribute | max | number | 10 | max value |
| attribute | step | number | 'any' | 1 | step interval |
| attribute | default | number | 5 | default value |
| ---- | ||||
| property | get value | number | 5 | value |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | extends <ctrl-slider> | ---- | ---- | ---- |
| attribute | default | string(JSON) | '[0,10]' | default value |
| ---- | ||||
| property | extends <ctrl-slider> | ---- | ---- | ---- |
| property | get value | number | [0,10] | value |
| ---- | ||||
| slot | extends <ctrl-slider> | ---- | ---- | ---- |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | name* | string | required | value key |
| attribute | orientation | h | v | h | layout direction |
| attribute | type | range | toggle | toggle | slider type |
| attribute | default | boolean | default value | |
| ---- | ||||
| property | get value | number | false | value |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | name* | string | required | value key |
| attribute | default | string | '' | default value |
| ---- | ||||
| property | get value | number | '' | value |
| Doc | Name | Type | Default | Description |
|---|---|---|---|---|
| attribute | name* | string | required | value key |
| attribute | orientation | h | v | h | layout direction |
| attribute | default | string | #000000 | default value |
| ---- | ||||
| property | get value | number | #000000 | value |
{
type: 'CHANGE',
detail: {
name: string, // attribute 'name' of <ctrl-*>
value: Value, // property 'value' of <ctrl-*>
}
}
FAQs
A simple control panel.
We found that @9am/ctrl-panel 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
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.