
Research
Namastex.ai npm Packages Hit with TeamPCP-Style CanisterWorm Malware
Malicious Namastex.ai npm packages appear to replicate TeamPCP-style Canister Worm tradecraft, including exfiltration and self-propagation.
@sygnas/vue-tabs
Advanced tools
Vue でカスタマイズ可能なタブナビゲーションを実装。
Vue.js でシンプルなタブナビゲーションを使いたい人向け。
isBlank、href を無指定でもOKにした<VueTabs> の handlChange属性を廃止getActiveId()、setActiveId() を廃止useTabControl() を新設。変更通知、getActiveId() などは useTabControl() 経由で取得するprevTab()、nextTab() を新設addChangeListener()、タブクリック受け取りに addClickListener() を新設v-on:change を指定してアクティブなタブの ID を取得できるようにしたnpm install --save @sygnas/vue-tabs
Vue2 で使う時は古いバージョンです。 使い方も違うので README.md を参照してください。
npm install --save @sygnas/vue-tabs@^1.2.0
<section id="app-tabs1">
<vue-tabs
group="tabGroup1"
default="tab1"
:items="[
{id: 'tab1', value:'タブ1'},
{id: 'tab2', value:'タブ2'},
{href:'http://google.com/', value:'Google'},
{href:'http://google.com/', value:'Google別窓', isBlank:true},
]"
>
</vue-tabs>
<vue-tabs-content group="tabGroup1" tab-id="tab1">
タブ1の内容
</vue-tabs-content>
<vue-tabs-content group="tabGroup1" tab-id="tab2">
タブ2の内容
</vue-tabs-content>
</section>
import { createApp } from 'vue';
import { VueTabs, VueTabsContent } from '@sygnas/vue-tabs';
const app = createApp({
components: {
VueTabs,
VueTabsContent,
},
});
app.mount('#app-tabs1');
<vue-tabs
group="tabGroup1"
default="tab1"
:items="[
{id: 'tab1', value:'タブ1'},
{id: 'tab2', value:'タブ2'},
{href:'http://google.com/', value:'Google'},
{href:'http://google.com/', value:'Google別窓', isBlank:true},
]"
></vue-tabs>
group属性でタブグループに名前を付ける。
default属性で初期表示するタブの ID を指定する。
items属性でタブボタンを指定。href を指定したものはタブ切替ではなく単純なリンクになる。
<vue-tabs-content group="tabGroup1" tab-id="tab1">
タブ1の内容
</vue-tabs-content>
group属性に vue-tabs と同じ文字列を記入。
tab-id属性に vue-tabs の items属性に対応する文字列を記入。
<vue-tabs-content> は <div> に置き換えられる。
別のタグに変更するには tag 属性で指定する。
<section id="app-tabs2">
<vue-tabs
group="tabGroup2"
default="tabA"
:items="[
{id: 'tabA', value:'タブA'},
{id: 'tabB', value:'タブB'},
]"
auto="8000"
is-stop-auto="true"
>
</vue-tabs>
<transition name="e-v-transition_fade" mode="out-in">
<div v-if="activeId === 'tabA'">タブAの内容</div>
<div v-else-if="activeId === 'tabB'">タブBの内容</div>
</transition>
<button @click="prevTab">前のタブ</button>
<button @click="nextTab">次のタブ</button>
<button @click="changeToB">タブBに切替</button>
</section>
import { createApp } from 'vue';
import { VueTabs, useTabControl } from '@sygnas/vue-tabs';
// グループIDを指定してタブの外部コントローラーを生成
const tabControl = useTabControl('tabGroup2');
const app2 = createApp({
components: {
VueTabs,
},
computed: {
activeId() {
// テンプレート側でアクティブIDを受け取れるように computed に登録
return tabControl.activeId.value;
},
},
methods: {
changeToB() {
// タブIDを指定して変更
tabControl.setActiveId('tabB');
},
prevTab() {
// 前のタブ
tabControl.prevTab();
},
nextTab() {
// 次のタブ
tabControl.nextTab();
},
},
mounted() {
// タブの変更通知を受け取る関数を渡す
tabControl.addChangeListener((ev) => {
console.log('tab changed', ev.detail);
});
},
});
app2.mount('#app-tabs2');
<transition name="e-v-transition_fade" mode="out-in">
<div v-if="activeId === 'tabA'">タブAの内容</div>
<div v-else-if="activeId === 'tabB'">タブBの内容</div>
</transition>
<transition> を使いたいなら <VueTabsContent> は使わない。
インポートした useTabControl() の activeId と v-if属性を使って切り替える。
const tabControl = useTabControl('tabGroup2');
タブを外部から操作するためのコントローラーを作成。
// タブの変更通知を受け取る関数を渡す
tabControl.addChangeListener((ev) => {
console.log('tab changed', ev.detail);
});
タブの変更イベントを受け取るためにリスナー関数を登録する。
内部は EventTarget と CustomEvent で実装している。
TypeScript で型エラーが出るなら下記のように (〜) as EventListener で囲む。
tabControl.addChangeListener(((ev: CustomEvent) => {
console.log('tab changed', ev.detail);
}) as EventListener);
*は必須属性
| 属性 | 初期値 | 説明 |
|---|---|---|
| group * | タブグループ ID | |
| default * | デフォルトでアクティブ(表示)するタブ ID | |
| items * | タブメニューアイテムの配列(後述) | |
| use-hash | false | タブのアクティブ ID を location.hash に付ける |
| is-list-tag | false | true を指定すると <ul> タグを使用する。デフォルトは <div> が使われる |
| auto | ミリ秒を指定すると自動で次のタブに切り替わる | |
| is-stop-auto | タブをクリックした時に auto の自動切り替えを止める | |
| class-tabs | 'c-tabmenu' | タブグループのクラス名 |
| class-item | 'c-tabmenu__item' | is-list-tag が true の時に使用。<li> のクラス名 |
| class-link | 'c-tabmenu__link' | タブのクラス名 |
<vue-tabs :items="[{...}]"> の内容。
*は必須属性
| 属性 | 初期値 | 説明 |
|---|---|---|
| id * | タブ ID | |
| value * | タブに掲載する内容。例:タブ1 | |
| href | 外部リンクの時に使う | |
| isBlank | false | 別窓を開くなら true |
| 属性 | 初期値 | 説明 |
|---|---|---|
| group * | タブグループ ID | |
| tabId * | タブ切替の識別 ID | |
| tag | 'div' | <vue-tabs-content> 展開時の HTML タグ |
タブのコントローラーを生成する。 タブを外部から操作したり、変更を受け取れる。 複数のタブグループを使いたい時はそれぞれに対応したtabControlを作る必要がある。
import { VueTabs, useTabControl } from '@sygnas/vue-tabs';
// コントローラー生成
const tabControl = useTabControl('タブグループID');
// 変更受け取り
tabControl.addChangeListener((ev) => {
console.log('変更', ev.detail);
});
// 任意のタブをアクティブ
tabControl.setActiveId('タブID');
// 前後のタブをアクティブ
tabControl.changePrevTab();
tabControl.changeNextTab();
現在アクティブなタブのID。
現在アクティブなタブが何番目か。
指定IDのタブをアクティブにする
タブIDリストを登録
次のタブをアクティブにする
前のタブをアクティブにする
指定間隔で自動的に次のタブに切り替える
自動切り替えを止める
アクティブタブが変更された時に実行される関数を登録
クリック時に実行される関数を登録。 addChangeListener() も同時に呼ばれるので注意。
MIT
FAQs
<style> .cl-red{ color: #cc0000; } </style>
The npm package @sygnas/vue-tabs receives a total of 2 weekly downloads. As such, @sygnas/vue-tabs popularity was classified as not popular.
We found that @sygnas/vue-tabs 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.

Research
Malicious Namastex.ai npm packages appear to replicate TeamPCP-style Canister Worm tradecraft, including exfiltration and self-propagation.

Product
Explore exportable charts for vulnerabilities, dependencies, and usage with Reports, Socket’s new extensible reporting framework.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.