silentium-components 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/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.0.4](https://github.com/silentium-lab/silentium-components/compare/v0.0.3...v0.0.4) (2025-04-17)
6
+
7
+
8
+ ### Features
9
+
10
+ * **12-issue:** routes added ([faf32a6](https://github.com/silentium-lab/silentium-components/commit/faf32a6dfdbc09776279c4194ecd9c50a55a256c))
11
+ * **12-issue:** work done on creation Path class ([d7fcd11](https://github.com/silentium-lab/silentium-components/commit/d7fcd11e235a6b00d550124859d4013409fb6b9f))
12
+ * **12-issue:** work on path ([f2a13c4](https://github.com/silentium-lab/silentium-components/commit/f2a13c4a9a2d02807d7e9f1fd58392baa0d63767))
13
+ * **12-issue:** work on path ([98db7c1](https://github.com/silentium-lab/silentium-components/commit/98db7c12388c818abf03f7dfe60c5789d3781019))
14
+ * **main:** fix versions of components ([d1ff4d0](https://github.com/silentium-lab/silentium-components/commit/d1ff4d091a4fc62c16f6bb9e710207be3333e12a))
15
+
5
16
  ### [0.0.3](https://github.com/silentium-lab/silentium-components/compare/v0.0.2...v0.0.3) (2025-04-16)
6
17
 
7
18
 
@@ -431,6 +431,31 @@ class Loading {
431
431
  class Touched {
432
432
  }
433
433
 
434
+ class Path {
435
+ constructor(baseSource, keyType) {
436
+ this.baseSource = baseSource;
437
+ this.keyType = keyType;
438
+ }
439
+ value(guest) {
440
+ const all = new silentium.SourceAll(["base", "key"]);
441
+ silentium.value(this.baseSource, new silentium.GuestCast(guest, all.guestKey("base")));
442
+ silentium.value(this.keyType, new silentium.GuestCast(guest, all.guestKey("key")));
443
+ all.value(
444
+ new silentium.GuestCast(guest, ({ base, key }) => {
445
+ const keyChunks = key.split(".");
446
+ let value2 = base;
447
+ keyChunks.forEach((keyChunk) => {
448
+ value2 = value2[keyChunk];
449
+ });
450
+ if (value2 !== void 0 && value2 !== base) {
451
+ silentium.give(value2, guest);
452
+ }
453
+ })
454
+ );
455
+ return this;
456
+ }
457
+ }
458
+
434
459
  var __defProp = Object.defineProperty;
435
460
  var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value2 }) : obj[key] = value2;
436
461
  var __publicField = (obj, key, value2) => __defNormalProp(obj, key + "" , value2);
@@ -464,6 +489,7 @@ exports.Loading = Loading;
464
489
  exports.Navigation = Navigation;
465
490
  exports.Page = Page;
466
491
  exports.PageFetchTransport = PageFetchTransport;
492
+ exports.Path = Path;
467
493
  exports.RouteDisplay = RouteDisplay;
468
494
  exports.Router = Router;
469
495
  exports.Text = Text;
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.cjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["give","SourceAll","value","Patron","route","__publicField","SourceWithPool","GuestCast","PatronOnce","HistoryNewPage","HistoryPoppedPage","PrivateClass","Source","basePath","sourceOf"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.cjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/behaviors/Path.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n give,\n GuestCast,\n GuestType,\n SourceAll,\n SourceObjectType,\n SourceType,\n value,\n} from \"silentium\";\n\nexport class Path<T extends Record<string, unknown>, K extends string>\n implements SourceObjectType<T[K]>\n{\n public constructor(\n private baseSource: SourceType<T>,\n private keyType: SourceType<K>,\n ) {}\n\n public value(guest: GuestType<T[K]>) {\n const all = new SourceAll<{ base: T; key: K }>([\"base\", \"key\"]);\n value(this.baseSource, new GuestCast(guest, all.guestKey(\"base\")));\n value(this.keyType, new GuestCast(guest, all.guestKey(\"key\")));\n all.value(\n new GuestCast(guest, ({ base, key }) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as T)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n give(value as T[K], guest);\n }\n }),\n );\n return this;\n }\n}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["give","SourceAll","value","Patron","route","__publicField","SourceWithPool","GuestCast","PatronOnce","HistoryNewPage","HistoryPoppedPage","PrivateClass","Source","basePath","sourceOf"],"mappings":"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"}
@@ -194,6 +194,13 @@ declare class Loading implements SourceObjectType<boolean> {
194
194
  declare class Touched {
195
195
  }
196
196
 
197
+ declare class Path<T extends Record<string, unknown>, K extends string> implements SourceObjectType<T[K]> {
198
+ private baseSource;
199
+ private keyType;
200
+ constructor(baseSource: SourceType<T>, keyType: SourceType<K>);
201
+ value(guest: GuestType<T[K]>): this;
202
+ }
203
+
197
204
  /**
198
205
  * https://silentium-lab.github.io/silentium-components/#/structures/hash-table
199
206
  */
@@ -203,4 +210,4 @@ declare class HashTable implements SourceObjectType<Record<string, unknown>> {
203
210
  value(guest: GuestType<Record<string, unknown>>): this;
204
211
  }
205
212
 
206
- export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, RouteDisplay, type RouteDisplayType, type RouteDocument, type RoutePageTransportType, type RoutePageType, Router, Text, Touched, Visible };
213
+ export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, Path, RouteDisplay, type RouteDisplayType, type RouteDocument, type RoutePageTransportType, type RoutePageType, Router, Text, Touched, Visible };
@@ -429,6 +429,31 @@ class Loading {
429
429
  class Touched {
430
430
  }
431
431
 
432
+ class Path {
433
+ constructor(baseSource, keyType) {
434
+ this.baseSource = baseSource;
435
+ this.keyType = keyType;
436
+ }
437
+ value(guest) {
438
+ const all = new SourceAll(["base", "key"]);
439
+ value(this.baseSource, new GuestCast(guest, all.guestKey("base")));
440
+ value(this.keyType, new GuestCast(guest, all.guestKey("key")));
441
+ all.value(
442
+ new GuestCast(guest, ({ base, key }) => {
443
+ const keyChunks = key.split(".");
444
+ let value2 = base;
445
+ keyChunks.forEach((keyChunk) => {
446
+ value2 = value2[keyChunk];
447
+ });
448
+ if (value2 !== void 0 && value2 !== base) {
449
+ give(value2, guest);
450
+ }
451
+ })
452
+ );
453
+ return this;
454
+ }
455
+ }
456
+
432
457
  var __defProp = Object.defineProperty;
433
458
  var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value2 }) : obj[key] = value2;
434
459
  var __publicField = (obj, key, value2) => __defNormalProp(obj, key + "" , value2);
@@ -450,5 +475,5 @@ class HashTable {
450
475
  }
451
476
  }
452
477
 
453
- export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, RouteDisplay, Router, Text, Touched, Visible };
478
+ export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, Path, RouteDisplay, Router, Text, Touched, Visible };
454
479
  //# sourceMappingURL=silentium-components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.js","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["route","__publicField","basePath","value"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.js","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/behaviors/Path.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n give,\n GuestCast,\n GuestType,\n SourceAll,\n SourceObjectType,\n SourceType,\n value,\n} from \"silentium\";\n\nexport class Path<T extends Record<string, unknown>, K extends string>\n implements SourceObjectType<T[K]>\n{\n public constructor(\n private baseSource: SourceType<T>,\n private keyType: SourceType<K>,\n ) {}\n\n public value(guest: GuestType<T[K]>) {\n const all = new SourceAll<{ base: T; key: K }>([\"base\", \"key\"]);\n value(this.baseSource, new GuestCast(guest, all.guestKey(\"base\")));\n value(this.keyType, new GuestCast(guest, all.guestKey(\"key\")));\n all.value(\n new GuestCast(guest, ({ base, key }) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as T)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n give(value as T[K], guest);\n }\n }),\n );\n return this;\n }\n}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["route","__publicField","basePath","value"],"mappings":"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"}
@@ -1 +1 @@
1
- !function(e,t,r){"use strict";class s{constructor(e,t){this.basePath=e,this.template=t}content(e){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((r=>{t.give(r,e)}))}}class i{constructor(e,t,r,s,i){this.loading=e,this.basePath=t,this.currentPage=r,this.display=s,this.pageTransport=i}routes(e){const r=e.find((e=>e.default)),s=new t.SourceAll;t.value(this.basePath,new t.Patron(s.guestKey("basePath"))),t.value(this.currentPage,new t.Patron(s.guestKey("currentPage"))),s.value(new t.Patron((({basePath:s,currentPage:i})=>{const n=i.replace(s,""),o=e.find((e=>e.aliases&&(e.aliases.includes(i)||e.aliases.includes(n))));if(o){const e=s+o.url;if(e!==i)return void t.give(e,this.currentPage)}let a=e.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(n)}return e.url.replaceAll("*","")===n}));if(!a&&r&&(a=r),!a)throw new Error("No matching route in Navigation");{const e=s.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");t.give(!0,this.loading),this.pageTransport.get(e,a.template).content((e=>{this.display.display(e),a.page.mounted(),t.give(!1,this.loading)}))}})))}}class n{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var o=Object.defineProperty,a=(e,t,r)=>((e,t,r)=>t in e?o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class l{constructor(){a(this,"source");const e=location.href.replace(location.origin,"");this.source=new t.SourceWithPool(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class c{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class u{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const r=document.querySelectorAll(e);if(!r.length)throw new Error(`Link wrapper not found for selector ${e}`);r.forEach((e=>{e.addEventListener("click",(r=>{t?e.querySelectorAll(t).forEach((e=>{r?.target!==e&&r?.currentTarget!==e||this.handleClick({preventDefault:r.preventDefault.bind(r),target:e})})):this.handleClick(r)}))}))}handleClick(e){let r=e?.target?.getAttribute("href");r||(r=e?.currentTarget?.getAttribute("href")),r&&0!==r.indexOf("http")&&(e.preventDefault(),t.value(this.basePath,(e=>{this.linkSource.give(e+r)})))}}class h{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(e){const r=new t.SourceAll;this.sources.forEach((s=>{s.source.value(new t.GuestCast(e,r.guestKey(s.placeholder)))})),r.value(new t.GuestCast(e,(r=>{let s=this.selectorTemplate;Object.entries(r).map((e=>{s=s.replaceAll(e[0],e[1])}));const i=document.querySelector(s);i&&t.give(i,e)})))}}class g{constructor(e,t,r){this.activeClass=e,this.groupSelector=t,this.document=r}give(e){return t.value(this.document,new t.PatronOnce((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}var v=Object.defineProperty,d=(e,t,r)=>((e,t,r)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);var p=Object.defineProperty,w=(e,t,r)=>((e,t,r)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);var m=Object.defineProperty,P=(e,t,r)=>((e,t,r)=>t in e?m(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);e.ComputedElement=h,e.CurrentPage=l,e.Dirty=class{constructor(e,r=[],s=[],i=!1){this.alwaysKeep=r,this.excludeKeys=s,d(this,"comparingSource",new t.SourceWithPool),d(this,"all",new t.SourceAll),this.comparingSource.value(new t.Patron(this.all.guestKey("comparing"))),t.value(e,new t.Patron(this.all.guestKey("base"))),i&&t.value(e,new t.PatronOnce(this))}give(e){return t.give(JSON.parse(JSON.stringify(e)),this.comparingSource),this}value(e){return this.all.value(new t.GuestCast(e,(({comparing:r,base:s})=>{r&&t.give(Object.fromEntries(Object.entries(r).filter((([e,t])=>!!this.alwaysKeep.includes(e)||!this.excludeKeys.includes(e)&&t!==s[e]))),e)}))),this}},e.EntryPointPage=class{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}},e.GroupActiveClass=g,e.HashTable=class{constructor(e){P(this,"source",new t.SourceWithPool({})),t.value(e,new t.Patron((([e,t])=>{this.source.value((r=>{r[e]=t}))})))}value(e){return t.value(this.source,e),this}},e.Input=class{constructor(e,r){this.source=e;const s=document.querySelector(r);this.source.value(new t.Patron((e=>{s.value=String(e)}))),s.addEventListener("keyup",(()=>{this.give(s.value)})),s.addEventListener("change",(()=>{this.give(s.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}},e.Link=u,e.Loading=class{constructor(e,r){this.loadingStartSource=e,this.loadingFinishSource=r,w(this,"loadingSource",new t.SourceWithPool)}value(e){return t.value(this.loadingStartSource,new t.GuestCast(e,(()=>{this.loadingSource.give(!0)}))),t.value(this.loadingFinishSource,new t.GuestCast(e,(()=>{this.loadingSource.give(!1)}))),this.loadingSource.value(e),this}},e.Navigation=i,e.Page=class{constructor(e){this.title=e}mounted(){document.title=this.title}},e.PageFetchTransport=s,e.RouteDisplay=n,e.Router=class{constructor(e,t,r){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=r}routes(e,o,a,v){o||(o=new l),o.value(new t.Patron(new r.HistoryNewPage));const[d]=location.href.replace(location.origin,"").split("#");a||(a=new t.SourceWithPool(`${d}#`.replace("index.html","").replace("//","/")));const p=new t.SourceWithPool(!1);p.value(new t.Patron(new c(this.loaderSelector)));new r.HistoryPoppedPage(o).watchPop();new i(p,a,o,new n(this.navigationResultSelector),new t.PrivateClass(s)).routes(e);new u(o,a).watchClick(this.menuSelector);const w=new t.SourceAll;a.value(new t.Patron(w.guestKey("basePath"))),o.value(new t.Patron(w.guestKey("page")));const m=new t.Source((e=>{w.value(new t.GuestCast(e,(({basePath:r,page:s})=>{t.give(s.replace(r,""),e)})))}));new h([{source:m,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new t.Patron(new g("active",`${this.menuSelector} a`,t.sourceOf(document)))),p.value(new t.Patron((e=>{if(e)return;v&&v();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const r=document.createElement("script");r.setAttribute("type","module"),r.appendChild(document.createTextNode(e.innerText)),t.appendChild(r)}))})))}},e.Text=class{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}},e.Touched=class{},e.Visible=c}({},silentium,silentiumWebApi);
1
+ !function(e,t,s){"use strict";class r{constructor(e,t){this.basePath=e,this.template=t}content(e){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((s=>{t.give(s,e)}))}}class i{constructor(e,t,s,r,i){this.loading=e,this.basePath=t,this.currentPage=s,this.display=r,this.pageTransport=i}routes(e){const s=e.find((e=>e.default)),r=new t.SourceAll;t.value(this.basePath,new t.Patron(r.guestKey("basePath"))),t.value(this.currentPage,new t.Patron(r.guestKey("currentPage"))),r.value(new t.Patron((({basePath:r,currentPage:i})=>{const n=i.replace(r,""),a=e.find((e=>e.aliases&&(e.aliases.includes(i)||e.aliases.includes(n))));if(a){const e=r+a.url;if(e!==i)return void t.give(e,this.currentPage)}let o=e.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(n)}return e.url.replaceAll("*","")===n}));if(!o&&s&&(o=s),!o)throw new Error("No matching route in Navigation");{const e=r.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");t.give(!0,this.loading),this.pageTransport.get(e,o.template).content((e=>{this.display.display(e),o.page.mounted(),t.give(!1,this.loading)}))}})))}}class n{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var a=Object.defineProperty,o=(e,t,s)=>((e,t,s)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);class l{constructor(){o(this,"source");const e=location.href.replace(location.origin,"");this.source=new t.SourceWithPool(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class c{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class u{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const s=document.querySelectorAll(e);if(!s.length)throw new Error(`Link wrapper not found for selector ${e}`);s.forEach((e=>{e.addEventListener("click",(s=>{t?e.querySelectorAll(t).forEach((e=>{s?.target!==e&&s?.currentTarget!==e||this.handleClick({preventDefault:s.preventDefault.bind(s),target:e})})):this.handleClick(s)}))}))}handleClick(e){let s=e?.target?.getAttribute("href");s||(s=e?.currentTarget?.getAttribute("href")),s&&0!==s.indexOf("http")&&(e.preventDefault(),t.value(this.basePath,(e=>{this.linkSource.give(e+s)})))}}class h{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(e){const s=new t.SourceAll;this.sources.forEach((r=>{r.source.value(new t.GuestCast(e,s.guestKey(r.placeholder)))})),s.value(new t.GuestCast(e,(s=>{let r=this.selectorTemplate;Object.entries(s).map((e=>{r=r.replaceAll(e[0],e[1])}));const i=document.querySelector(r);i&&t.give(i,e)})))}}class g{constructor(e,t,s){this.activeClass=e,this.groupSelector=t,this.document=s}give(e){return t.value(this.document,new t.PatronOnce((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}var v=Object.defineProperty,p=(e,t,s)=>((e,t,s)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,"symbol"!=typeof t?t+"":t,s);var d=Object.defineProperty,w=(e,t,s)=>((e,t,s)=>t in e?d(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);var S=Object.defineProperty,m=(e,t,s)=>((e,t,s)=>t in e?S(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);e.ComputedElement=h,e.CurrentPage=l,e.Dirty=class{constructor(e,s=[],r=[],i=!1){this.alwaysKeep=s,this.excludeKeys=r,p(this,"comparingSource",new t.SourceWithPool),p(this,"all",new t.SourceAll),this.comparingSource.value(new t.Patron(this.all.guestKey("comparing"))),t.value(e,new t.Patron(this.all.guestKey("base"))),i&&t.value(e,new t.PatronOnce(this))}give(e){return t.give(JSON.parse(JSON.stringify(e)),this.comparingSource),this}value(e){return this.all.value(new t.GuestCast(e,(({comparing:s,base:r})=>{s&&t.give(Object.fromEntries(Object.entries(s).filter((([e,t])=>!!this.alwaysKeep.includes(e)||!this.excludeKeys.includes(e)&&t!==r[e]))),e)}))),this}},e.EntryPointPage=class{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}},e.GroupActiveClass=g,e.HashTable=class{constructor(e){m(this,"source",new t.SourceWithPool({})),t.value(e,new t.Patron((([e,t])=>{this.source.value((s=>{s[e]=t}))})))}value(e){return t.value(this.source,e),this}},e.Input=class{constructor(e,s){this.source=e;const r=document.querySelector(s);this.source.value(new t.Patron((e=>{r.value=String(e)}))),r.addEventListener("keyup",(()=>{this.give(r.value)})),r.addEventListener("change",(()=>{this.give(r.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}},e.Link=u,e.Loading=class{constructor(e,s){this.loadingStartSource=e,this.loadingFinishSource=s,w(this,"loadingSource",new t.SourceWithPool)}value(e){return t.value(this.loadingStartSource,new t.GuestCast(e,(()=>{this.loadingSource.give(!0)}))),t.value(this.loadingFinishSource,new t.GuestCast(e,(()=>{this.loadingSource.give(!1)}))),this.loadingSource.value(e),this}},e.Navigation=i,e.Page=class{constructor(e){this.title=e}mounted(){document.title=this.title}},e.PageFetchTransport=r,e.Path=class{constructor(e,t){this.baseSource=e,this.keyType=t}value(e){const s=new t.SourceAll(["base","key"]);return t.value(this.baseSource,new t.GuestCast(e,s.guestKey("base"))),t.value(this.keyType,new t.GuestCast(e,s.guestKey("key"))),s.value(new t.GuestCast(e,(({base:s,key:r})=>{const i=r.split(".");let n=s;i.forEach((e=>{n=n[e]})),void 0!==n&&n!==s&&t.give(n,e)}))),this}},e.RouteDisplay=n,e.Router=class{constructor(e,t,s){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=s}routes(e,a,o,v){a||(a=new l),a.value(new t.Patron(new s.HistoryNewPage));const[p]=location.href.replace(location.origin,"").split("#");o||(o=new t.SourceWithPool(`${p}#`.replace("index.html","").replace("//","/")));const d=new t.SourceWithPool(!1);d.value(new t.Patron(new c(this.loaderSelector)));new s.HistoryPoppedPage(a).watchPop();new i(d,o,a,new n(this.navigationResultSelector),new t.PrivateClass(r)).routes(e);new u(a,o).watchClick(this.menuSelector);const w=new t.SourceAll;o.value(new t.Patron(w.guestKey("basePath"))),a.value(new t.Patron(w.guestKey("page")));const S=new t.Source((e=>{w.value(new t.GuestCast(e,(({basePath:s,page:r})=>{t.give(r.replace(s,""),e)})))}));new h([{source:S,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new t.Patron(new g("active",`${this.menuSelector} a`,t.sourceOf(document)))),d.value(new t.Patron((e=>{if(e)return;v&&v();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const s=document.createElement("script");s.setAttribute("type","module"),s.appendChild(document.createTextNode(e.innerText)),t.appendChild(s)}))})))}},e.Text=class{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}},e.Touched=class{},e.Visible=c}({},silentium,silentiumWebApi);
@@ -1,2 +1,2 @@
1
- import{give as e,SourceAll as t,value as r,Patron as s,SourceWithPool as i,GuestCast as n,PatronOnce as l,PrivateClass as c,Source as o,sourceOf as a}from"silentium";import{HistoryNewPage as u,HistoryPoppedPage as h}from"silentium-web-api";class d{constructor(e,t){this.basePath=e,this.template=t}content(t){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((r=>{e(r,t)}))}}class p{constructor(e,t,r,s,i){this.loading=e,this.basePath=t,this.currentPage=r,this.display=s,this.pageTransport=i}routes(i){const n=i.find((e=>e.default)),l=new t;r(this.basePath,new s(l.guestKey("basePath"))),r(this.currentPage,new s(l.guestKey("currentPage"))),l.value(new s((({basePath:t,currentPage:r})=>{const s=r.replace(t,""),l=i.find((e=>e.aliases&&(e.aliases.includes(r)||e.aliases.includes(s))));if(l){const s=t+l.url;if(s!==r)return void e(s,this.currentPage)}let c=i.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(s)}return e.url.replaceAll("*","")===s}));if(!c&&n&&(c=n),!c)throw new Error("No matching route in Navigation");{const r=t.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");e(!0,this.loading),this.pageTransport.get(r,c.template).content((t=>{this.display.display(t),c.page.mounted(),e(!1,this.loading)}))}})))}}class g{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var v=Object.defineProperty,w=(e,t,r)=>((e,t,r)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class m{constructor(){w(this,"source");const e=location.href.replace(location.origin,"");this.source=new i(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class f{constructor(e,t){this.source=e;const r=document.querySelector(t);this.source.value(new s((e=>{r.value=String(e)}))),r.addEventListener("keyup",(()=>{this.give(r.value)})),r.addEventListener("change",(()=>{this.give(r.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}}class S{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class b{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}}class y{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const r=document.querySelectorAll(e);if(!r.length)throw new Error(`Link wrapper not found for selector ${e}`);r.forEach((e=>{e.addEventListener("click",(r=>{t?e.querySelectorAll(t).forEach((e=>{r?.target!==e&&r?.currentTarget!==e||this.handleClick({preventDefault:r.preventDefault.bind(r),target:e})})):this.handleClick(r)}))}))}handleClick(e){let t=e?.target?.getAttribute("href");t||(t=e?.currentTarget?.getAttribute("href")),t&&0!==t.indexOf("http")&&(e.preventDefault(),r(this.basePath,(e=>{this.linkSource.give(e+t)})))}}class P{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(r){const s=new t;this.sources.forEach((e=>{e.source.value(new n(r,s.guestKey(e.placeholder)))})),s.value(new n(r,(t=>{let s=this.selectorTemplate;Object.entries(t).map((e=>{s=s.replaceAll(e[0],e[1])}));const i=document.querySelector(s);i&&e(i,r)})))}}class E{constructor(e,t,r){this.activeClass=e,this.groupSelector=t,this.document=r}give(e){return r(this.document,new l((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}class k{constructor(e,t,r){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=r}routes(r,l,v,w){l||(l=new m),l.value(new s(new u));const[f]=location.href.replace(location.origin,"").split("#");v||(v=new i(`${f}#`.replace("index.html","").replace("//","/")));const b=new i(!1);b.value(new s(new S(this.loaderSelector)));new h(l).watchPop();new p(b,v,l,new g(this.navigationResultSelector),new c(d)).routes(r);new y(l,v).watchClick(this.menuSelector);const k=new t;v.value(new s(k.guestKey("basePath"))),l.value(new s(k.guestKey("page")));const x=new o((t=>{k.value(new n(t,(({basePath:r,page:s})=>{e(s.replace(r,""),t)})))}));new P([{source:x,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new s(new E("active",`${this.menuSelector} a`,a(document)))),b.value(new s((e=>{if(e)return;w&&w();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const r=document.createElement("script");r.setAttribute("type","module"),r.appendChild(document.createTextNode(e.innerText)),t.appendChild(r)}))})))}}class x{constructor(e){this.title=e}mounted(){document.title=this.title}}class A{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}}var K=Object.defineProperty,O=(e,t,r)=>((e,t,r)=>t in e?K(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);class q{constructor(e,n=[],c=[],o=!1){this.alwaysKeep=n,this.excludeKeys=c,O(this,"comparingSource",new i),O(this,"all",new t),this.comparingSource.value(new s(this.all.guestKey("comparing"))),r(e,new s(this.all.guestKey("base"))),o&&r(e,new l(this))}give(t){return e(JSON.parse(JSON.stringify(t)),this.comparingSource),this}value(t){return this.all.value(new n(t,(({comparing:r,base:s})=>{r&&e(Object.fromEntries(Object.entries(r).filter((([e,t])=>!!this.alwaysKeep.includes(e)||!this.excludeKeys.includes(e)&&t!==s[e]))),t)}))),this}}var C=Object.defineProperty,T=(e,t,r)=>((e,t,r)=>t in e?C(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class j{constructor(e,t){this.loadingStartSource=e,this.loadingFinishSource=t,T(this,"loadingSource",new i)}value(e){return r(this.loadingStartSource,new n(e,(()=>{this.loadingSource.give(!0)}))),r(this.loadingFinishSource,new n(e,(()=>{this.loadingSource.give(!1)}))),this.loadingSource.value(e),this}}class L{}var N=Object.defineProperty,$=(e,t,r)=>((e,t,r)=>t in e?N(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,t+"",r);class R{constructor(e){$(this,"source",new i({})),r(e,new s((([e,t])=>{this.source.value((r=>{r[e]=t}))})))}value(e){return r(this.source,e),this}}export{P as ComputedElement,m as CurrentPage,q as Dirty,A as EntryPointPage,E as GroupActiveClass,R as HashTable,f as Input,y as Link,j as Loading,p as Navigation,x as Page,d as PageFetchTransport,g as RouteDisplay,k as Router,b as Text,L as Touched,S as Visible};
1
+ import{give as e,SourceAll as t,value as s,Patron as r,SourceWithPool as i,GuestCast as n,PatronOnce as l,PrivateClass as c,Source as o,sourceOf as a}from"silentium";import{HistoryNewPage as u,HistoryPoppedPage as h}from"silentium-web-api";class p{constructor(e,t){this.basePath=e,this.template=t}content(t){fetch(this.basePath+"/"+this.template).then((e=>e.text())).then((s=>{e(s,t)}))}}class d{constructor(e,t,s,r,i){this.loading=e,this.basePath=t,this.currentPage=s,this.display=r,this.pageTransport=i}routes(i){const n=i.find((e=>e.default)),l=new t;s(this.basePath,new r(l.guestKey("basePath"))),s(this.currentPage,new r(l.guestKey("currentPage"))),l.value(new r((({basePath:t,currentPage:s})=>{const r=s.replace(t,""),l=i.find((e=>e.aliases&&(e.aliases.includes(s)||e.aliases.includes(r))));if(l){const r=t+l.url;if(r!==s)return void e(r,this.currentPage)}let c=i.find((e=>{if(e.url.indexOf("*")>=0){return new RegExp(e.url.replaceAll("*",".*").replaceAll("/","/")).test(r)}return e.url.replaceAll("*","")===r}));if(!c&&n&&(c=n),!c)throw new Error("No matching route in Navigation");{const s=t.replace("/#","").replace("#","").replace(/[^/]+\.html$/,"");e(!0,this.loading),this.pageTransport.get(s,c.template).content((t=>{this.display.display(t),c.page.mounted(),e(!1,this.loading)}))}})))}}class g{constructor(e){this.selector=e}display(e){const t=document.querySelector(this.selector);t&&(t.innerHTML=e)}}var v=Object.defineProperty,w=(e,t,s)=>((e,t,s)=>t in e?v(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);class m{constructor(){w(this,"source");const e=location.href.replace(location.origin,"");this.source=new i(e)}give(e){return this.source.give(e),this}value(e){return this.source.value(e),e}pool(){return this.source.pool()}}class y{constructor(e,t){this.source=e;const s=document.querySelector(t);this.source.value(new r((e=>{s.value=String(e)}))),s.addEventListener("keyup",(()=>{this.give(s.value)})),s.addEventListener("change",(()=>{this.give(s.value)}))}value(e){return this.source.value(e),this}give(e){return this.source.give(e),this}pool(){return this.source.pool()}}class b{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.style.display=e?"block":"none"),this}}class f{constructor(e){this.selector=e}give(e){const t=document.querySelector(this.selector);return t&&(t.innerText=String(e)),this}}class S{constructor(e,t){this.linkSource=e,this.basePath=t}watchClick(e,t){const s=document.querySelectorAll(e);if(!s.length)throw new Error(`Link wrapper not found for selector ${e}`);s.forEach((e=>{e.addEventListener("click",(s=>{t?e.querySelectorAll(t).forEach((e=>{s?.target!==e&&s?.currentTarget!==e||this.handleClick({preventDefault:s.preventDefault.bind(s),target:e})})):this.handleClick(s)}))}))}handleClick(e){let t=e?.target?.getAttribute("href");t||(t=e?.currentTarget?.getAttribute("href")),t&&0!==t.indexOf("http")&&(e.preventDefault(),s(this.basePath,(e=>{this.linkSource.give(e+t)})))}}class P{constructor(e,t){this.sources=e,this.selectorTemplate=t}element(s){const r=new t;this.sources.forEach((e=>{e.source.value(new n(s,r.guestKey(e.placeholder)))})),r.value(new n(s,(t=>{let r=this.selectorTemplate;Object.entries(t).map((e=>{r=r.replaceAll(e[0],e[1])}));const i=document.querySelector(r);i&&e(i,s)})))}}class k{constructor(e,t,s){this.activeClass=e,this.groupSelector=t,this.document=s}give(e){return s(this.document,new l((t=>{t.querySelectorAll(this.groupSelector).forEach((e=>{e.classList.remove(this.activeClass)})),e.classList.add(this.activeClass)}))),this}}class E{constructor(e,t,s){this.loaderSelector=e,this.navigationResultSelector=t,this.menuSelector=s}routes(s,l,v,w){l||(l=new m),l.value(new r(new u));const[y]=location.href.replace(location.origin,"").split("#");v||(v=new i(`${y}#`.replace("index.html","").replace("//","/")));const f=new i(!1);f.value(new r(new b(this.loaderSelector)));new h(l).watchPop();new d(f,v,l,new g(this.navigationResultSelector),new c(p)).routes(s);new S(l,v).watchClick(this.menuSelector);const E=new t;v.value(new r(E.guestKey("basePath"))),l.value(new r(E.guestKey("page")));const K=new o((t=>{E.value(new n(t,(({basePath:s,page:r})=>{e(r.replace(s,""),t)})))}));new P([{source:K,placeholder:"{url}"}],`${this.menuSelector} a[href="{url}"]`).element(new r(new k("active",`${this.menuSelector} a`,a(document)))),f.value(new r((e=>{if(e)return;w&&w();const t=document.querySelector(this.navigationResultSelector);t&&t.querySelectorAll("script").forEach((e=>{const s=document.createElement("script");s.setAttribute("type","module"),s.appendChild(document.createTextNode(e.innerText)),t.appendChild(s)}))})))}}class K{constructor(e){this.title=e}mounted(){document.title=this.title}}class T{constructor(e,t){this.title=e,this.entryPointUrl=t}mounted(){document.title=this.title,import(this.entryPointUrl).then((e=>{e.main&&e.main()}))}}var x=Object.defineProperty,A=(e,t,s)=>((e,t,s)=>t in e?x(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,"symbol"!=typeof t?t+"":t,s);class O{constructor(e,n=[],c=[],o=!1){this.alwaysKeep=n,this.excludeKeys=c,A(this,"comparingSource",new i),A(this,"all",new t),this.comparingSource.value(new r(this.all.guestKey("comparing"))),s(e,new r(this.all.guestKey("base"))),o&&s(e,new l(this))}give(t){return e(JSON.parse(JSON.stringify(t)),this.comparingSource),this}value(t){return this.all.value(new n(t,(({comparing:s,base:r})=>{s&&e(Object.fromEntries(Object.entries(s).filter((([e,t])=>!!this.alwaysKeep.includes(e)||!this.excludeKeys.includes(e)&&t!==r[e]))),t)}))),this}}var q=Object.defineProperty,C=(e,t,s)=>((e,t,s)=>t in e?q(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);class j{constructor(e,t){this.loadingStartSource=e,this.loadingFinishSource=t,C(this,"loadingSource",new i)}value(e){return s(this.loadingStartSource,new n(e,(()=>{this.loadingSource.give(!0)}))),s(this.loadingFinishSource,new n(e,(()=>{this.loadingSource.give(!1)}))),this.loadingSource.value(e),this}}class L{}class N{constructor(e,t){this.baseSource=e,this.keyType=t}value(r){const i=new t(["base","key"]);return s(this.baseSource,new n(r,i.guestKey("base"))),s(this.keyType,new n(r,i.guestKey("key"))),i.value(new n(r,(({base:t,key:s})=>{const i=s.split(".");let n=t;i.forEach((e=>{n=n[e]})),void 0!==n&&n!==t&&e(n,r)}))),this}}var $=Object.defineProperty,R=(e,t,s)=>((e,t,s)=>t in e?$(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s)(e,t+"",s);class D{constructor(e){R(this,"source",new i({})),s(e,new r((([e,t])=>{this.source.value((s=>{s[e]=t}))})))}value(e){return s(this.source,e),this}}export{P as ComputedElement,m as CurrentPage,O as Dirty,T as EntryPointPage,k as GroupActiveClass,D as HashTable,y as Input,S as Link,j as Loading,d as Navigation,K as Page,p as PageFetchTransport,N as Path,g as RouteDisplay,E as Router,f as Text,L as Touched,b as Visible};
2
2
  //# sourceMappingURL=silentium-components.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.min.mjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["PageFetchTransport","constructor","basePath","template","this","content","guest","fetch","then","result","text","give","Navigation","loading","currentPage","display","pageTransport","routes","defaultRoute","find","route","default","all","SourceAll","value","Patron","guestKey","urlWithoutBasePath","replace","routeMatchedToAlias","aliases","includes","correctUrl","url","indexOf","RegExp","replaceAll","test","Error","basePathWithoutHash","get","templateContent","page","mounted","RouteDisplay","selector","contentEl","document","querySelector","innerHTML","CurrentPage","__publicField","location","href","origin","source","SourceWithPool","pool","Input","el","String","addEventListener","Visible","isVisible","style","Text","element","innerText","Link","linkSource","watchClick","subselector","wrapperEl","querySelectorAll","length","forEach","theElement","e","theSubElement","target","currentTarget","handleClick","preventDefault","bind","getAttribute","ComputedElement","sources","selectorTemplate","chain","GuestCast","placeholder","placeholders","Object","entries","map","entry","GroupActiveClass","activeClass","groupSelector","PatronOnce","classList","remove","add","Router","loaderSelector","navigationResultSelector","menuSelector","basePathSource","afterPageLoaded","HistoryNewPage","split","pageLoading","HistoryPoppedPage","watchPop","PrivateClass","urlChain","Source","sourceOf","isInLoading","divDestination","x","sc","createElement","setAttribute","appendChild","createTextNode","Page","title","EntryPointPage","entryPointUrl","import","module","main","Dirty","baseEntitySource","alwaysKeep","excludeKeys","becomePatronAuto","comparingSource","JSON","parse","stringify","comparing","base","fromEntries","filter","key","Loading","loadingStartSource","loadingFinishSource","loadingSource","Touched","HashTable","baseSource","lastRecord"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.min.mjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/behaviors/Path.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n give,\n GuestCast,\n GuestType,\n SourceAll,\n SourceObjectType,\n SourceType,\n value,\n} from \"silentium\";\n\nexport class Path<T extends Record<string, unknown>, K extends string>\n implements SourceObjectType<T[K]>\n{\n public constructor(\n private baseSource: SourceType<T>,\n private keyType: SourceType<K>,\n ) {}\n\n public value(guest: GuestType<T[K]>) {\n const all = new SourceAll<{ base: T; key: K }>([\"base\", \"key\"]);\n value(this.baseSource, new GuestCast(guest, all.guestKey(\"base\")));\n value(this.keyType, new GuestCast(guest, all.guestKey(\"key\")));\n all.value(\n new GuestCast(guest, ({ base, key }) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as T)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n give(value as T[K], guest);\n }\n }),\n );\n return this;\n }\n}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["PageFetchTransport","constructor","basePath","template","this","content","guest","fetch","then","result","text","give","Navigation","loading","currentPage","display","pageTransport","routes","defaultRoute","find","route","default","all","SourceAll","value","Patron","guestKey","urlWithoutBasePath","replace","routeMatchedToAlias","aliases","includes","correctUrl","url","indexOf","RegExp","replaceAll","test","Error","basePathWithoutHash","get","templateContent","page","mounted","RouteDisplay","selector","contentEl","document","querySelector","innerHTML","CurrentPage","__publicField","location","href","origin","source","SourceWithPool","pool","Input","el","String","addEventListener","Visible","isVisible","style","Text","element","innerText","Link","linkSource","watchClick","subselector","wrapperEl","querySelectorAll","length","forEach","theElement","e","theSubElement","target","currentTarget","handleClick","preventDefault","bind","getAttribute","ComputedElement","sources","selectorTemplate","chain","GuestCast","placeholder","placeholders","Object","entries","map","entry","GroupActiveClass","activeClass","groupSelector","PatronOnce","classList","remove","add","Router","loaderSelector","navigationResultSelector","menuSelector","basePathSource","afterPageLoaded","HistoryNewPage","split","pageLoading","HistoryPoppedPage","watchPop","PrivateClass","urlChain","Source","sourceOf","isInLoading","divDestination","x","sc","createElement","setAttribute","appendChild","createTextNode","Page","title","EntryPointPage","entryPointUrl","import","module","main","Dirty","baseEntitySource","alwaysKeep","excludeKeys","becomePatronAuto","comparingSource","JSON","parse","stringify","comparing","base","fromEntries","filter","key","Loading","loadingStartSource","loadingFinishSource","loadingSource","Touched","Path","baseSource","keyType","keyChunks","keyChunk","HashTable","lastRecord"],"mappings":"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"}
@@ -429,6 +429,31 @@ class Loading {
429
429
  class Touched {
430
430
  }
431
431
 
432
+ class Path {
433
+ constructor(baseSource, keyType) {
434
+ this.baseSource = baseSource;
435
+ this.keyType = keyType;
436
+ }
437
+ value(guest) {
438
+ const all = new SourceAll(["base", "key"]);
439
+ value(this.baseSource, new GuestCast(guest, all.guestKey("base")));
440
+ value(this.keyType, new GuestCast(guest, all.guestKey("key")));
441
+ all.value(
442
+ new GuestCast(guest, ({ base, key }) => {
443
+ const keyChunks = key.split(".");
444
+ let value2 = base;
445
+ keyChunks.forEach((keyChunk) => {
446
+ value2 = value2[keyChunk];
447
+ });
448
+ if (value2 !== void 0 && value2 !== base) {
449
+ give(value2, guest);
450
+ }
451
+ })
452
+ );
453
+ return this;
454
+ }
455
+ }
456
+
432
457
  var __defProp = Object.defineProperty;
433
458
  var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value: value2 }) : obj[key] = value2;
434
459
  var __publicField = (obj, key, value2) => __defNormalProp(obj, key + "" , value2);
@@ -450,5 +475,5 @@ class HashTable {
450
475
  }
451
476
  }
452
477
 
453
- export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, RouteDisplay, Router, Text, Touched, Visible };
478
+ export { ComputedElement, CurrentPage, Dirty, EntryPointPage, GroupActiveClass, HashTable, Input, Link, Loading, Navigation, Page, PageFetchTransport, Path, RouteDisplay, Router, Text, Touched, Visible };
454
479
  //# sourceMappingURL=silentium-components.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"silentium-components.mjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["route","__publicField","basePath","value"],"mappings":"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"}
1
+ {"version":3,"file":"silentium-components.mjs","sources":["../src/navigation/PageFetchTransport.ts","../src/navigation/Navigation.ts","../src/navigation/RouteDisplay.ts","../src/navigation/CurrentPage.ts","../src/controls/Input.ts","../src/controls/Visible.ts","../src/controls/Text.ts","../src/controls/Link.ts","../src/controls/ComputedElement.ts","../src/controls/GroupActiveClass.ts","../src/navigation/Router.ts","../src/page/Page.ts","../src/page/EntryPointPage.ts","../src/behaviors/Dirty.ts","../src/behaviors/Loading.ts","../src/behaviors/Touched.ts","../src/behaviors/Path.ts","../src/structures/HashTable.ts"],"sourcesContent":["import { give, GuestType } from \"silentium\";\n\nexport interface RoutePageTransportType {\n content(guest: GuestType<string>): void;\n}\n\n/**\n * Not needed anymore same thing in web api existed\n * @deprecated\n */\nexport class PageFetchTransport implements RoutePageTransportType {\n public constructor(\n private basePath: string,\n private template: string,\n ) {}\n\n public content(guest: GuestType<string>): void {\n fetch(this.basePath + \"/\" + this.template)\n .then((result) => {\n return result.text();\n })\n .then((result) => {\n give(result, guest);\n });\n }\n}\n","import {\n SourceAll,\n Patron,\n PrivateType,\n SourceType,\n value,\n give,\n SourceWithPoolType,\n} from \"silentium\";\nimport { RoutePageTransportType } from \"src/navigation/PageFetchTransport\";\nimport { RouteDisplayType } from \"src/navigation/RouteDisplay\";\nimport { RoutePageType } from \"src/navigation/RoutePageType\";\n\nexport interface RouteDocument {\n url: string;\n template: string;\n aliases?: string[];\n page: RoutePageType;\n default?: boolean;\n}\n\nexport class Navigation {\n public constructor(\n private loading: SourceWithPoolType<boolean>,\n private basePath: SourceType<string>,\n private currentPage: SourceWithPoolType<string>,\n private display: RouteDisplayType,\n private pageTransport: PrivateType<RoutePageTransportType>,\n ) {}\n\n public routes(routes: RouteDocument[]) {\n const defaultRoute = routes.find((route) => route.default);\n const all = new SourceAll<{\n basePath: string;\n currentPage: string;\n }>();\n value(this.basePath, new Patron(all.guestKey(\"basePath\")));\n value(this.currentPage, new Patron(all.guestKey(\"currentPage\")));\n\n all.value(\n new Patron(({ basePath, currentPage }) => {\n const urlWithoutBasePath = currentPage.replace(basePath, \"\");\n const routeMatchedToAlias = routes.find(\n (route) =>\n route.aliases &&\n (route.aliases.includes(currentPage) ||\n route.aliases.includes(urlWithoutBasePath)),\n );\n\n if (routeMatchedToAlias) {\n const correctUrl = basePath + routeMatchedToAlias.url;\n\n if (correctUrl !== currentPage) {\n give(correctUrl, this.currentPage);\n return;\n }\n }\n\n let route = routes.find((route) => {\n if (route.url.indexOf(\"*\") >= 0) {\n const regexp = new RegExp(\n route.url.replaceAll(\"*\", \".*\").replaceAll(\"/\", \"/\"),\n );\n return regexp.test(urlWithoutBasePath);\n }\n return route.url.replaceAll(\"*\", \"\") === urlWithoutBasePath;\n });\n\n if (!route && defaultRoute) {\n route = defaultRoute;\n }\n\n if (route) {\n const basePathWithoutHash = basePath\n .replace(\"/#\", \"\")\n .replace(\"#\", \"\")\n .replace(/[^/]+\\.html$/, \"\");\n give(true, this.loading);\n this.pageTransport\n .get(basePathWithoutHash, route.template)\n .content((templateContent) => {\n this.display.display(templateContent);\n route.page.mounted();\n give(false, this.loading);\n });\n } else {\n throw new Error(\"No matching route in Navigation\");\n }\n }),\n );\n }\n}\n","export interface RouteDisplayType {\n display(content: string): void;\n}\n\n/**\n * Renders content on selector\n * @deprecated move to web api\n */\nexport class RouteDisplay implements RouteDisplayType {\n public constructor(private selector: string) {}\n\n public display(content: string): void {\n const contentEl = document.querySelector(this.selector);\n if (contentEl) {\n contentEl.innerHTML = content;\n }\n }\n}\n","import { GuestType, SourceWithPool, SourceWithPoolType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class CurrentPage implements SourceWithPoolType<string> {\n private source: SourceWithPoolType<string>;\n\n public constructor() {\n const correctUrl = location.href.replace(location.origin, \"\");\n this.source = new SourceWithPool(correctUrl);\n }\n\n public give(value: string): this {\n this.source.give(value);\n return this;\n }\n\n public value(guest: GuestType<string>) {\n this.source.value(guest);\n return guest;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestType, Patron, SourceWithPoolType } from \"silentium\";\n\ntype InputValue = number | string;\n\n/**\n * @deprecated move to web api\n */\nexport class Input implements SourceWithPoolType<InputValue> {\n public constructor(\n private source: SourceWithPoolType<InputValue>,\n selector: string,\n ) {\n const el = document.querySelector(selector) as HTMLInputElement;\n this.source.value(\n new Patron((value) => {\n el.value = String(value);\n }),\n );\n el.addEventListener(\"keyup\", () => {\n this.give(el.value);\n });\n el.addEventListener(\"change\", () => {\n this.give(el.value);\n });\n }\n\n public value(guest: GuestType<InputValue>) {\n this.source.value(guest);\n return this;\n }\n\n public give(value: InputValue) {\n this.source.give(value);\n return this;\n }\n\n public pool() {\n return this.source.pool();\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Visible implements GuestObjectType<boolean> {\n public constructor(private selector: string) {}\n\n public give(isVisible: boolean): this {\n const el = document.querySelector(this.selector) as HTMLElement;\n if (el) {\n el.style.display = isVisible ? \"block\" : \"none\";\n }\n return this;\n }\n}\n","import { GuestObjectType } from \"silentium\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Text implements GuestObjectType {\n public constructor(private selector: string) {}\n\n public give(value: unknown) {\n const element = document.querySelector(this.selector) as HTMLElement;\n if (element) {\n element.innerText = String(value);\n }\n return this;\n }\n}\n","import { GuestObjectType, SourceType, value } from \"silentium\";\n\n/**\n * @deprecated move to web api\n */\nexport class Link {\n public constructor(\n private linkSource: GuestObjectType<string>,\n private basePath: SourceType<string>,\n ) {}\n\n public watchClick(selector: string, subselector?: string) {\n const wrapperEl = document.querySelectorAll(selector);\n if (wrapperEl.length) {\n wrapperEl.forEach((theElement) => {\n theElement.addEventListener(\"click\", (e) => {\n if (subselector) {\n theElement\n .querySelectorAll(subselector)\n .forEach((theSubElement) => {\n if (\n e?.target === theSubElement ||\n e?.currentTarget === theSubElement\n ) {\n this.handleClick({\n preventDefault: e.preventDefault.bind(e),\n target: theSubElement,\n } as unknown as Event);\n }\n });\n } else {\n this.handleClick(e);\n }\n });\n });\n } else {\n throw new Error(`Link wrapper not found for selector ${selector}`);\n }\n }\n\n private handleClick(e: Event) {\n let href = (e?.target as HTMLElement)?.getAttribute(\"href\");\n if (!href) {\n href = (e?.currentTarget as HTMLElement)?.getAttribute(\"href\");\n }\n if (href && href.indexOf(\"http\") !== 0) {\n e.preventDefault();\n value(this.basePath, (basePath) => {\n this.linkSource.give(basePath + href);\n });\n }\n }\n}\n","import {\n give,\n SourceAll,\n SourceObjectType,\n GuestCast,\n GuestType,\n} from \"silentium\";\n\ntype SourceDetailType = {\n source: SourceObjectType<any>;\n placeholder: string;\n};\n\n/**\n * @deprecated use https://kosukhin.github.io/patron-web-api/#/dom/element\n */\nexport class ComputedElement {\n public constructor(\n private sources: SourceDetailType[],\n private selectorTemplate: string,\n ) {}\n\n public element(guest: GuestType<HTMLElement>) {\n const chain = new SourceAll();\n this.sources.forEach((source) => {\n source.source.value(\n new GuestCast(guest as GuestType, chain.guestKey(source.placeholder)),\n );\n });\n\n chain.value(\n new GuestCast(\n guest as GuestType,\n (placeholders: Record<string, string>) => {\n let selectorTemplate = this.selectorTemplate;\n\n Object.entries(placeholders).map((entry) => {\n selectorTemplate = selectorTemplate.replaceAll(entry[0], entry[1]);\n });\n\n const element = document.querySelector(\n selectorTemplate,\n ) as HTMLElement;\n if (element) {\n give(element, guest);\n }\n },\n ),\n );\n }\n}\n","import { GuestObjectType, PatronOnce, SourceType, value } from \"silentium\";\n\n/**\n * Sets activeClass to one element of group\n * and resets activeClass on other group elements\n * suitable for menu active class\n *\n * @deprecated heavily related to web api needs refactoring\n */\nexport class GroupActiveClass implements GuestObjectType<HTMLElement> {\n public constructor(\n private activeClass: string,\n private groupSelector: string,\n private document: SourceType<Document>,\n ) {}\n\n public give(element: HTMLElement): this {\n value(\n this.document,\n new PatronOnce((document) => {\n document.querySelectorAll(this.groupSelector).forEach((el) => {\n el.classList.remove(this.activeClass);\n });\n element.classList.add(this.activeClass);\n }),\n );\n return this;\n }\n}\n","import {\n Source,\n SourceAll,\n GuestCast,\n Patron,\n PrivateClass,\n SourceWithPool,\n give,\n sourceOf,\n} from \"silentium\";\nimport { HistoryNewPage, HistoryPoppedPage } from \"silentium-web-api\";\nimport { ComputedElement, GroupActiveClass, Link, Visible } from \"../controls\";\nimport { CurrentPage } from \"../navigation/CurrentPage\";\nimport { Navigation } from \"../navigation/Navigation\";\nimport { PageFetchTransport } from \"../navigation/PageFetchTransport\";\nimport { RouteDisplay } from \"../navigation/RouteDisplay\";\n\ntype Route = {\n url: string;\n template: string;\n aliases: string[];\n page: any;\n};\n\nexport class Router {\n public constructor(\n private loaderSelector: string,\n private navigationResultSelector: string,\n private menuSelector: string,\n ) {}\n\n routes(\n routes: Route[],\n currentPage: any,\n basePathSource: any,\n afterPageLoaded?: () => void,\n ) {\n if (!currentPage) {\n currentPage = new CurrentPage();\n }\n currentPage.value(new Patron(new HistoryNewPage()));\n\n const [basePath] = location.href.replace(location.origin, \"\").split(\"#\");\n if (!basePathSource) {\n basePathSource = new SourceWithPool(\n `${basePath}#`.replace(\"index.html\", \"\").replace(\"//\", \"/\"),\n );\n }\n\n const pageLoading = new SourceWithPool(false);\n pageLoading.value(new Patron(new Visible(this.loaderSelector)));\n\n const historyPoppedPage = new HistoryPoppedPage(currentPage);\n historyPoppedPage.watchPop();\n\n const navigation = new Navigation(\n pageLoading,\n basePathSource,\n currentPage,\n new RouteDisplay(this.navigationResultSelector),\n new PrivateClass(PageFetchTransport),\n );\n navigation.routes(routes);\n\n const link = new Link(currentPage, basePathSource);\n link.watchClick(this.menuSelector);\n\n const urlChain = new SourceAll<any>();\n basePathSource.value(new Patron(urlChain.guestKey(\"basePath\")));\n currentPage.value(new Patron(urlChain.guestKey(\"page\")));\n const url = new Source((guest) => {\n urlChain.value(\n new GuestCast(guest, ({ basePath, page }) => {\n give(page.replace(basePath, \"\"), guest);\n }),\n );\n });\n\n const activeLink = new ComputedElement(\n [{ source: url, placeholder: \"{url}\" }],\n `${this.menuSelector} a[href=\"{url}\"]`,\n );\n activeLink.element(\n new Patron(\n new GroupActiveClass(\n \"active\",\n `${this.menuSelector} a`,\n sourceOf(document),\n ),\n ),\n );\n\n pageLoading.value(\n new Patron((isInLoading) => {\n if (isInLoading) {\n return;\n }\n\n if (afterPageLoaded) {\n afterPageLoaded();\n }\n\n const divDestination = document.querySelector(\n this.navigationResultSelector,\n );\n if (divDestination) {\n // Оживляем script тэги\n divDestination.querySelectorAll(\"script\").forEach((x) => {\n const sc = document.createElement(\"script\");\n sc.setAttribute(\"type\", \"module\");\n sc.appendChild(document.createTextNode(x.innerText));\n divDestination.appendChild(sc);\n });\n }\n }),\n );\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated Move to web api\n */\nexport class Page implements RoutePageType {\n public constructor(private title: string) {}\n\n public mounted() {\n document.title = this.title;\n }\n}\n","import { RoutePageType } from \"../navigation\";\n\n/**\n * @deprecated not needed\n */\nexport class EntryPointPage implements RoutePageType {\n public constructor(\n private title: string,\n private entryPointUrl: string,\n ) {}\n\n public mounted() {\n document.title = this.title;\n import(this.entryPointUrl).then((module) => {\n if (module.main) {\n module.main();\n }\n });\n }\n}\n","import {\n give,\n GuestCast,\n GuestObjectType,\n GuestType,\n Patron,\n PatronOnce,\n SourceAll,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * Takes source and remember it first value\n * returns new record, what will contain only fields what was changed\n */\nexport class Dirty<T extends object>\n implements SourceObjectType<Partial<T>>, GuestObjectType<T>\n{\n private comparingSource = new SourceWithPool<T>();\n private all = new SourceAll<{ comparing: T | null; base: T }>();\n\n public constructor(\n baseEntitySource: SourceType<T>,\n private alwaysKeep: string[] = [],\n private excludeKeys: string[] = [],\n becomePatronAuto = false,\n ) {\n this.comparingSource.value(new Patron(this.all.guestKey(\"comparing\")));\n value(baseEntitySource, new Patron(this.all.guestKey(\"base\")));\n\n if (becomePatronAuto) {\n value(baseEntitySource, new PatronOnce(this));\n }\n }\n\n public give(value: T): this {\n give(JSON.parse(JSON.stringify(value)), this.comparingSource);\n return this;\n }\n\n public value(guest: GuestType<Partial<T>>): unknown {\n this.all.value(\n new GuestCast(guest, ({ comparing, base }) => {\n if (!comparing) {\n return;\n }\n\n give(\n Object.fromEntries(\n Object.entries(comparing).filter(([key, value]) => {\n if (this.alwaysKeep.includes(key)) {\n return true;\n }\n if (this.excludeKeys.includes(key)) {\n return false;\n }\n return value !== (base as any)[key];\n }),\n ) as T,\n guest,\n );\n }),\n );\n\n return this;\n }\n}\n","import {\n GuestCast,\n GuestType,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/behaviors/loading\n */\nexport class Loading implements SourceObjectType<boolean> {\n private loadingSource = new SourceWithPool<boolean>();\n\n public constructor(\n private loadingStartSource: SourceType<unknown>,\n private loadingFinishSource: SourceType<unknown>,\n ) {}\n\n public value(guest: GuestType<boolean>) {\n value(\n this.loadingStartSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(true);\n }),\n );\n value(\n this.loadingFinishSource,\n new GuestCast(guest, () => {\n this.loadingSource.give(false);\n }),\n );\n this.loadingSource.value(guest);\n return this;\n }\n}\n","export class Touched {}\n","import {\n give,\n GuestCast,\n GuestType,\n SourceAll,\n SourceObjectType,\n SourceType,\n value,\n} from \"silentium\";\n\nexport class Path<T extends Record<string, unknown>, K extends string>\n implements SourceObjectType<T[K]>\n{\n public constructor(\n private baseSource: SourceType<T>,\n private keyType: SourceType<K>,\n ) {}\n\n public value(guest: GuestType<T[K]>) {\n const all = new SourceAll<{ base: T; key: K }>([\"base\", \"key\"]);\n value(this.baseSource, new GuestCast(guest, all.guestKey(\"base\")));\n value(this.keyType, new GuestCast(guest, all.guestKey(\"key\")));\n all.value(\n new GuestCast(guest, ({ base, key }) => {\n const keyChunks = key.split(\".\");\n let value: unknown = base;\n keyChunks.forEach((keyChunk) => {\n value = (value as T)[keyChunk];\n });\n\n if (value !== undefined && value !== base) {\n give(value as T[K], guest);\n }\n }),\n );\n return this;\n }\n}\n","import {\n GuestType,\n Patron,\n SourceObjectType,\n SourceType,\n SourceWithPool,\n value,\n} from \"silentium\";\n\n/**\n * https://silentium-lab.github.io/silentium-components/#/structures/hash-table\n */\nexport class HashTable implements SourceObjectType<Record<string, unknown>> {\n private source = new SourceWithPool<Record<string, unknown>>({});\n\n public constructor(baseSource: SourceType<[string, unknown]>) {\n value(\n baseSource,\n new Patron(([key, value]) => {\n this.source.value((lastRecord) => {\n lastRecord[key] = value;\n });\n }),\n );\n }\n\n public value(guest: GuestType<Record<string, unknown>>) {\n value(this.source, guest);\n return this;\n }\n}\n"],"names":["route","__publicField","basePath","value"],"mappings":"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"}
package/docs/build.sh CHANGED
@@ -3,11 +3,11 @@
3
3
  echo "BEGIN"
4
4
  cd docs
5
5
  cp template.html index.html
6
- sed -i "s/TPL_SILENTIUM_OOP/https:\/\/cdn.jsdelivr.net\/npm\/silentium@0.0.2\/dist\/silentium.min.mjs/g" "index.html"
6
+ sed -i "s/TPL_SILENTIUM_OOP/https:\/\/cdn.jsdelivr.net\/npm\/silentium@0.0.7\/dist\/silentium.min.mjs/g" "index.html"
7
7
 
8
8
  sed -i "s/TPL_SILENTIUM_WEB_API/https:\/\/cdn.jsdelivr.net\/npm\/silentium-web-api@0.0.1\/dist\/silentium-web-api.min.mjs/g" "index.html"
9
9
 
10
- sed -i "s/TPL_SILENTIUM_COMPONENTS/https:\/\/cdn.jsdelivr.net\/npm\/silentium-components@0.0.1\/dist\/silentium-components.min.mjs/g" "index.html"
10
+ sed -i "s/TPL_SILENTIUM_COMPONENTS/https:\/\/cdn.jsdelivr.net\/npm\/silentium-components@0.0.3\/dist\/silentium-components.min.mjs/g" "index.html"
11
11
 
12
12
  sed -i "s/TPL_SILENTIUM_DESIGN/https:\/\/raw.githubusercontent.com\/silentium-lab\/silentium\/refs\/heads\/main\/docs\/assets\/css\/custom.css/g" "index.html"
13
13
 
package/docs/index.html CHANGED
@@ -19,9 +19,9 @@
19
19
  <script type="importmap">
20
20
  {
21
21
  "imports": {
22
- "silentium": "https://cdn.jsdelivr.net/npm/silentium@0.0.2/dist/silentium.min.mjs",
22
+ "silentium": "https://cdn.jsdelivr.net/npm/silentium@0.0.7/dist/silentium.min.mjs",
23
23
  "silentium-web-api": "https://cdn.jsdelivr.net/npm/silentium-web-api@0.0.1/dist/silentium-web-api.min.mjs",
24
- "silentium-components": "https://cdn.jsdelivr.net/npm/silentium-components@0.0.1/dist/silentium-components.min.mjs"
24
+ "silentium-components": "https://cdn.jsdelivr.net/npm/silentium-components@0.0.3/dist/silentium-components.min.mjs"
25
25
  }
26
26
  }
27
27
  </script>
@@ -0,0 +1 @@
1
+ algos will be
@@ -0,0 +1,52 @@
1
+ <a href="https://github.com/silentium-lab/silentium-components/blob/main/src/behaviors/Path.ts" target="_blank"
2
+ class="text-regular inline-flex gap-1 items-center bg-gray-100 border-0 py-1 px-3 focus:outline-none hover:bg-gray-200 rounded text-base mt-4 md:mt-0 mb-4">
3
+ <img src="./assets/img/github_16.jpg" width="16" height="16" />
4
+ Path на GitHub
5
+ </a>
6
+ <h2 class="font-medium title-font text-gray-900 text-lg mb-2">
7
+ <span> Path </span>
8
+ </h2>
9
+
10
+ <p class="text-gray-600 text-lg mb-4">
11
+ Позволяет получить часть записи из целой записи, и данные о базовой записи
12
+ и информация о ключе, который нужно получить являются источниками,
13
+ благодаря этому можно изменяя ключ получать разные записи от одного и того же источника
14
+ </p>
15
+
16
+ <p class="text-gray-600 text-lg mb-0 font-bold">Пример 1.</p>
17
+ <pre
18
+ class="mb-4"
19
+ ><code class="language-js">import { SourceSync, sourceOf } from "silentium";
20
+ import { Path } from 'silentium-components';
21
+
22
+ const record = sourceOf({
23
+ name: "Peter",
24
+ surname: "Parker",
25
+ type: {
26
+ name: "spider-man",
27
+ },
28
+ });
29
+ const typeName = new SourceSync(new Path(record, sourceOf("type.name")));
30
+
31
+ document.querySelector(".guest-result").textContent = typeName.syncValue();
32
+ </code></pre>
33
+
34
+ <p class="text-gray-600 text-lg mb-0 font-bold">Результат 1.</p>
35
+ <div class="example mb-4">
36
+ <span class="guest-result">JS не отработал</span>
37
+ </div>
38
+ <script type="module">
39
+ import { SourceSync, sourceOf } from "silentium";
40
+ import { Path } from 'silentium-components';
41
+
42
+ const record = sourceOf({
43
+ name: "Peter",
44
+ surname: "Parker",
45
+ type: {
46
+ name: "spider-man",
47
+ },
48
+ });
49
+ const typeName = new SourceSync(new Path(record, sourceOf("type.name")));
50
+
51
+ document.querySelector(".guest-result").textContent = typeName.syncValue();
52
+ </script>
@@ -9,4 +9,9 @@
9
9
  <div class="card-content bottom-1">Отслеживание начала и завершения процессов</div>
10
10
  <a class="dynamic-navigation top-auto link" href="/behaviors/loading">Посмотреть</a>
11
11
  </div>
12
+ <div class="card">
13
+ <div class="card-title bottom-2">Path</div>
14
+ <div class="card-content bottom-1">Представить часть источника по переданному пути</div>
15
+ <a class="dynamic-navigation top-auto link" href="/behaviors/path">Посмотреть</a>
16
+ </div>
12
17
  </div>
@@ -14,4 +14,9 @@
14
14
  <div class="card-content bottom-1">Коллекция структур полезных для переиспользования</div>
15
15
  <a class="dynamic-navigation top-auto link" href="/structures">Посмотреть</a>
16
16
  </div>
17
+ <div class="card">
18
+ <div class="card-title bottom-2">Algorithms</div>
19
+ <div class="card-content bottom-1">Коллекция готовых к использованию алгоритмов</div>
20
+ <a class="dynamic-navigation top-auto link" href="/algorithms">Посмотреть</a>
21
+ </div>
17
22
  </div>
package/docs/routes.json CHANGED
@@ -1 +1 @@
1
- ["pages/404.html","pages/index.html","pages/behaviors.html","pages/structures/hash-table.html","pages/structures.html","pages/navigation.html","pages/navigation/navigation.html","pages/navigation/router.html","pages/behaviors/loading.html","pages/behaviors/dirty.html\n"]
1
+ ["pages/404.html","pages/index.html","pages/behaviors.html","pages/structures/hash-table.html","pages/structures.html","pages/navigation.html","pages/algorithms.html","pages/navigation/navigation.html","pages/navigation/router.html","pages/behaviors/loading.html","pages/behaviors/path.html","pages/behaviors/dirty.html\n"]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "silentium-components",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "dist/silentium-components.js",
@@ -0,0 +1,16 @@
1
+ import { sourceOf, SourceSync } from "silentium";
2
+ import { Path } from "./Path";
3
+ import { expect, test } from "vitest";
4
+
5
+ test("Path.index.test", () => {
6
+ const record = sourceOf({
7
+ name: "Peter",
8
+ surname: "Parker",
9
+ colors: ["blue", "red"],
10
+ type: {
11
+ name: "spider-man",
12
+ },
13
+ });
14
+ const bestColor = new SourceSync(new Path(record, sourceOf("colors.0")));
15
+ expect(bestColor.syncValue()).toBe("blue");
16
+ });
@@ -0,0 +1,15 @@
1
+ import { sourceOf, SourceSync } from "silentium";
2
+ import { Path } from "./Path";
3
+ import { expect, test } from "vitest";
4
+
5
+ test("Path.nested.test", () => {
6
+ const record = sourceOf({
7
+ name: "Peter",
8
+ surname: "Parker",
9
+ type: {
10
+ name: "spider-man",
11
+ },
12
+ });
13
+ const typeName = new SourceSync(new Path(record, sourceOf("type.name")));
14
+ expect(typeName.syncValue()).toBe("spider-man");
15
+ });
@@ -0,0 +1,12 @@
1
+ import { sourceOf, SourceSync } from "silentium";
2
+ import { Path } from "../behaviors/Path";
3
+ import { expect, test } from "vitest";
4
+
5
+ test("Path.test", () => {
6
+ const record = sourceOf({
7
+ name: "Peter",
8
+ surname: "Parker",
9
+ });
10
+ const name = new SourceSync(new Path(record, sourceOf("name")));
11
+ expect(name.syncValue()).toBe("Peter");
12
+ });
@@ -0,0 +1,38 @@
1
+ import {
2
+ give,
3
+ GuestCast,
4
+ GuestType,
5
+ SourceAll,
6
+ SourceObjectType,
7
+ SourceType,
8
+ value,
9
+ } from "silentium";
10
+
11
+ export class Path<T extends Record<string, unknown>, K extends string>
12
+ implements SourceObjectType<T[K]>
13
+ {
14
+ public constructor(
15
+ private baseSource: SourceType<T>,
16
+ private keyType: SourceType<K>,
17
+ ) {}
18
+
19
+ public value(guest: GuestType<T[K]>) {
20
+ const all = new SourceAll<{ base: T; key: K }>(["base", "key"]);
21
+ value(this.baseSource, new GuestCast(guest, all.guestKey("base")));
22
+ value(this.keyType, new GuestCast(guest, all.guestKey("key")));
23
+ all.value(
24
+ new GuestCast(guest, ({ base, key }) => {
25
+ const keyChunks = key.split(".");
26
+ let value: unknown = base;
27
+ keyChunks.forEach((keyChunk) => {
28
+ value = (value as T)[keyChunk];
29
+ });
30
+
31
+ if (value !== undefined && value !== base) {
32
+ give(value as T[K], guest);
33
+ }
34
+ }),
35
+ );
36
+ return this;
37
+ }
38
+ }
@@ -1,3 +1,4 @@
1
1
  export * from "./Dirty";
2
2
  export * from "./Loading";
3
3
  export * from "./Touched";
4
+ export * from "./Path";