npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

viewtron

v2.4.1

Published

Electron browser view management

Downloads

319

Readme

Viewtron

Allows for advanced electron BrowserView layouts in an electron BrowserWindow. See viewtron-sample-app for a small usage example.

Table of Contents


Installation

$ npm i -S viewtron

Please note that electron is a peer-dependency.


Usage

ipcMain:

import {BrowserWindow} from 'electron'
import {ipcMainHandlers, ViewtronConfig} from 'viewtron';

const {
    addViewtron
} = ipcMainHandlers
/* OR
import {
    addViewtron
} from 'viewtron/dist/ipc-main';
*/

const config: Partial<ViewtronConfig> = {}
const mainWindow = new BrowserWindow()

const {
  viewtronWindow,
  state,
  removeViewtron,
} = addViewtron(mainWindow, config);

ipcRenderer:

Tested in preload process, could probably also be done in the renderer process. See BrowserWindow options.webPreferences.preload

import {ResizeSensor} from "css-element-queries";
import {ViewtronUpdateData} from "viewtron";
import {
    addColumnHandler,
    addRowHandler,
    addViewHandler,
    columnResetHandler,
    columnResizeHandler,
    columnVisibilityHandler,
    removeColumnHandler,
    removeRowHandler,
    removeViewHandler,
    reorderColumnHandler,
    reorderRowHandler,
    reorderViewHandler,
    rowResetHandler,
    rowResizeHandler,
    rowVisibilityHandler,
    viewResetHandler,
    viewtronInitHandler,
    viewtronLayoutHandler,
    viewtronResizeHandler,
    viewtronUpdateHandler,
    viewResizeHandler,
    viewVisibilityHandler
} from "viewtron/dist/ipc-renderer";

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener("DOMContentLoaded", () => {
    const appArea = document.getElementById("viewtron-area");

    // @todo: init logic
    viewtronInitHandler(appArea.getBoundingClientRect().toJSON());

    // @ts-ignore
    new ResizeSensor(appArea, () => {
        // @todo: resize logic
        viewtronResizeHandler(appArea.getBoundingClientRect().toJSON())
    });

    viewtronUpdateHandler((update: ViewtronUpdateData) => {
        // @todo: update logic
    });

    document.getElementById("foo").addEventListener("bar", () => {
        // @todo: add logic
        addRowHandler({}); // or any other handler
    });
});

API

Core Types

import {Store} from 'redux';
import {BrowserView, BrowserViewConstructorOptions, BrowserWindow, Rectangle} from 'electron';

import {AppAction, AppState} from '<internal>';

export type ViewtronInstance = {
    viewtronWindow: ViewtronWindow,
    state: Store<AppState, AppAction>,
    removeViewtron: () => void,
}

export type ViewtronConfig = {
    spacing: number,
    minWidth: number,
    minHeight: number,
    responsive: boolean,
    destroyOnClose: boolean,
    browserViewDefaultOptions: BrowserViewConstructorOptions,
}

export type ViewtronWindow = {
    id: string,
    instance: BrowserWindow,
    rect?: Rectangle,
    config: ViewtronConfig
}

export type Column = {
    id: string,
    windowId: string;
    rowId: string,
    name?: string,
    width?: number,
    hidden?: boolean
};

export type Row = {
    id: string,
    windowId: string;
    name?: string,
    height?: number,
    hidden?: boolean
};

export type ViewtronView = {
    id: string;
    url: string;
    name?: string;
    windowId: string;
    columnId: string;
    rect?: Rectangle;
    instance: BrowserView;
    height?: number;
    options?: BrowserViewConstructorOptions,
    hidden?: boolean
}

ipcMain Process

addViewtron

Applies handlers to the main electron window instance. Should be called on each new main window instance

import {BrowserWindow} from 'electron';
import {ViewtronInstance, ViewtronConfig} from 'viewtron';

export type addViewtron = (mainWindow: BrowserWindow, config: Partial<ViewtronConfig> = {}) => ViewtronInstance

ipcRenderer process

Tested in preload process, could probably also be done in the renderer process.

viewtronInitHandler

Initialises a viewtron area on the specified rectangle.

import {Rectangle} from 'electron';

export default function viewtronInitHandler(viewtronAreaRect: Rectangle): void

viewtronResizeHandler

sets new dimensions of the viewtron main area.

import {Rectangle} from 'electron';

export default function viewtronResizeHandler(viewtronAreaRect: Rectangle): void;

viewtronUpdateHandler

Calls supplied callback whenever viewtron data is updated in main process. Passes updated viewtron state.

