A modular GUI tool for composing P45 icons.
The core component is <P46>. Every other component is slotted within it somewhere.
Requires Svelte version 4.
Fork, pillage, and plunder! Do whatever as long as you adhere to the project's permissive MIT license.
<Axis>Slotted into a <P46> component to add axis to the grid.
Slot the <AxisToggle> component into a <P46> before-grid
slot to allow feature toggling.
<Axis />
<AxisToggle>Slotted into a <P46> component before-grid slot to enable
toggling of the <Axis> component if it's used.
<AxisToggle />
<Console>Slotted into a <P46> component after-grid slot
so users can add, remove, and modify shapes
within the grid.
<Console />
<CopyCoordsButton>Slotted into a <P46> component before-grid slot
so users view the currently selected node and,
upon click, copy the node to clipboard.
<CopyCoordsButton />
<DownloadSvgButton>Slotted into a <P46> component before-grid slot
so users can download the SVG.
<DownloadSvgButton />
<Guidelines>Slotted into a <P46> component to add guidelines to the grid.
Slot the <GuidelinesToggle> component into a <P46> before-grid
slot to allow feature toggling.
<Guidelines />
<GuidelinesToggle>Slotted into a <P46> component before-grid slot to enable
toggling of the <Guidelines> component if it's used.
<GuidelinesToggle />
<HeaderRow>Slotted into a <P46> component before-grid slot
to organise a row of header controls.
<!-- Controls to be slotted, e.g. `<Axis>`, `<DownloadSvgButton>`, etc. -->
<slot />
<HeaderRow>
<div />
</HeaderRow>
<P46><P46> is the framework component in which all other P46
components are slotted into.
<script>
// Size of the underlying P45 grid.
export let size = 24
// The P45 instance used to define grid dimensions and compile shapes.
setContext("p45", ...)
// Array of grid points representing nodes on the grid.
setContext("p46-points", ...)
// The currently selected grid point. Not to be confused with the currently
// selected user shape.
setContext("p46-selected-store", ...)
// Writable store for enabling and disabling the `<Axis>` component.
setContext("p46-axis-enabled-store", ...)
// Writable store for enabling and disabling the `<Guidelines>` component.
setContext("p46-guidelines-enabled-store", ...)
// Writable store for enabling and disabling the `<Points>` component.
setContext("p46-points-enabled-store", ...)
// Writable store for enabling and disabling the `<Target>` component.
setContext("p46-target-enabled-store", ...)
// Writable store for enabling and disabling rounded edges on shape lines.
setContext("p46-rounded-enabled-store", ...)
// Writable store for controlling the stroke width for shape lines.
setContext("p46-stroke-width-slider-store", ...)
// Writable store containing the array of user shapes to draw on the grid.
setContext("p46-user-shapes-store", ...)
// Writable store containing the currently selected user shape.
// Not to be confused with the currently selected grid point.
setContext("p46-selected-user-shape-store", ...)
</script>
<!--
Content slotted above the grid. This is where all the control components
live. This will typically be one or more `<HeaderRow>` components
with various control components, e.g `<Axis>`, slotted into that.
-->
<slot name="before-grid" />
<!-- Content drawn on the grid underneath any shapes. -->
<slot name="before-shape" />
<!-- Content drawn on the grid above any shapes. -->
<slot name="after-shape" />
<!-- Content drawn on the grid after the hitboxes which are after the shapes. -->
<slot name="after-hitbox" />
<!--
Content slotted below the grid. This is where the `<Console>` component
is slotted.
-->
<slot name="after-grid" />
<P46
size={24}
>
<div slot="before-grid" />
<div slot="before-shape" />
<div slot="after-shape" />
<div slot="after-hitbox" />
<div slot="after-grid" />
</P46>
<Points>Slotted into a <P46> component to add reference points to the grid.
Slot the <PointsToggle> component into a <P46> before-grid
slot to allow feature toggling.
<Points />
<PointsToggle>Slotted into a <P46> component before-grid slot to enable
toggling of the <Points> component if it's used.
<PointsToggle />
<RoundedToggle>Slotted into a <P46> component before-grid slot to enable
toggling of rounded line caps and joins. When disabled the
butt type is used. This is applied to all shapes.
<RoundedToggle />
<StrokeWidthSlider>Slotted into a <P46> component before-grid slot to allow
adjusting of line widths. This is applied to all shapes.
<StrokeWidthSlider />
<Target>Slotted into a <P46> component to add a target over
the currently selected point to the grid.
Slot the <TargetToggle> component into a <P46> before-grid
slot to allow feature toggling.
<Target />
<TargetToggle>Slotted into a <P46> component before-grid slot to enable
toggling of the <Target> component if it's used.
<TargetToggle />