Skip to content

Instantly share code, notes, and snippets.

View rodydavis's full-sized avatar
:electron:
Creative Coding

Rody Davis rodydavis

:electron:
Creative Coding
View GitHub Profile
@rodydavis
rodydavis / my-element.js
Last active March 5, 2025 15:29
HTML Web Component with support for SSR
// @ts-check
import { WebComponent } from "./utils.js";
const tagName = "my-element";
const template = /*html*/ `
<span>
Hello, <span id="name">World</span>!
</span>
import 'package:jaspr/jaspr.dart';
import 'package:signals/signals_core.dart';
import 'watch.dart';
import 'embedded_counter.dart';
class Counter extends StatefulComponent {
const Counter({super.key});
@override
import 'dart:js_interop';
import 'dart:js_interop_unsafe';
import 'package:web/web.dart';
class WebComponent<T extends HTMLElement> {
late T element;
String get extendsType => 'HTMLElement';
void connectedCallback() {}
import 'package:mustache_template/mustache_template.dart';
import 'package:signals/signals_core.dart';
import 'package:sqlite3/sqlite3.dart';
class UndoRedoManager {
final Database _db;
UndoRedoManager(this._db);
bool _active = false;
List<List<int>> _undoStack = [];
import 'package:flutter/material.dart';
import 'package:signals/signals_flutter.dart';
final debugShowCheckedModeBanner = signal(false);
final app = computed<Widget>(() {
return MaterialApp(
debugShowCheckedModeBanner: debugShowCheckedModeBanner(),
home: home(),
);
import 'dart:js_interop';
import 'package:web/web.dart';
void onMessage(Event event) {
if (event is MessageEvent) {
print('Worker received message: ${event.data}');
}
}
void postMessage(
import { computed, signal } from "@preact/signals-core";
import { html } from "@lit-labs/preact-signals";
import { LitTemplateMixin } from "./mixins.js";
import { mix } from "./mixwith.js";
import { styleMap } from "lit/directives/style-map.js";
class Example extends mix(HTMLElement).with(LitTemplateMixin) {
tags = signal<string[]>([
"Docker",
"Kubernetes",
import { computed } from "@preact/signals-core";
import { css } from "lit";
import { html } from "@lit-labs/preact-signals";
import { WithShadowRoot } from "./element-utils.js";
class Counter extends WithShadowRoot(HTMLElement) {
count = this.attr("count", "0");
countInt = computed(() => parseInt(this.count.value));
private increment() {
import {
ReadonlySignal,
Signal,
computed,
effect,
signal,
} from "@preact/signals-core";
import { CSSResult, render, TemplateResult, unsafeCSS, html } from "lit";
export type Style = string | CSSResult | CSSStyleSheet;
import { ReadonlySignal, computed, effect, signal } from "@preact/signals-core";
export class AsyncState<T> {
constructor() {}
get value(): T | null {
return null;
}
get requireValue(): T {