@seamline-kit/seamline-settings 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs CHANGED
@@ -1 +1,131 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./lib-cjGq4QSq.cjs`);function t(){return{render(){return n()}}}function n(){return e.t(`div`,[e.t(`h2`,`Settings`)])}exports.init=t;
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ let hastscript_jsx_runtime = require("hastscript/jsx-runtime");
3
+
4
+ //#region src/settings-page-names.ts
5
+ const DEFAULT_PREFIX = "slk-settings";
6
+ const SETTINGS_PAGE_NAMES = {
7
+ appearanceTitle: `${DEFAULT_PREFIX}-appearance-title`,
8
+ appearanceForm: `${DEFAULT_PREFIX}-appearance-form`,
9
+ themeSystem: `${DEFAULT_PREFIX}-theme-system`,
10
+ themeLight: `${DEFAULT_PREFIX}-theme-light`,
11
+ themeDark: `${DEFAULT_PREFIX}-theme-dark`
12
+ };
13
+
14
+ //#endregion
15
+ //#region src/theme.ts
16
+ const THEMES = [
17
+ "system",
18
+ "light",
19
+ "dark"
20
+ ];
21
+ const THEME_FIELD_NAME = `${DEFAULT_PREFIX}-theme`;
22
+ const DEFAULT_THEME = THEMES[0];
23
+ function isTheme(value) {
24
+ return THEMES.some((theme) => theme === value);
25
+ }
26
+
27
+ //#endregion
28
+ //#region src/settings-page.tsx
29
+ function SettingsPage({ defaultTheme }) {
30
+ return /* @__PURE__ */ (0, hastscript_jsx_runtime.jsxs)(hastscript_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("h1", { children: "Settings" }), /* @__PURE__ */ (0, hastscript_jsx_runtime.jsxs)("section", {
31
+ "aria-labelledby": SETTINGS_PAGE_NAMES.appearanceTitle,
32
+ children: [/* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("h2", {
33
+ id: SETTINGS_PAGE_NAMES.appearanceTitle,
34
+ children: "Appearance"
35
+ }), /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("form", {
36
+ id: SETTINGS_PAGE_NAMES.appearanceForm,
37
+ children: /* @__PURE__ */ (0, hastscript_jsx_runtime.jsxs)("fieldset", { children: [
38
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("legend", { children: "Theme" }),
39
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("input", {
40
+ type: "radio",
41
+ id: SETTINGS_PAGE_NAMES.themeSystem,
42
+ name: THEME_FIELD_NAME,
43
+ value: "system",
44
+ checked: defaultTheme === "system"
45
+ }),
46
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("label", {
47
+ for: SETTINGS_PAGE_NAMES.themeSystem,
48
+ children: "System"
49
+ }),
50
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("input", {
51
+ type: "radio",
52
+ id: SETTINGS_PAGE_NAMES.themeLight,
53
+ name: THEME_FIELD_NAME,
54
+ value: "light",
55
+ checked: defaultTheme === "light"
56
+ }),
57
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("label", {
58
+ for: SETTINGS_PAGE_NAMES.themeLight,
59
+ children: "Light"
60
+ }),
61
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("input", {
62
+ type: "radio",
63
+ id: SETTINGS_PAGE_NAMES.themeDark,
64
+ name: THEME_FIELD_NAME,
65
+ value: "dark",
66
+ checked: defaultTheme === "dark"
67
+ }),
68
+ /* @__PURE__ */ (0, hastscript_jsx_runtime.jsx)("label", {
69
+ for: SETTINGS_PAGE_NAMES.themeDark,
70
+ children: "Dark"
71
+ })
72
+ ] })
73
+ })]
74
+ })] });
75
+ }
76
+
77
+ //#endregion
78
+ //#region src/theme-form-controller.ts
79
+ function getSelectedTheme(form) {
80
+ const theme = new FormData(form).get(THEME_FIELD_NAME);
81
+ if (!isTheme(theme)) return null;
82
+ return theme;
83
+ }
84
+ function syncThemeStateToDom(radios, theme) {
85
+ for (const radio of radios) {
86
+ const checked = radio.value === theme;
87
+ radio.checked = checked;
88
+ radio.defaultChecked = checked;
89
+ }
90
+ document.documentElement.setAttribute(`data-${THEME_FIELD_NAME}`, theme);
91
+ }
92
+ function bindThemeForm(onThemeChange) {
93
+ const form = document.getElementById(SETTINGS_PAGE_NAMES.appearanceForm);
94
+ const radios = form.querySelectorAll(`input[name="${THEME_FIELD_NAME}"]`);
95
+ function syncThemeFromForm() {
96
+ const selectedTheme = getSelectedTheme(form);
97
+ if (!selectedTheme) return;
98
+ onThemeChange(selectedTheme);
99
+ }
100
+ const initialSelectedTheme = getSelectedTheme(form);
101
+ if (initialSelectedTheme) onThemeChange(initialSelectedTheme);
102
+ form.addEventListener("change", syncThemeFromForm);
103
+ return {
104
+ sync(theme) {
105
+ syncThemeStateToDom(radios, theme);
106
+ },
107
+ unbind() {
108
+ form.removeEventListener("change", syncThemeFromForm);
109
+ }
110
+ };
111
+ }
112
+
113
+ //#endregion
114
+ //#region src/main.ts
115
+ function init({ defaultTheme = DEFAULT_THEME } = {}) {
116
+ return { render() {
117
+ return render(defaultTheme);
118
+ } };
119
+ }
120
+ function render(defaultTheme) {
121
+ return SettingsPage({ defaultTheme });
122
+ }
123
+
124
+ //#endregion
125
+ exports.DEFAULT_PREFIX = DEFAULT_PREFIX;
126
+ exports.DEFAULT_THEME = DEFAULT_THEME;
127
+ exports.SETTINGS_PAGE_NAMES = SETTINGS_PAGE_NAMES;
128
+ exports.THEME_FIELD_NAME = THEME_FIELD_NAME;
129
+ exports.bindThemeForm = bindThemeForm;
130
+ exports.init = init;
131
+ exports.isTheme = isTheme;
@@ -0,0 +1,40 @@
1
+ import { Result } from "hastscript";
2
+
3
+ //#region src/theme.d.ts
4
+ declare const THEMES: readonly ["system", "light", "dark"];
5
+ type Theme = (typeof THEMES)[number];
6
+ declare const THEME_FIELD_NAME: string;
7
+ declare const DEFAULT_THEME: Theme;
8
+ declare function isTheme(value: unknown): value is Theme;
9
+ //#endregion
10
+ //#region src/settings-page-names.d.ts
11
+ declare const DEFAULT_PREFIX = "slk-settings";
12
+ interface SettingsPageNames {
13
+ appearanceTitle: string;
14
+ appearanceForm: string;
15
+ themeSystem: string;
16
+ themeLight: string;
17
+ themeDark: string;
18
+ }
19
+ declare const SETTINGS_PAGE_NAMES: SettingsPageNames;
20
+ //#endregion
21
+ //#region src/theme-form-controller.d.ts
22
+ interface ThemeFormBinding {
23
+ sync: (theme: Theme) => void;
24
+ unbind: () => void;
25
+ }
26
+ declare function bindThemeForm(onThemeChange: (theme: Theme) => void): ThemeFormBinding;
27
+ //#endregion
28
+ //#region src/main.d.ts
29
+ interface InitOptions {
30
+ defaultTheme?: Theme;
31
+ }
32
+ interface SettingsRenderer {
33
+ render: () => Result;
34
+ }
35
+ declare function init({
36
+ defaultTheme
37
+ }?: InitOptions): SettingsRenderer;
38
+ //#endregion
39
+ export { DEFAULT_PREFIX, DEFAULT_THEME, SETTINGS_PAGE_NAMES, THEME_FIELD_NAME, type Theme, bindThemeForm, init, isTheme };
40
+ //# sourceMappingURL=main.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.cts","names":[],"sources":["../src/theme.ts","../src/settings-page-names.ts","../src/theme-form-controller.ts","../src/main.ts"],"mappings":";;;cAEM,MAAA;AAAA,KACM,KAAA,WAAgB,MAAA;AAAA,cAEf,gBAAA;AAAA,cACA,aAAA,EAAe,KAAA;AAAA,iBAEZ,OAAA,CAAQ,KAAA,YAAiB,KAAA,IAAS,KAAA;;;cCRrC,cAAA;AAAA,UAEI,iBAAA;EACf,eAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,cAGW,mBAAA,EAAqB,iBAAA;;;UCPxB,gBAAA;EACR,IAAA,GAAO,KAAA,EAAO,KAAA;EACd,MAAA;AAAA;AAAA,iBAsBc,aAAA,CAAc,aAAA,GAAgB,KAAA,EAAO,KAAA,YAAiB,gBAAA;;;UCvB5D,WAAA;EACR,YAAA,GAAe,KAAA;AAAA;AAAA,UAGP,gBAAA;EACR,MAAA,QAAc,MAAA;AAAA;AAAA,iBAGA,IAAA,CAAA;EAAO;AAAA,IAAgC,WAAA,GAAmB,gBAAA"}
package/dist/main.d.ts CHANGED
@@ -1,4 +1,40 @@
1
- export declare function init(): {
2
- render(): import("hast").Element;
3
- };
1
+ import { Result } from "hastscript";
2
+
3
+ //#region src/theme.d.ts
4
+ declare const THEMES: readonly ["system", "light", "dark"];
5
+ type Theme = (typeof THEMES)[number];
6
+ declare const THEME_FIELD_NAME: string;
7
+ declare const DEFAULT_THEME: Theme;
8
+ declare function isTheme(value: unknown): value is Theme;
9
+ //#endregion
10
+ //#region src/settings-page-names.d.ts
11
+ declare const DEFAULT_PREFIX = "slk-settings";
12
+ interface SettingsPageNames {
13
+ appearanceTitle: string;
14
+ appearanceForm: string;
15
+ themeSystem: string;
16
+ themeLight: string;
17
+ themeDark: string;
18
+ }
19
+ declare const SETTINGS_PAGE_NAMES: SettingsPageNames;
20
+ //#endregion
21
+ //#region src/theme-form-controller.d.ts
22
+ interface ThemeFormBinding {
23
+ sync: (theme: Theme) => void;
24
+ unbind: () => void;
25
+ }
26
+ declare function bindThemeForm(onThemeChange: (theme: Theme) => void): ThemeFormBinding;
27
+ //#endregion
28
+ //#region src/main.d.ts
29
+ interface InitOptions {
30
+ defaultTheme?: Theme;
31
+ }
32
+ interface SettingsRenderer {
33
+ render: () => Result;
34
+ }
35
+ declare function init({
36
+ defaultTheme
37
+ }?: InitOptions): SettingsRenderer;
38
+ //#endregion
39
+ export { DEFAULT_PREFIX, DEFAULT_THEME, SETTINGS_PAGE_NAMES, THEME_FIELD_NAME, type Theme, bindThemeForm, init, isTheme };
4
40
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAEA,wBAAgB,IAAI;;EAMnB"}
1
+ {"version":3,"file":"main.d.ts","names":[],"sources":["../src/theme.ts","../src/settings-page-names.ts","../src/theme-form-controller.ts","../src/main.ts"],"mappings":";;;cAEM,MAAA;AAAA,KACM,KAAA,WAAgB,MAAA;AAAA,cAEf,gBAAA;AAAA,cACA,aAAA,EAAe,KAAA;AAAA,iBAEZ,OAAA,CAAQ,KAAA,YAAiB,KAAA,IAAS,KAAA;;;cCRrC,cAAA;AAAA,UAEI,iBAAA;EACf,eAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,cAGW,mBAAA,EAAqB,iBAAA;;;UCPxB,gBAAA;EACR,IAAA,GAAO,KAAA,EAAO,KAAA;EACd,MAAA;AAAA;AAAA,iBAsBc,aAAA,CAAc,aAAA,GAAgB,KAAA,EAAO,KAAA,YAAiB,gBAAA;;;UCvB5D,WAAA;EACR,YAAA,GAAe,KAAA;AAAA;AAAA,UAGP,gBAAA;EACR,MAAA,QAAc,MAAA;AAAA;AAAA,iBAGA,IAAA,CAAA;EAAO;AAAA,IAAgC,WAAA,GAAmB,gBAAA"}
package/dist/main.js CHANGED
@@ -1,10 +1,125 @@
1
- import { t as e } from "./lib-DIb46Sli.js";
2
- function t() {
1
+ import { Fragment, jsx, jsxs } from "hastscript/jsx-runtime";
2
+
3
+ //#region src/settings-page-names.ts
4
+ const DEFAULT_PREFIX = "slk-settings";
5
+ const SETTINGS_PAGE_NAMES = {
6
+ appearanceTitle: `${DEFAULT_PREFIX}-appearance-title`,
7
+ appearanceForm: `${DEFAULT_PREFIX}-appearance-form`,
8
+ themeSystem: `${DEFAULT_PREFIX}-theme-system`,
9
+ themeLight: `${DEFAULT_PREFIX}-theme-light`,
10
+ themeDark: `${DEFAULT_PREFIX}-theme-dark`
11
+ };
12
+
13
+ //#endregion
14
+ //#region src/theme.ts
15
+ const THEMES = [
16
+ "system",
17
+ "light",
18
+ "dark"
19
+ ];
20
+ const THEME_FIELD_NAME = `${DEFAULT_PREFIX}-theme`;
21
+ const DEFAULT_THEME = THEMES[0];
22
+ function isTheme(value) {
23
+ return THEMES.some((theme) => theme === value);
24
+ }
25
+
26
+ //#endregion
27
+ //#region src/settings-page.tsx
28
+ function SettingsPage({ defaultTheme }) {
29
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("h1", { children: "Settings" }), /* @__PURE__ */ jsxs("section", {
30
+ "aria-labelledby": SETTINGS_PAGE_NAMES.appearanceTitle,
31
+ children: [/* @__PURE__ */ jsx("h2", {
32
+ id: SETTINGS_PAGE_NAMES.appearanceTitle,
33
+ children: "Appearance"
34
+ }), /* @__PURE__ */ jsx("form", {
35
+ id: SETTINGS_PAGE_NAMES.appearanceForm,
36
+ children: /* @__PURE__ */ jsxs("fieldset", { children: [
37
+ /* @__PURE__ */ jsx("legend", { children: "Theme" }),
38
+ /* @__PURE__ */ jsx("input", {
39
+ type: "radio",
40
+ id: SETTINGS_PAGE_NAMES.themeSystem,
41
+ name: THEME_FIELD_NAME,
42
+ value: "system",
43
+ checked: defaultTheme === "system"
44
+ }),
45
+ /* @__PURE__ */ jsx("label", {
46
+ for: SETTINGS_PAGE_NAMES.themeSystem,
47
+ children: "System"
48
+ }),
49
+ /* @__PURE__ */ jsx("input", {
50
+ type: "radio",
51
+ id: SETTINGS_PAGE_NAMES.themeLight,
52
+ name: THEME_FIELD_NAME,
53
+ value: "light",
54
+ checked: defaultTheme === "light"
55
+ }),
56
+ /* @__PURE__ */ jsx("label", {
57
+ for: SETTINGS_PAGE_NAMES.themeLight,
58
+ children: "Light"
59
+ }),
60
+ /* @__PURE__ */ jsx("input", {
61
+ type: "radio",
62
+ id: SETTINGS_PAGE_NAMES.themeDark,
63
+ name: THEME_FIELD_NAME,
64
+ value: "dark",
65
+ checked: defaultTheme === "dark"
66
+ }),
67
+ /* @__PURE__ */ jsx("label", {
68
+ for: SETTINGS_PAGE_NAMES.themeDark,
69
+ children: "Dark"
70
+ })
71
+ ] })
72
+ })]
73
+ })] });
74
+ }
75
+
76
+ //#endregion
77
+ //#region src/theme-form-controller.ts
78
+ function getSelectedTheme(form) {
79
+ const theme = new FormData(form).get(THEME_FIELD_NAME);
80
+ if (!isTheme(theme)) return null;
81
+ return theme;
82
+ }
83
+ function syncThemeStateToDom(radios, theme) {
84
+ for (const radio of radios) {
85
+ const checked = radio.value === theme;
86
+ radio.checked = checked;
87
+ radio.defaultChecked = checked;
88
+ }
89
+ document.documentElement.setAttribute(`data-${THEME_FIELD_NAME}`, theme);
90
+ }
91
+ function bindThemeForm(onThemeChange) {
92
+ const form = document.getElementById(SETTINGS_PAGE_NAMES.appearanceForm);
93
+ const radios = form.querySelectorAll(`input[name="${THEME_FIELD_NAME}"]`);
94
+ function syncThemeFromForm() {
95
+ const selectedTheme = getSelectedTheme(form);
96
+ if (!selectedTheme) return;
97
+ onThemeChange(selectedTheme);
98
+ }
99
+ const initialSelectedTheme = getSelectedTheme(form);
100
+ if (initialSelectedTheme) onThemeChange(initialSelectedTheme);
101
+ form.addEventListener("change", syncThemeFromForm);
102
+ return {
103
+ sync(theme) {
104
+ syncThemeStateToDom(radios, theme);
105
+ },
106
+ unbind() {
107
+ form.removeEventListener("change", syncThemeFromForm);
108
+ }
109
+ };
110
+ }
111
+
112
+ //#endregion
113
+ //#region src/main.ts
114
+ function init({ defaultTheme = DEFAULT_THEME } = {}) {
3
115
  return { render() {
4
- return n();
116
+ return render(defaultTheme);
5
117
  } };
6
118
  }
7
- function n() {
8
- return e("div", [e("h2", "Settings")]);
119
+ function render(defaultTheme) {
120
+ return SettingsPage({ defaultTheme });
9
121
  }
10
- export { t as init };
122
+
123
+ //#endregion
124
+ export { DEFAULT_PREFIX, DEFAULT_THEME, SETTINGS_PAGE_NAMES, THEME_FIELD_NAME, bindThemeForm, init, isTheme };
125
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","names":[],"sources":["../src/settings-page-names.ts","../src/theme.ts","../src/settings-page.tsx","../src/theme-form-controller.ts","../src/main.ts"],"sourcesContent":["export const DEFAULT_PREFIX = \"slk-settings\";\n\nexport interface SettingsPageNames {\n appearanceTitle: string;\n appearanceForm: string;\n themeSystem: string;\n themeLight: string;\n themeDark: string;\n}\n\nexport const SETTINGS_PAGE_NAMES: SettingsPageNames = {\n appearanceTitle: `${DEFAULT_PREFIX}-appearance-title`,\n appearanceForm: `${DEFAULT_PREFIX}-appearance-form`,\n themeSystem: `${DEFAULT_PREFIX}-theme-system`,\n themeLight: `${DEFAULT_PREFIX}-theme-light`,\n themeDark: `${DEFAULT_PREFIX}-theme-dark`,\n};\n","import { DEFAULT_PREFIX } from \"./settings-page-names\";\n\nconst THEMES = [\"system\", \"light\", \"dark\"] as const;\nexport type Theme = (typeof THEMES)[number];\n\nexport const THEME_FIELD_NAME: string = `${DEFAULT_PREFIX}-theme`;\nexport const DEFAULT_THEME: Theme = THEMES[0];\n\nexport function isTheme(value: unknown): value is Theme {\n return THEMES.some((theme) => theme === value);\n}\n","/** @jsxImportSource hastscript */\n\nimport type { Result as HastResult } from \"hastscript\";\nimport { SETTINGS_PAGE_NAMES } from \"./settings-page-names\";\nimport { THEME_FIELD_NAME, type Theme } from \"./theme\";\n\nexport interface SettingsPageProps {\n defaultTheme: Theme;\n}\n\nexport function SettingsPage({ defaultTheme }: SettingsPageProps): HastResult {\n return (\n <>\n <h1>Settings</h1>\n <section aria-labelledby={SETTINGS_PAGE_NAMES.appearanceTitle}>\n <h2 id={SETTINGS_PAGE_NAMES.appearanceTitle}>Appearance</h2>\n <form id={SETTINGS_PAGE_NAMES.appearanceForm}>\n <fieldset>\n <legend>Theme</legend>\n <input\n type=\"radio\"\n id={SETTINGS_PAGE_NAMES.themeSystem}\n name={THEME_FIELD_NAME}\n value=\"system\"\n checked={defaultTheme === \"system\"}\n />\n <label for={SETTINGS_PAGE_NAMES.themeSystem}>System</label>\n <input\n type=\"radio\"\n id={SETTINGS_PAGE_NAMES.themeLight}\n name={THEME_FIELD_NAME}\n value=\"light\"\n checked={defaultTheme === \"light\"}\n />\n <label for={SETTINGS_PAGE_NAMES.themeLight}>Light</label>\n <input\n type=\"radio\"\n id={SETTINGS_PAGE_NAMES.themeDark}\n name={THEME_FIELD_NAME}\n value=\"dark\"\n checked={defaultTheme === \"dark\"}\n />\n <label for={SETTINGS_PAGE_NAMES.themeDark}>Dark</label>\n </fieldset>\n </form>\n </section>\n </>\n );\n}\n","import { SETTINGS_PAGE_NAMES } from \"./settings-page-names\";\nimport { isTheme, THEME_FIELD_NAME, type Theme } from \"./theme\";\n\ninterface ThemeFormBinding {\n sync: (theme: Theme) => void;\n unbind: () => void;\n}\n\nfunction getSelectedTheme(form: HTMLFormElement): Theme | null {\n const theme = new FormData(form).get(THEME_FIELD_NAME);\n if (!isTheme(theme)) {\n return null;\n }\n\n return theme;\n}\n\nfunction syncThemeStateToDom(radios: NodeListOf<HTMLInputElement>, theme: Theme) {\n for (const radio of radios) {\n const checked = radio.value === theme;\n radio.checked = checked;\n radio.defaultChecked = checked;\n }\n\n document.documentElement.setAttribute(`data-${THEME_FIELD_NAME}`, theme);\n}\n\nexport function bindThemeForm(onThemeChange: (theme: Theme) => void): ThemeFormBinding {\n const form = document.getElementById(SETTINGS_PAGE_NAMES.appearanceForm) as HTMLFormElement;\n const radios = form.querySelectorAll<HTMLInputElement>(`input[name=\"${THEME_FIELD_NAME}\"]`);\n\n function syncThemeFromForm() {\n const selectedTheme = getSelectedTheme(form);\n if (!selectedTheme) {\n return;\n }\n\n onThemeChange(selectedTheme);\n }\n\n const initialSelectedTheme = getSelectedTheme(form);\n if (initialSelectedTheme) {\n onThemeChange(initialSelectedTheme);\n }\n\n form.addEventListener(\"change\", syncThemeFromForm);\n\n return {\n sync(theme: Theme) {\n syncThemeStateToDom(radios, theme);\n },\n unbind() {\n form.removeEventListener(\"change\", syncThemeFromForm);\n },\n };\n}\n","import type { Result as HastResult } from \"hastscript\";\nimport { SettingsPage } from \"./settings-page\";\nimport { DEFAULT_THEME, type Theme } from \"./theme\";\n\ninterface InitOptions {\n defaultTheme?: Theme;\n}\n\ninterface SettingsRenderer {\n render: () => HastResult;\n}\n\nexport function init({ defaultTheme = DEFAULT_THEME }: InitOptions = {}): SettingsRenderer {\n return {\n render() {\n return render(defaultTheme);\n },\n };\n}\n\nfunction render(defaultTheme: Theme): HastResult {\n return SettingsPage({ defaultTheme });\n}\n\nexport { DEFAULT_PREFIX, SETTINGS_PAGE_NAMES } from \"./settings-page-names\";\nexport { bindThemeForm } from \"./theme-form-controller\";\nexport { DEFAULT_THEME, THEME_FIELD_NAME, isTheme, type Theme } from \"./theme\";\n"],"mappings":";;;AAAA,MAAa,iBAAiB;AAU9B,MAAa,sBAAyC;CACpD,iBAAiB,GAAG,eAAe;CACnC,gBAAgB,GAAG,eAAe;CAClC,aAAa,GAAG,eAAe;CAC/B,YAAY,GAAG,eAAe;CAC9B,WAAW,GAAG,eAAe;CAC9B;;;;ACdD,MAAM,SAAS;CAAC;CAAU;CAAS;CAAO;AAG1C,MAAa,mBAA2B,GAAG,eAAe;AAC1D,MAAa,gBAAuB,OAAO;AAE3C,SAAgB,QAAQ,OAAgC;AACtD,QAAO,OAAO,MAAM,UAAU,UAAU,MAAM;;;;;ACChD,SAAgB,aAAa,EAAE,gBAA+C;AAC5E,QACE,4CACE,oBAAC,kBAAG,aAAa,EACjB,qBAAC;EAAQ,mBAAiB,oBAAoB;aAC5C,oBAAC;GAAG,IAAI,oBAAoB;aAAiB;IAAe,EAC5D,oBAAC;GAAK,IAAI,oBAAoB;aAC5B,qBAAC;IACC,oBAAC,sBAAO,UAAc;IACtB,oBAAC;KACC,MAAK;KACL,IAAI,oBAAoB;KACxB,MAAM;KACN,OAAM;KACN,SAAS,iBAAiB;MAC1B;IACF,oBAAC;KAAM,KAAK,oBAAoB;eAAa;MAAc;IAC3D,oBAAC;KACC,MAAK;KACL,IAAI,oBAAoB;KACxB,MAAM;KACN,OAAM;KACN,SAAS,iBAAiB;MAC1B;IACF,oBAAC;KAAM,KAAK,oBAAoB;eAAY;MAAa;IACzD,oBAAC;KACC,MAAK;KACL,IAAI,oBAAoB;KACxB,MAAM;KACN,OAAM;KACN,SAAS,iBAAiB;MAC1B;IACF,oBAAC;KAAM,KAAK,oBAAoB;eAAW;MAAY;OAC9C;IACN;GACC,IACT;;;;;ACtCP,SAAS,iBAAiB,MAAqC;CAC7D,MAAM,QAAQ,IAAI,SAAS,KAAK,CAAC,IAAI,iBAAiB;AACtD,KAAI,CAAC,QAAQ,MAAM,CACjB,QAAO;AAGT,QAAO;;AAGT,SAAS,oBAAoB,QAAsC,OAAc;AAC/E,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,UAAU,MAAM,UAAU;AAChC,QAAM,UAAU;AAChB,QAAM,iBAAiB;;AAGzB,UAAS,gBAAgB,aAAa,QAAQ,oBAAoB,MAAM;;AAG1E,SAAgB,cAAc,eAAyD;CACrF,MAAM,OAAO,SAAS,eAAe,oBAAoB,eAAe;CACxE,MAAM,SAAS,KAAK,iBAAmC,eAAe,iBAAiB,IAAI;CAE3F,SAAS,oBAAoB;EAC3B,MAAM,gBAAgB,iBAAiB,KAAK;AAC5C,MAAI,CAAC,cACH;AAGF,gBAAc,cAAc;;CAG9B,MAAM,uBAAuB,iBAAiB,KAAK;AACnD,KAAI,qBACF,eAAc,qBAAqB;AAGrC,MAAK,iBAAiB,UAAU,kBAAkB;AAElD,QAAO;EACL,KAAK,OAAc;AACjB,uBAAoB,QAAQ,MAAM;;EAEpC,SAAS;AACP,QAAK,oBAAoB,UAAU,kBAAkB;;EAExD;;;;;AC1CH,SAAgB,KAAK,EAAE,eAAe,kBAA+B,EAAE,EAAoB;AACzF,QAAO,EACL,SAAS;AACP,SAAO,OAAO,aAAa;IAE9B;;AAGH,SAAS,OAAO,cAAiC;AAC/C,QAAO,aAAa,EAAE,cAAc,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamline-kit/seamline-settings",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "dist"
@@ -14,44 +14,35 @@
14
14
  "types": "./dist/main.d.ts",
