@operato/scene-table 8.0.0-beta.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,79 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { Component, ComponentNature, RectPath, Style } from '@hatiolab/things-scene'
5
-
6
- import { Table } from '../'
7
-
8
- const NATURE: ComponentNature = {
9
- mutable: false,
10
- resizable: true,
11
- rotatable: true,
12
- properties: [
13
- {
14
- type: 'editor-table',
15
- label: '',
16
- name: '',
17
- property: {
18
- merge: false,
19
- split: false
20
- }
21
- }
22
- ],
23
- 'value-property': 'value',
24
- help: 'scene/component/data-cell'
25
- }
26
-
27
- export default class DataCell extends RectPath(Component) {
28
- get nature() {
29
- return NATURE
30
- }
31
-
32
- get value() {
33
- return this.state.value
34
- }
35
-
36
- set value(value) {
37
- this.setState({
38
- value,
39
- data: value
40
- })
41
- }
42
-
43
- renderBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {
44
- if (style && style.strokeStyle && style.lineWidth && style.lineDash) {
45
- context.beginPath()
46
- context.moveTo(x, y)
47
- context.lineTo(to_x, to_y)
48
- Component.drawStroke(context, style)
49
- }
50
- }
51
-
52
- render(context: CanvasRenderingContext2D) {
53
- var { left, top, width, height } = this.bounds
54
-
55
- var { border } = this.state
56
- border ||= {}
57
-
58
- // Cell 채우기.
59
- context.beginPath()
60
- context.lineWidth = 0
61
- context.rect(left, top, width, height)
62
- this.drawFill(context)
63
-
64
- // Border 그리기
65
- var parent = this.parent as Table
66
- var idx = parent.components.indexOf(this)
67
- var columns = parent.columns || 1
68
-
69
- this.renderBorder(context, left, top, left + width, top, border.top)
70
- this.renderBorder(context, left, top + height, left, top, border.left)
71
- if ((idx + 1) % columns == 0) {
72
- /* if this filed is right most, draw right side border. */
73
- this.renderBorder(context, left + width, top, left + width, top + height, border.right)
74
- }
75
- this.renderBorder(context, left + width, top + height, left, top + height, border.bottom)
76
- }
77
- }
78
-
79
- Component.register('data-cell', DataCell)
@@ -1,117 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- import { Component, Container, Layout } from '@hatiolab/things-scene'
6
-
7
- import DataCell from './data-cell'
8
- import DataList from './data-list'
9
-
10
- var DataListLayout = {
11
- reflow: function (container: Container) {
12
- var layoutConfig = container.getState('layoutConfig')
13
-
14
- var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')
15
- var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')
16
- var widths = (layoutConfig && layoutConfig.widths) || container.getState('widths')
17
- var heights = (layoutConfig && layoutConfig.heights) || container.getState('heights')
18
- var { offset = { x: 0, y: 0 } } = container.state
19
-
20
- var widths_sum = widths
21
- ? widths.filter((width: number, i: number) => i < columns).reduce((sum: number, width: number) => sum + width, 0)
22
- : columns
23
- var heights_sum = heights
24
- ? heights.filter((height: number, i: number) => i < rows).reduce((sum: number, height: number) => sum + height, 0)
25
- : rows
26
-
27
- var inside = container.textBounds
28
- var paddingLeft = container.getState('paddingLeft') || 0
29
- var paddingTop = container.getState('paddingTop') || 0
30
-
31
- var width_unit = inside.width / widths_sum
32
- var height_unit = inside.height / heights_sum
33
-
34
- var x = offset.x
35
- var y = offset.y
36
- var components = container.components
37
-
38
- components.forEach((component, idx) => {
39
- let w = widths ? widths[idx % columns] : 1
40
- let h = heights ? heights[0] : 1
41
-
42
- let left = paddingLeft + x
43
- let top = paddingTop + y
44
- let width = width_unit * w
45
- let height = height_unit * h
46
-
47
- component.bounds = {
48
- left,
49
- top,
50
- width,
51
- height
52
- }
53
- component.set('rotation', 0)
54
-
55
- if (idx % columns == columns - 1) {
56
- x = 0
57
- y += h * height_unit
58
- } else {
59
- x += w * width_unit
60
- }
61
- })
62
- },
63
-
64
- capturables: function (container: Container) {
65
- return container.components
66
- },
67
-
68
- drawables: function (container: Container) {
69
- return container.components
70
- },
71
-
72
- isStuck: function (component: Component) {
73
- return true
74
- },
75
-
76
- /*
77
- * 레이아웃별로, 키보드 방향키 등을 사용해서 네비게이션 할 수 있는 기능을 제공할 수 있다.
78
- * 하나의 컴포넌트만 선택되어있고, 키보드 이벤트가 발생했을 때 호출되게 된다.
79
- * keyNavigate 메쏘드가 정의되어 있지 않으면, 'Tab' 키에 대한 네비게이션만 작동한다.
80
- * 'Tab'키에 의한 네비게이션은 모든 레이아웃에 공통으로 적용된다.
81
- */
82
- keyNavigate: function (container: Container, component: Component, e: KeyboardEvent) {
83
- var layoutConfig = container.getState('layoutConfig')
84
-
85
- var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')
86
- var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')
87
-
88
- var { row, column } = (container as DataList).getRowColumn(component as DataCell)
89
-
90
- switch (e.code) {
91
- case 'ArrowUp':
92
- if (row > 0) return container.getAt((row - 1) * columns + column)
93
- break
94
- case 'ArrowDown':
95
- if (row < rows - 1) return container.getAt((row + 1) * columns + column)
96
- break
97
- case 'ArrowRight':
98
- if (column < columns - 1) return container.getAt(row * columns + column + 1)
99
- break
100
- case 'ArrowLeft':
101
- if (column > 0) return container.getAt(row * columns + column - 1)
102
- break
103
- default:
104
- return component
105
- }
106
- },
107
-
108
- /*
109
- * 하위 컴포넌트를 영역으로 선택하는 경우에, 바운드에 join만 되어도 선택된 것으로 판단하도록 한다.
110
- * joinType이 false이거나, 정의되어있지 않으면, 바운드에 포함되어야 선택된 것으로 판단한다.
111
- */
112
- joinType: true
113
- }
114
-
115
- Layout.register('data-list', DataListLayout)
116
-
117
- export default DataListLayout