import {Row, Column, ViewtronView} from 'viewtron';

export type ViewtronUpdateData = {
    rows: Row[]
    columns: Column[]
    views: ViewtronView[]
}

export default function viewsUpdatedHandler(callback: (update: ViewtronUpdateData) => void): void

viewtronLayoutHandler

Allows for setting a pre-defined layout in viewtron. Will replace any and all existing rows/columns/views.

import {AddColumnData, AddRowData} from 'viewtron';

type LayoutView = {
    url: string,
    name?: string;
    height?: number;
    options?: any,
    hidden?: boolean
}

type LayoutColumn = Omit<AddColumnData, 'rowId'> & {
    views: LayoutView[];
}

export type LayoutRow = Omit<AddRowData, 'windowId'> & {
    columns: LayoutColumn[];
}

export type SetLayoutData = {
    layout: LayoutRow[]
}

export default function viewtronLayoutHandler(data: SetLayoutData): void

viewtronBroadcastHandler

Allows for sending data to all or specified views.

export type BroadcastData = {
    channel: string,
    args: any[],
    viewIds?: string[]
}

export default function viewtronBroadcastHandler(data: BroadcastData): void

addRowHandler

Adds a row to the viewtron area.

export type AddRowData = {
    name?: string,
    height?: number
}

export default function addRowHandler(data: AddRowData): void

removeRowHandler

Removes a row from the viewtron area.

export type RemoveRowData = {
    rowId: string
}

export default function removeRowHandler(data: RemoveRowData): void

reorderRowHandler

Moves a row in the viewtron area.

export type ReorderRowData = {
    rowId: string
    newIndex: number
}

export default function reorderRowHandler(data: ReorderRowData): void

rowResizeHandler

Sets height for a specific row.

export type RowResizeData = {
    rowId: string,
    height: number
}

export default function rowResizeHandler(data: RowResizeData): void

rowResetHandler

Resets heights for all or specified rows.

export type RowResetData = {
    rowIds?: string[]
}

export default function rowResetHandler(data: RowResetData): void

rowVisibilityHandler

Sets visibility of a row

export type RowVisibilityData = {
    rowId: string,
    visible: boolean
}

export default function rowVisibilityHandler(data: RowVisibilityData): void

addColumnHandler

Adds a column to the viewtron area.

export type AddColumnData = {
    rowId: string,
    name?: string,
    width?: number
}

export default function addColumnHandler(data: AddColumnData): void

removeColumnHandler

Removes a column from the viewtron area.

export type RemoveColumnData = {
    columnId: string
}

export default function removeColumnHandler(data: RemoveColumnData): void

reorderColumnHandler

Moves a column inside a row.

export type ReorderColumnData = {
    columnId: string
    newIndex: number
}

export default function reorderColumnHandler(data: ReorderColumnData): void

columnResizeHandler

Sets width for a specific column.

export type ColumnResizeData = {
    columnId: string
    width: number
}

export default function columnResizeHandler(data: ColumnResizeData): void

columnResetHandler

Resets widths for all or specified columns.

export type ColumnResetData = {
    columnIds?: string[]
}

export default function columnResetHandler(data: ColumnResetData): void

columnVisibilityHandler

Sets visibility of a column

export type ColumnVisibilityData = {
    columnId: string
    visible: boolean
}

export default function columnVisibilityHandler(data: ColumnVisibilityData): void

addViewHandler

Adds a view instance.

import {BrowserViewConstructorOptions} from 'electron';

export type AddViewData = {
    url: string,
    columnId: string,
    name?: string;
    height?: number;
    options?: BrowserViewConstructorOptions,
    hidden?: boolean
}

export default function addViewHandler(data: AddViewData): void

removeViewHandler

Removes a view instance.

export type RemoveViewData = {
    viewId: string
}

export default function removeViewHandler(data: RemoveViewData): void

reorderViewHandler

Movers a view instance inside a column.

export type ReorderViewData = {
    viewId: string
    newIndex: number
}

export default function reorderViewHandler(data: ReorderViewData): void

viewResizeHandler

Sets height for a specific view instance.

export type ViewResizeData = {
    viewId: string,
    height: number
}

export default function viewResizeHandler(data: ViewResizeData): void

viewResetHandler

Resets all views, or a specified view, to default dimensions.

export type ViewResetData = {
    viewIds?: string[]
}

export default function viewResetHandler(data: ViewResetData): void

viewVisibilityHandler

Sets visibility of a view.

export type ViewVisibilityData = {
    viewId: string,
    visible: boolean
}

export default function viewVisibilityHandler(data: ViewVisibilityData): void