15
15
  "import": "./dist/main.js",
16
16
  "require": "./dist/main.cjs"
17
- },
18
- "./solid": {
19
- "types": "./dist/adapters/solid.d.ts",
20
- "import": "./dist/adapters/solid.js",
21
- "require": "./dist/adapters/solid.cjs"
22
17
  }
23
18
  },
24
19
  "publishConfig": {
25
20
  "access": "public"
26
21
  },
27
22
  "scripts": {
28
- "build": "vite build && pnpm run build:types",
29
- "build:types": "tsc -p tsconfig.build.json",
30
- "typecheck": "tsc -p tsconfig.build.json --noEmit",
23
+ "dev": "tsdown --watch",
24
+ "build": "tsdown",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest",
27
+ "test:browser": "vitest run --config=vitest.browser.config.ts",
28
+ "test:browser:watch": "vitest --config=vitest.browser.config.ts",
29
+ "test:browser:headless": "vitest run --browser.headless --config=vitest.browser.config.ts",
30
+ "test:browser:headless:watch": "vitest --browser.headless --config=vitest.browser.config.ts",
31
+ "typecheck": "tsgo -p tsconfig.build.json --noEmit",
31
32
  "lint": "oxlint",
32
33
  "lint:fix": "oxlint --fix",
33
34
  "format": "oxfmt --ignore-path ../../.gitignore .",
34
35
  "format:check": "oxfmt --check --ignore-path ../../.gitignore ."
35
36
  },
