You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

types.ts 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. export interface Data {
  2. camera: {
  3. point: number[]
  4. zoom: number
  5. }
  6. brush?: Bounds
  7. currentPageId: string
  8. selectedIds: string[]
  9. pointedId?: string
  10. document: {
  11. pages: Record<string, Page>
  12. }
  13. }
  14. export interface Page {
  15. id: string
  16. type: "page"
  17. childIndex: number
  18. name: string
  19. shapes: Record<string, Shape>
  20. }
  21. export enum ShapeType {
  22. Dot = "dot",
  23. Circle = "circle",
  24. Ellipse = "ellipse",
  25. Line = "line",
  26. Ray = "ray",
  27. LineSegment = "lineSegment",
  28. Rectangle = "rectangle",
  29. // Glob = "glob",
  30. // Spline = "spline",
  31. // Cubic = "cubic",
  32. // Conic = "conic",
  33. }
  34. export interface BaseShape {
  35. id: string
  36. type: ShapeType
  37. parentId: string
  38. childIndex: number
  39. name: string
  40. rotation: 0
  41. }
  42. export interface DotShape extends BaseShape {
  43. type: ShapeType.Dot
  44. point: number[]
  45. }
  46. export interface CircleShape extends BaseShape {
  47. type: ShapeType.Circle
  48. point: number[]
  49. radius: number
  50. }
  51. export interface EllipseShape extends BaseShape {
  52. type: ShapeType.Ellipse
  53. point: number[]
  54. radiusX: number
  55. radiusY: number
  56. }
  57. export interface LineShape extends BaseShape {
  58. type: ShapeType.Line
  59. point: number[]
  60. vector: number[]
  61. }
  62. export interface RayShape extends BaseShape {
  63. type: ShapeType.Ray
  64. point: number[]
  65. vector: number[]
  66. }
  67. export interface LineSegmentShape extends BaseShape {
  68. type: ShapeType.LineSegment
  69. start: number[]
  70. end: number[]
  71. }
  72. export interface RectangleShape extends BaseShape {
  73. type: ShapeType.Rectangle
  74. point: number[]
  75. size: number[]
  76. }
  77. export type Shape =
  78. | DotShape
  79. | CircleShape
  80. | EllipseShape
  81. | LineShape
  82. | RayShape
  83. | LineSegmentShape
  84. | RectangleShape
  85. export interface Bounds {
  86. minX: number
  87. minY: number
  88. maxX: number
  89. maxY: number
  90. width: number
  91. height: number
  92. }
  93. export interface Shapes extends Record<ShapeType, Shape> {
  94. [ShapeType.Dot]: DotShape
  95. [ShapeType.Circle]: CircleShape
  96. [ShapeType.Ellipse]: EllipseShape
  97. [ShapeType.Line]: LineShape
  98. [ShapeType.Ray]: RayShape
  99. [ShapeType.LineSegment]: LineSegmentShape
  100. [ShapeType.Rectangle]: RectangleShape
  101. }