1.1.0 • Published 2 years ago

x-workspace v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

Workspace Web Component.

Examples

/** @jsxImportSource sigl */
import $ from 'sigl'

import { Rect } from 'sigl'
import { ContextMenuOption, WorkspaceElement, WorkspaceWindowElement } from 'x-workspace'

interface WindowItemElement extends $.Element<WindowItemElement> {}

@$.element()
class WindowItemElement extends $(WorkspaceWindowElement) {
  mounted($: WindowItemElement['$']) {
    $.Controls = $.part(() => <div></div>)
    $.ContextMenu = $.part(() => (
      <>
        <ContextMenuOption keyboard={['Ctrl', 'N']}>New</ContextMenuOption>
        <ContextMenuOption keyboard={['Alt', 'R']}>Remove the thing</ContextMenuOption>
        <ContextMenuOption>and another</ContextMenuOption>
        <hr />
        <ContextMenuOption disabled>and another</ContextMenuOption>
        <ContextMenuOption>and another</ContextMenuOption>
      </>
    ))
    $.Item = $.part(() => <div>hello this is a window</div>)
  }
}

interface SceneElement extends $.Element<SceneElement> {}

@$.element()
class SceneElement extends HTMLElement {
  Workspace = $.element(WorkspaceElement)
  WindowItem = $.element(WindowItemElement)

  items = new $.RefSet<WindowItemElement>([
    { rect: new Rect(0, 0, 200, 200), label: 'one' },
    { rect: new Rect(300, 0, 200, 200), label: 'two' },
  ])

  mounted($: SceneElement['$']) {
    $.render(({ Workspace, WindowItem, items }) => (
      <>
        <style>
          {/*css*/ `
          ${Workspace} {
            position: absolute;
            display: flex;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            overflow: hidden;
          }

          ${WindowItem} {
            border: 5px solid pink;
          }
        `}
        </style>
        <Workspace>
          {items.map(item => <WindowItem {x-workspace.item} />)}
        </Workspace>
      </>
    ))
  }
}

const Scene = $.element(SceneElement)

$.render(<Scene />, document.body)

API