Skip to content

Commit 7094163

Browse files
committed
Add Draw API (#23)
* WIP tool selection * Build docs * Update documentation shape * Reduce type duplication * Update Input type for tool settings * Refine types and docs further * Fix issue reporting errors from Felt when return type is string * Update API definition * Remove unwanted API * Improve documentation * docs(changeset): Adds APIs to use Felt's drawing tools on read-only maps
1 parent b28cf89 commit 7094163

30 files changed

Lines changed: 1287 additions & 67 deletions

.changeset/few-cats-fix.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@feltmaps/js-sdk": minor
3+
---
4+
5+
Adds APIs to use Felt's drawing tools on read-only maps

docs/Main/FeltController.md

Lines changed: 146 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ own to make it easier to find related methods and events.
1010

1111
## Extends
1212

13-
* [`ViewportController`](../Viewport/ViewportController.md).[`UiController`](../UI/UiController.md).[`LayersController`](../Layers/LayersController.md).[`ElementsController`](../Elements/ElementsController.md).[`SelectionController`](../Selection/SelectionController.md).[`InteractionsController`](../Interactions/InteractionsController.md)
13+
* [`ViewportController`](../Viewport/ViewportController.md).[`UiController`](../UI/UiController.md).[`LayersController`](../Layers/LayersController.md).[`ElementsController`](../Elements/ElementsController.md).[`SelectionController`](../Selection/SelectionController.md).[`InteractionsController`](../Interactions/InteractionsController.md).[`ToolsController`](../Tools/ToolsController.md)
1414

1515
## Properties
1616

@@ -696,6 +696,151 @@ felt.clearSelection({ elements: true });
696696

697697
***
698698

699+
### setTool()
700+
701+
> **setTool**(`tool`: `null` | `"note"` | `"pin"` | `"line"` | `"route"` | `"polygon"` | `"circle"` | `"marker"` | `"highlighter"` | `"text"` | `"link"`): `void`
702+
703+
Sets the tool to use for drawing elements on the map.
704+
705+
#### Parameters
706+
707+
| Parameter | Type | Description |
708+
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
709+
| `tool` | `null` \| `"note"` \| `"pin"` \| `"line"` \| `"route"` \| `"polygon"` \| `"circle"` \| `"marker"` \| `"highlighter"` \| `"text"` \| `"link"` | The tool to set. |
710+
711+
#### Returns
712+
713+
`void`
714+
715+
#### Example
716+
717+
```ts
718+
// Set the tool to "marker"
719+
felt.setTool("marker");
720+
721+
// put down the tool
722+
felt.setTool(null);
723+
```
724+
725+
***
726+
727+
### getTool()
728+
729+
> **getTool**(): `Promise`\<`null` | `"note"` | `"pin"` | `"line"` | `"route"` | `"polygon"` | `"circle"` | `"marker"` | `"highlighter"` | `"text"` | `"link"`>
730+
731+
Gets the current tool, if any is in use.
732+
733+
#### Returns
734+
735+
`Promise`\<`null` | `"note"` | `"pin"` | `"line"` | `"route"` | `"polygon"` | `"circle"` | `"marker"` | `"highlighter"` | `"text"` | `"link"`>
736+
737+
The current tool, or `null` if no tool is in use.
738+
739+
#### Example
740+
741+
```ts
742+
const tool = await felt.getTool(); // "marker", "polygon", etc.
743+
```
744+
745+
***
746+
747+
### onToolChange()
748+
749+
> **onToolChange**(`args`: \{ `handler`: (`tool`: `null` | `"note"` | `"pin"` | `"line"` | `"route"` | `"polygon"` | `"circle"` | `"marker"` | `"highlighter"` | `"text"` | `"link"`) => `void`; }): `VoidFunction`
750+
751+
Listens for changes to the current tool.
752+
753+
#### Parameters
754+
755+
| Parameter | Type | Description |
756+
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
757+
| `args` | \{ `handler`: (`tool`: `null` \| `"note"` \| `"pin"` \| `"line"` \| `"route"` \| `"polygon"` \| `"circle"` \| `"marker"` \| `"highlighter"` \| `"text"` \| `"link"`) => `void`; } | - |
758+
| `args.handler` | (`tool`: `null` \| `"note"` \| `"pin"` \| `"line"` \| `"route"` \| `"polygon"` \| `"circle"` \| `"marker"` \| `"highlighter"` \| `"text"` \| `"link"`) => `void` | This callback is called with the current tool whenever the tool changes. |
759+
760+
#### Returns
761+
762+
`VoidFunction`
763+
764+
A function to unsubscribe from the listener
765+
766+
#### Example
767+
768+
```ts
769+
const unsubscribe = felt.onToolChange({
770+
handler: tool => console.log(tool),
771+
});
772+
773+
// later on...
774+
unsubscribe();
775+
```
776+
777+
***
778+
779+
### setToolSettings()
780+
781+
> **setToolSettings**(`settings`: [`InputToolSettings`](../Tools/InputToolSettings.md)): `void`
782+
783+
Sets the settings for the current tool.
784+
785+
#### Parameters
786+
787+
| Parameter | Type | Description |
788+
| ---------- | ---------------------------------------------------- | -------------------- |
789+
| `settings` | [`InputToolSettings`](../Tools/InputToolSettings.md) | The settings to set. |
790+
791+
#### Returns
792+
793+
`void`
794+
795+
***
796+
797+
### getToolSettings()
798+
799+
> **getToolSettings**\<`T`>(`tool`: `T`): `Promise`\<[`ToolSettingsMap`](../Tools/ToolSettingsMap.md)\[`T`]>
800+
801+
Gets the settings for the current tool.
802+
803+
#### Type Parameters
804+
805+
| Type Parameter |
806+
| -------------------------------------------------------------------- |
807+
| `T` *extends* keyof [`ToolSettingsMap`](../Tools/ToolSettingsMap.md) |
808+
809+
#### Parameters
810+
811+
| Parameter | Type |
812+
| --------- | ---- |
813+
| `tool` | `T` |
814+
815+
#### Returns
816+
817+
`Promise`\<[`ToolSettingsMap`](../Tools/ToolSettingsMap.md)\[`T`]>
818+
819+
The settings for the current tool.
820+
821+
***
822+
823+
### onToolSettingsChange()
824+
825+
> **onToolSettingsChange**(`args`: \{ `handler`: (`settings`: [`ToolSettingsChangeEvent`](../Tools/ToolSettingsChangeEvent.md)) => `void`; }): `VoidFunction`
826+
827+
Listens for changes to the settings on all tools.
828+
829+
#### Parameters
830+
831+
| Parameter | Type |
832+
| -------------- | --------------------------------------------------------------------------------------------------------- |
833+
| `args` | \{ `handler`: (`settings`: [`ToolSettingsChangeEvent`](../Tools/ToolSettingsChangeEvent.md)) => `void`; } |
834+
| `args.handler` | (`settings`: [`ToolSettingsChangeEvent`](../Tools/ToolSettingsChangeEvent.md)) => `void` |
835+
836+
#### Returns
837+
838+
`VoidFunction`
839+
840+
A function to unsubscribe from the listener
841+
842+
***
843+
699844
### updateUiControls()
700845

701846
> **updateUiControls**(`controls`: [`UiControlsOptions`](../UI/UiControlsOptions.md)): `void`

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
* [Main](Main/README.md)
99
* [Selection](Selection/README.md)
1010
* [Shared](Shared/README.md)
11+
* [Tools](Tools/README.md)
1112
* [UI](UI/README.md)
1213
* [Viewport](Viewport/README.md)

docs/Tools/CircleToolSettings.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
***
2+
3+
## Properties
4+
5+
### color
6+
7+
> **color**: `string`
8+
9+
***
10+
11+
### fillOpacity
12+
13+
> **fillOpacity**: `number`
14+
15+
***
16+
17+
### strokeOpacity
18+
19+
> **strokeOpacity**: `number`
20+
21+
***
22+
23+
### strokeWidth
24+
25+
> **strokeWidth**: `number`
26+
27+
***
28+
29+
### strokeStyle
30+
31+
> **strokeStyle**: `"solid"` | `"dashed"` | `"dotted"`
32+
33+
***
34+
35+
### radiusMarker
36+
37+
> **radiusMarker**: `boolean`

docs/Tools/ConfigurableToolType.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
***
2+
3+
> **ConfigurableToolType**: keyof [`ToolSettingsMap`](ToolSettingsMap.md)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
***
2+
3+
## Properties
4+
5+
### color
6+
7+
> **color**: `string`
8+
9+
***
10+
11+
### opacity
12+
13+
> **opacity**: `number`
14+
15+
***
16+
17+
### size
18+
19+
> **size**: `number`

docs/Tools/InputToolSettings.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
***
2+
3+
> **InputToolSettings**: `{ [K in ConfigurableToolType]: Partial<ToolSettingsMap[K]> & { tool: K } }`\[[`ConfigurableToolType`](ConfigurableToolType.md)]

docs/Tools/LineToolSettings.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
***
2+
3+
## Properties
4+
5+
### color
6+
7+
> **color**: `string`
8+
9+
***
10+
11+
### strokeOpacity
12+
13+
> **strokeOpacity**: `number`
14+
15+
***
16+
17+
### strokeWidth
18+
19+
> **strokeWidth**: `number`
20+
21+
***
22+
23+
### strokeStyle
24+
25+
> **strokeStyle**: `"solid"` | `"dashed"` | `"dotted"`
26+
27+
***
28+
29+
### distanceMarker
30+
31+
> **distanceMarker**: `boolean`

docs/Tools/MarkerToolSettings.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
***
2+
3+
## Properties
4+
5+
### color
6+
7+
> **color**: `string`
8+
9+
***
10+
11+
### opacity
12+
13+
> **opacity**: `number`
14+
15+
***
16+
17+
### size
18+
19+
> **size**: `number`

docs/Tools/NoteToolSettings.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
***
2+
3+
## Properties
4+
5+
### color
6+
7+
> **color**: `string`
8+
9+
***
10+
11+
### align
12+
13+
> **align**: `"left"` | `"center"` | `"right"`
14+
15+
***
16+
17+
### style
18+
19+
> **style**: `"italic"` | `"light"` | `"regular"` | `"caps"`

0 commit comments

Comments
 (0)