36
37
  "dependencies": {
37
- "hast-util-to-jsx-runtime": "2.3.6",
38
- "hastscript": "9.0.1",
39
- "solid-jsx": "1.1.4"
38
+ "hastscript": "9.0.1"
40
39
  },
41
40
  "devDependencies": {
41
+ "@vitest/browser-playwright": "4.0.18",
42
42
  "oxfmt": "0.32.0",
43
43
  "oxlint": "1.47.0",
44
- "solid-js": "1.9.11",
45
- "typescript": "~5.9.3",
46
- "vite": "8.0.0-beta.14"
47
- },
48
- "peerDependencies": {
49
- "solid-js": "1.x"
50
- },
51
- "peerDependenciesMeta": {
52
- "solid-js": {
53
- "optional": true
54
- }
44
+ "tsdown": "0.20.3",
45
+ "vitest": "4.0.18"
55
46
  },
56
47
  "packageManager": "pnpm@10.29.3"
57
48
  }
@@ -1,2 +0,0 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`../lib-cjGq4QSq.cjs`),t=require(`../main.cjs`);let n=require(`solid-jsx/jsx-runtime`);var r=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,i=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,a={};function o(e,t){return((t||a).jsx?i:r).test(e)}var s=/[ \t\n\f\r]/g;function c(e){return typeof e==`object`?e.type===`text`?l(e.value):!1:l(e)}function l(e){return e.replace(s,``)===``}var u=e.c(((e,t)=>{var n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,r=/\n/g,i=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,o=/^:\s*/,s=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,l=/^\s+|\s+$/g,u=`
2
- `,d=`/`,f=`*`,p=``,m=`comment`,h=`declaration`;function g(e,t){if(typeof e!=`string`)throw TypeError(`First argument must be a string`);if(!e)return[];t||={};var l=1,g=1;function v(e){var t=e.match(r);t&&(l+=t.length);var n=e.lastIndexOf(u);g=~n?e.length-n:g+e.length}function y(){var e={line:l,column:g};return function(t){return t.position=new b(e),C(),t}}function b(e){this.start=e,this.end={line:l,column:g},this.source=t.source}b.prototype.content=e;function x(n){var r=Error(t.source+`:`+l+`:`+g+`: `+n);if(r.reason=n,r.filename=t.source,r.line=l,r.column=g,r.source=e,!t.silent)throw r}function S(t){var n=t.exec(e);if(n){var r=n[0];return v(r),e=e.slice(r.length),n}}function C(){S(i)}function w(e){var t;for(e||=[];t=T();)t!==!1&&e.push(t);return e}function T(){var t=y();if(!(d!=e.charAt(0)||f!=e.charAt(1))){for(var n=2;p!=e.charAt(n)&&(f!=e.charAt(n)||d!=e.charAt(n+1));)++n;if(n+=2,p===e.charAt(n-1))return x(`End of comment missing`);var r=e.slice(2,n-2);return g+=2,v(r),e=e.slice(n),g+=2,t({type:m,comment:r})}}function E(){var e=y(),t=S(a);if(t){if(T(),!S(o))return x(`property missing ':'`);var r=S(s),i=e({type:h,property:_(t[0].replace(n,p)),value:r?_(r[0].replace(n,p)):p});return S(c),i}}function D(){var e=[];w(e);for(var t;t=E();)t!==!1&&(e.push(t),w(e));return e}return C(),D()}function _(e){return e?e.replace(l,p):p}t.exports=g})),d=e.c((e=>{var t=e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e,`__esModule`,{value:!0}),e.default=r;var n=t(u());function r(e,t){let r=null;if(!e||typeof e!=`string`)return r;let i=(0,n.default)(e),a=typeof t==`function`;return i.forEach(e=>{if(e.type!==`declaration`)return;let{property:n,value:i}=e;a?t(n,i,e):i&&(r||={},r[n]=i)}),r}})),f=e.c((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.camelCase=void 0;var t=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,r=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,o=function(e){return!e||r.test(e)||t.test(e)},s=function(e,t){return t.toUpperCase()},c=function(e,t){return`${t}-`};e.camelCase=function(e,t){return t===void 0&&(t={}),o(e)?e:(e=e.toLowerCase(),e=t.reactCompat?e.replace(a,c):e.replace(i,c),e.replace(n,s))}})),p=e.c(((e,t)=>{var n=(e&&e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(d()),r=f();function i(e,t){var i={};return!e||typeof e!=`string`||(0,n.default)(e,function(e,n){e&&n&&(i[(0,r.camelCase)(e,t)]=n)}),i}i.default=i,t.exports=i}));const m=h(`start`);function h(e){return t;function t(t){let n=t&&t.position&&t.position[e]||{};if(typeof n.line==`number`&&n.line>0&&typeof n.column==`number`&&n.column>0)return{line:n.line,column:n.column,offset:typeof n.offset==`number`&&n.offset>-1?n.offset:void 0}}}function g(e){return!e||typeof e!=`object`?``:`position`in e||`type`in e?v(e.position):`start`in e||`end`in e?v(e):`line`in e||`column`in e?_(e):``}function _(e){return y(e&&e.line)+`:`+y(e&&e.column)}function v(e){return _(e&&e.start)+`-`+_(e&&e.end)}function y(e){return e&&typeof e==`number`?e:1}var b=class extends Error{constructor(e,t,n){super(),typeof t==`string`&&(n=t,t=void 0);let r=``,i={},a=!1;if(t&&(i=`line`in t&&`column`in t||`start`in t&&`end`in t?{place:t}:`type`in t?{ancestors:[t],place:t.position}:{...t}),typeof e==`string`?r=e:!i.cause&&e&&(a=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&typeof n==`string`){let e=n.indexOf(`:`);e===-1?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){let e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}let o=i.place&&`start`in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file=``,this.message=r,this.line=o?o.line:void 0,this.name=g(i.place)||`1:1`,this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=a&&i.cause&&typeof i.cause.stack==`string`?i.cause.stack:``,this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}};b.prototype.file=``,b.prototype.name=``,b.prototype.reason=``,b.prototype.message=``,b.prototype.stack=``,b.prototype.column=void 0,b.prototype.line=void 0,b.prototype.ancestors=void 0,b.prototype.cause=void 0,b.prototype.fatal=void 0,b.prototype.place=void 0,b.prototype.ruleId=void 0,b.prototype.source=void 0;var x=e.l(p(),1),S={}.hasOwnProperty,C=new Map,w=/[A-Z]/g,T=new Set([`table`,`tbody`,`thead`,`tfoot`,`tr`]),E=new Set([`td`,`th`]),D=`https://github.com/syntax-tree/hast-util-to-jsx-runtime`;function O(t,n){if(!n||n.Fragment===void 0)throw TypeError("Expected `Fragment` in options");let r=n.filePath||void 0,i;if(n.development){if(typeof n.jsxDEV!=`function`)throw TypeError("Expected `jsxDEV` in options when `development: true`");i=z(r,n.jsxDEV)}else{if(typeof n.jsx!=`function`)throw TypeError("Expected `jsx` in production options");if(typeof n.jsxs!=`function`)throw TypeError("Expected `jsxs` in production options");i=R(r,n.jsx,n.jsxs)}let a={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:i,elementAttributeNameCase:n.elementAttributeNameCase||`react`,evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space===`svg`?e.a:e.i,stylePropertyNameCase:n.stylePropertyNameCase||`dom`,tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},o=k(a,t,void 0);return o&&typeof o!=`string`?o:a.create(t,a.Fragment,{children:o||void 0},void 0)}function k(e,t,n){if(t.type===`element`)return A(e,t,n);if(t.type===`mdxFlowExpression`||t.type===`mdxTextExpression`)return j(e,t);if(t.type===`mdxJsxFlowElement`||t.type===`mdxJsxTextElement`)return N(e,t,n);if(t.type===`mdxjsEsm`)return M(e,t);if(t.type===`root`)return P(e,t,n);if(t.type===`text`)return F(e,t)}function A(t,n,r){let i=t.schema,a=i;n.tagName.toLowerCase()===`svg`&&i.space===`html`&&(a=e.a,t.schema=a),t.ancestors.push(n);let o=G(t,n.tagName,!1),s=B(t,n),l=H(t,n);return T.has(n.tagName)&&(l=l.filter(function(e){return typeof e==`string`?!c(e):!0})),I(t,s,o,n),L(s,l),t.ancestors.pop(),t.schema=i,t.create(n,o,s,r)}function j(e,t){if(t.data&&t.data.estree&&e.evaluater){let n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}K(e,t.position)}function M(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);K(e,t.position)}function N(t,n,r){let i=t.schema,a=i;n.name===`svg`&&i.space===`html`&&(a=e.a,t.schema=a),t.ancestors.push(n);let o=n.name===null?t.Fragment:G(t,n.name,!0),s=V(t,n),c=H(t,n);return I(t,s,o,n),L(s,c),t.ancestors.pop(),t.schema=i,t.create(n,o,s,r)}function P(e,t,n){let r={};return L(r,H(e,t)),e.create(t,e.Fragment,r,n)}function F(e,t){return t.value}function I(e,t,n,r){typeof n!=`string`&&n!==e.Fragment&&e.passNode&&(t.node=r)}function L(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function R(e,t,n){return r;function r(e,r,i,a){let o=Array.isArray(i.children)?n:t;return a?o(r,i,a):o(r,i)}}function z(e,t){return n;function n(n,r,i,a){let o=Array.isArray(i.children),s=m(n);return t(r,i,a,o,{columnNumber:s?s.column-1:void 0,fileName:e,lineNumber:s?s.line:void 0},void 0)}}function B(e,t){let n={},r,i;for(i in t.properties)if(i!==`children`&&S.call(t.properties,i)){let a=U(e,i,t.properties[i]);if(a){let[i,o]=a;e.tableCellAlignToStyle&&i===`align`&&typeof o==`string`&&E.has(t.tagName)?r=o:n[i]=o}}if(r){let t=n.style||={};t[e.stylePropertyNameCase===`css`?`text-align`:`textAlign`]=r}return n}function V(e,t){let n={};for(let r of t.attributes)if(r.type===`mdxJsxExpressionAttribute`)if(r.data&&r.data.estree&&e.evaluater){let t=r.data.estree.body[0];t.type;let i=t.expression;i.type;let a=i.properties[0];a.type,Object.assign(n,e.evaluater.evaluateExpression(a.argument))}else K(e,t.position);else{let i=r.name,a;if(r.value&&typeof r.value==`object`)if(r.value.data&&r.value.data.estree&&e.evaluater){let t=r.value.data.estree.body[0];t.type,a=e.evaluater.evaluateExpression(t.expression)}else K(e,t.position);else a=r.value===null?!0:r.value;n[i]=a}return n}function H(e,t){let n=[],r=-1,i=e.passKeys?new Map:C;for(;++r<t.children.length;){let a=t.children[r],o;if(e.passKeys){let e=a.type===`element`?a.tagName:a.type===`mdxJsxFlowElement`||a.type===`mdxJsxTextElement`?a.name:void 0;if(e){let t=i.get(e)||0;o=e+`-`+t,i.set(e,t+1)}}let s=k(e,a,o);s!==void 0&&n.push(s)}return n}function U(t,n,r){let i=e.o(t.schema,n);if(!(r==null||typeof r==`number`&&Number.isNaN(r))){if(Array.isArray(r)&&(r=i.commaSeparated?e.r(r):e.n(r)),i.property===`style`){let e=typeof r==`object`?r:W(t,String(r));return t.stylePropertyNameCase===`css`&&(e=q(e)),[`style`,e]}return[t.elementAttributeNameCase===`react`&&i.space?e.s[i.property]||i.property:i.attribute,r]}}function W(e,t){try{return(0,x.default)(t,{reactCompat:!0})}catch(t){if(e.ignoreInvalidStyle)return{};let n=t,r=new b("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:`style`,source:`hast-util-to-jsx-runtime`});throw r.file=e.filePath||void 0,r.url=D+`#cannot-parse-style-attribute`,r}}function G(e,t,n){let r;if(!n)r={type:`Literal`,value:t};else if(t.includes(`.`)){let e=t.split(`.`),n=-1,i;for(;++n<e.length;){let t=o(e[n])?{type:`Identifier`,name:e[n]}:{type:`Literal`,value:e[n]};i=i?{type:`MemberExpression`,object:i,property:t,computed:!!(n&&t.type===`Literal`),optional:!1}:t}r=i}else r=o(t)&&!/^[a-z]/.test(t)?{type:`Identifier`,name:t}:{type:`Literal`,value:t};if(r.type===`Literal`){let t=r.value;return S.call(e.components,t)?e.components[t]:t}if(e.evaluater)return e.evaluater.evaluateExpression(r);K(e)}function K(e,t){let n=new b("Cannot handle MDX estrees without `createEvaluater`",{ancestors:e.ancestors,place:t,ruleId:`mdx-estree`,source:`hast-util-to-jsx-runtime`});throw n.file=e.filePath||void 0,n.url=D+`#cannot-handle-mdx-estrees-without-createevaluater`,n}function q(e){let t={},n;for(n in e)S.call(e,n)&&(t[J(n)]=e[n]);return t}function J(e){let t=e.replace(w,Y);return t.slice(0,3)===`ms-`&&(t=`-`+t),t}function Y(e){return`-`+e.toLowerCase()}function X(){return O(t.init().render(),{Fragment:n.Fragment,jsx:n.jsx,jsxs:n.jsxs,elementAttributeNameCase:`html`,stylePropertyNameCase:`css`})}exports.SeamlineSettings=X,exports.default=X;
@@ -1,3 +0,0 @@
1
- export declare function SeamlineSettings(): JSX.Element;
2
- export default SeamlineSettings;
3
- //# sourceMappingURL=solid.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../../src/adapters/solid.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,gBAU/B;AAED,eAAe,gBAAgB,CAAC"}