diff --git a/public/pin-icon.svg b/public/pin-icon.svg new file mode 100644 index 0000000..7e0dd58 --- /dev/null +++ b/public/pin-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/back/jdd-components/components.ts b/src/back/jdd-components/components.ts index f34e64b..35cee56 100644 --- a/src/back/jdd-components/components.ts +++ b/src/back/jdd-components/components.ts @@ -6,5 +6,8 @@ export const registry = new Registry(); import { ImageDemo } from "./image-demo/image-demo.jdd.js"; registry.add("image-demo", ImageDemo); +import { MapWithPins } from "./map-with-pins/map-with-pins.jdd.js"; +registry.add("map-with-pins", MapWithPins); + import { NiceBox } from "./nice-box/nice-box.jdd.js"; registry.add("nice-box", NiceBox); diff --git a/src/back/jdd-components/map-with-pins/map-with-pins.css b/src/back/jdd-components/map-with-pins/map-with-pins.css new file mode 100644 index 0000000..4fb7421 --- /dev/null +++ b/src/back/jdd-components/map-with-pins/map-with-pins.css @@ -0,0 +1,50 @@ +.map-with-pins { + #map { + height: 534px; + } + .popup { + .leaflet-popup-content-wrapper, + .leaflet-popup-tip { + background: #0d4d69; + color: #ffffff; + text-align: center; + } + .leaflet-popup-content { + margin: 0; + } + .leaflet-popup-content-wrapper { + padding: 22px; + } + } + + .title, + .address { + margin: 0 0 8px 0; + } + + .title { + text-transform: uppercase; + font-size: 22px; + line-height: 26px; + } + + .address { + font-size: 12px; + line-height: 21px; + } + .button { + display: inline-block; + margin: 0 auto; + text-align: center; + text-decoration: none; + border-radius: 25px; + text-transform: uppercase; + padding: 4px 25px; + border: 1px solid #ffffff; + color: #ffffff; + min-width: 170px; + line-height: 18px; + font-size: 12px; + background-color: #0d4d69; + } +} diff --git a/src/back/jdd-components/map-with-pins/map-with-pins.jdd.tsx b/src/back/jdd-components/map-with-pins/map-with-pins.jdd.tsx new file mode 100644 index 0000000..27bac7b --- /dev/null +++ b/src/back/jdd-components/map-with-pins/map-with-pins.jdd.tsx @@ -0,0 +1,126 @@ +import { FlatTemplatable, TempstreamJSX } from "tempstream"; +import { + Component, + ComponentArguments, + ExtractStructuredComponentArgumentsValues, + JDDContext, +} from "@sealcode/jdd"; + +const coordinates = new ComponentArguments.ShortText(); +coordinates.setExampleValues([ + "52.39706859245613, 16.898251247012197", + "52.8, 16.6", + "52.5, 16.1", + "52.1, 16.35", +]); + +const component_arguments = { + pins: new ComponentArguments.List( + new ComponentArguments.Structured({ + title: new ComponentArguments.ShortText(), + address: new ComponentArguments.ShortText(), + coordinates, + button: new ComponentArguments.Structured({ + text: new ComponentArguments.ShortText(), + link: new ComponentArguments.ShortText(), + }), + }) + ), +} as const; + +export class MapWithPins extends Component { + getArguments() { + return component_arguments; + } + + toHTML( + { pins }: ExtractStructuredComponentArgumentsValues, + { render_markdown }: JDDContext + ): FlatTemplatable { + return ( +
+ + + { + /* HTML */ `` + } + +
+
+ ); + } +} diff --git a/src/back/routes/components.sreact.tsx b/src/back/routes/components.sreact.tsx index 29bb709..6c97f6b 100644 --- a/src/back/routes/components.sreact.tsx +++ b/src/back/routes/components.sreact.tsx @@ -156,7 +156,7 @@ export default new (class ComponentsPage extends StatefulPage< wrapInLayout(ctx: BaseContext, content: Templatable): Templatable { return html(ctx, "Components", content, { - morphing: true, + morphing: false, preserveScroll: true, autoRefreshCSS: true, navbar: () => ``, diff --git a/src/includes.css b/src/includes.css index c56a2d5..047eef4 100644 --- a/src/includes.css +++ b/src/includes.css @@ -2,6 +2,7 @@ @import "../node_modules/@sealcode/sealgen/src/forms/forms.css"; @import "back/jdd-components/image-demo/image-demo.css"; +@import "back/jdd-components/map-with-pins/map-with-pins.css"; @import "back/routes/common/ui/input.css"; @import "back/routes/components.css"; @import "colors.css";