svelte/store#Writable TypeScript Examples

The following examples show how to use svelte/store#Writable. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: utils.ts    From ExpressiveAnimator with Apache License 2.0 7 votes vote down vote up
export function createGenIdStore(): AsyncGenIdStore {
    const {subscribe, set, update} = writable<number>(0);

    return {
        subscribe,
        set,
        update,
        invalidate(): void {
            update(plusOne)
        }
    }
}
Example #2
Source File: utils.ts    From musetree with MIT License 7 votes vote down vote up
export function unwrapStore<T, INNER extends Readable<T | null>>(store_2: Readable<INNER | null>, equality: (a: T, b: T) => boolean = (a, b) => a === b): Readable<T | null> {
  let value: T | null = null;
  const output: Writable<T | null> = writable(null);
  let unsubscribe: () => void = () => { };
  store_2.subscribe((store: INNER | null) => {
    unsubscribe();
    if (store !== null) {
      unsubscribe = store.subscribe((state: T | null) => {
        if (
          (value === null && state !== null) ||
          (value !== null && state === null) ||
          (value !== null && state !== null && !equality(value, state))
        ) {
          value = state;
          output.set(state);
        }
      })
    } else {
      unsubscribe = () => { };
      value = null;
      output.set(null);
    }
  });
  return output;
}
Example #3
Source File: chat-actions.ts    From HyperChat with GNU Affero General Public License v3.0 6 votes vote down vote up
export function useBanHammer(
  message: Ytc.ParsedMessage,
  action: ChatUserActions,
  port: Chat.Port | null
): void {
  if (action === ChatUserActions.BLOCK) {
    port?.postMessage({
      type: 'executeChatAction',
      message,
      action
    });
  } else if (action === ChatUserActions.REPORT_USER) {
    const store = writable(null as null | ChatReportUserOptions);
    reportDialog.set({
      callback: (selection) => {
        port?.postMessage({
          type: 'executeChatAction',
          message,
          action,
          reportOption: selection
        });
      },
      optionStore: store
    });
  }
}
Example #4
Source File: Canvas.ts    From ExpressiveAnimator with Apache License 2.0 6 votes vote down vote up
CanvasEngineState = {
    showGuides: writable<boolean>(true),
    lockGuides: writable<boolean>(false),
    showRuler: writable<boolean>(true),
    showGrid: writable<boolean>(false),
    showGridToBack: writable<boolean>(true),
    highQuality: writable<boolean>(true),
    snapping: writable({
        // Global flag
        enabled: false,
        // Individual flags
        grid: true,
        guides: true,
        pixel: true,
        document: true,
        objects: true,
        points: true,
    }),
}
Example #5
Source File: api.ts    From obsidian-todoist-plugin with MIT License 6 votes vote down vote up
constructor(token: string) {
    this.token = token;
    this.metadata = writable({
      projects: new ExtendedMap<ProjectID, IProjectRaw>(),
      sections: new ExtendedMap<SectionID, ISectionRaw>(),
      labels: new ExtendedMap<LabelID, string>(),
    });

    this.metadata.subscribe((value) => (this.metadataInstance = value));
  }
Example #6
Source File: stores.ts    From obsidian-calendar-plugin with MIT License 6 votes vote down vote up
function createDailyNotesStore() {
  let hasError = false;
  const store = writable<Record<string, TFile>>(null);
  return {
    reindex: () => {
      try {
        const dailyNotes = getAllDailyNotes();
        store.set(dailyNotes);
        hasError = false;
      } catch (err) {
        if (!hasError) {
          // Avoid error being shown multiple times
          console.log("[Calendar] Failed to find daily notes folder", err);
        }
        store.set({});
        hasError = true;
      }
    },
    ...store,
  };
}
Example #7
Source File: placement.ts    From musetree with MIT License 6 votes vote down vote up
export function derivePlacementStore(parentStore: Readable<Pick<NodeState, "children">>): Readable<Array<[number, number]>> {
  const nested: Readable<Readable<Array<[number, number]>>> = derived(parentStore, ({ children }: Pick<NodeState, "children">) => {
    const childStores: BranchStore[] = Object.values(children);
    if (childStores.length === 0) return writable([]);
    const leafStores: Array<Readable<[number, number]>> = childStores.map(store =>
      derived<[BranchStore, Readable<number>], [number, number]>([store, store.numberOfLeavesStore], ([state, numberOfLeaves]: [BranchState, number]) => [state.path[state.path.length - 1], numberOfLeaves])
    );
    const xPositionsStore: Readable<Array<[number, number]>> = derived(leafStores as [Readable<[number, number]>, ...Readable<[number, number]>[]], (leafState: Array<[number, number]>) => {
      let x: number = 0;
      const output: Array<[number, number]> = [];
      leafState.forEach(([idx, leaves]) => {
        output.push([idx, x + leaves / 2]);
        x += leaves;
      })
      return output;
    });
    return xPositionsStore;
  });
  return unwrapStoreNonNull<Array<[number, number]>, Readable<Array<[number, number]>>>(nested, [], placementEquality);
}
Example #8
Source File: expected.tsx    From language-tools with MIT License 6 votes vote down vote up
function render() {

  
  const count = writable(0)/*Ωignore_startΩ*/;let $count = __sveltets_1_store_get(count);/*Ωignore_endΩ*/;
  let myvar = 42 // to show that this is different from ++ or --
  const handler1 = () => count.set( $count + myvar)
  const handler2 = () => count.set( $count - myvar)
  const handler3 = () => count.set( $count * myvar)
  const handler4 = () => count.set( $count / myvar)
  const handler5 = () => count.set( $count ** myvar)
  const handler6 = () => count.set( $count % myvar)
  const handler7 = () => count.set( $count << myvar)
  const handler8 = () => count.set( $count >> myvar)
  const handler9 = () => count.set( $count >>> myvar)
  const handler10 = () => count.set( $count & myvar)
  const handler11 = () => count.set( $count ^ myvar)
  const handler12 = () => count.set( $count | myvar)
;
() => (<>

<button onclick={() => count.set( $count + myvar)}>add</button>
<button onclick={() => count.set( $count - myvar)}>subtract</button>
<button onclick={() => count.set( $count * myvar)}>multiply</button>
<button onclick={() => count.set( $count / myvar)}>divide</button>
<button onclick={() => count.set( $count ** myvar)}>exponent</button>
<button onclick={() => count.set( $count % myvar)}>mod</button>
<button onclick={() => count.set( $count << myvar)}>leftshift</button>
<button onclick={() => count.set( $count >> myvar)}>rightshift</button>
<button onclick={() => count.set( $count >>> myvar)}>unsigned rightshift</button>
<button onclick={() => count.set( $count & myvar)}>AND</button>
<button onclick={() => count.set( $count ^ myvar)}>XOR</button>
<button onclick={() => count.set( $count | myvar)}>OR</button></>);
return { props: {}, slots: {}, getters: {}, events: {} }}
Example #9
Source File: broker.ts    From musetree with MIT License 6 votes vote down vote up
async function requestInternal(config: Config, store: NodeStore, prevEncoding: MusenetEncoding, prevActiveNotesAtEnd: ProcessedActiveNotes, prevSectionStart: number, prevSectionEnd: number) {
  const truncatedEncoding = prevEncoding.slice(-config.requestLength);

  const data = {
    ...config,
    encoding: encodingToString(truncatedEncoding),
    audioFormat: "mp3"
  };

  type ResponseData = {
    completions: Completion[]
  };

  store.updatePendingLoad(it => it + 4);

  let response: Completion[] | null = null;
  while (response === null) {
    response = await axios({
      method: "POST",
      url: "https://musenet.openai.com/sample",
      data
    })
      .then((res: AxiosResponse<ResponseData>) => res.data.completions)
      .catch(() => []); // Temporary change to stop the retry logic see issue #88
  }
  const promises = response.map((completion: Completion) => parseCompletion(completion, truncatedEncoding, prevActiveNotesAtEnd, prevSectionStart, prevSectionEnd));
  return Promise.all(promises)
    .then((sections: Section[]) => sections.map((section: Section) => createSectionStore(section)))
    .then((sectionStores: Writable<SectionState>[]) =>
      sectionStores.map((sectionStore: Writable<SectionState>) => store.addChild(sectionStore)))
    .finally(() => store.updatePendingLoad(it => it - 4));
}
Example #10
Source File: storage.ts    From HyperChat with GNU Affero General Public License v3.0 5 votes vote down vote up
refreshScroll = writable(false)
Example #11
Source File: store.ts    From candy-machine-v2 with MIT License 5 votes vote down vote up
candyMachineState = writable<CandyMachineAccount>()
Example #12
Source File: global.ts    From svelte-router with MIT License 5 votes vote down vote up
writableRoute = writable<Route>({
  path: '',
  params: {},
  matched: [],
  search: new URLSearchParams(),
  hash: ''
})
Example #13
Source File: App.ts    From ExpressiveAnimator with Apache License 2.0 5 votes vote down vote up
IsFillSelected = writable<boolean>(true)
Example #14
Source File: stores.ts    From obsidian-rss with GNU General Public License v3.0 5 votes vote down vote up
configuredFeedsStore = writable<Array<RssFeed>>([])
Example #15
Source File: stores.ts    From obsidian-calendar-plugin with MIT License 5 votes vote down vote up
settings = writable<ISettings>(defaultSettings)
Example #16
Source File: formReferences.ts    From svelte-use-form with MIT License 5 votes vote down vote up
formReferences = writable<FormReference[]>([])
Example #17
Source File: audioPlayer.ts    From musetree with MIT License 5 votes vote down vote up
audioStatusStoreInternal: Writable<AudioStatus> = writable({ type: "off" })
Example #18
Source File: tweened.ts    From svelte-site-jp with MIT License 5 votes vote down vote up
export function tweened<T>(value?: T, defaults: Options<T> = {}): Tweened<T> {
	const store = writable(value);

	let task: Task;
	let target_value = value;

	function set(new_value: T, opts?: Options<T>) {
		if (value == null) {
			store.set(value = new_value);
			return Promise.resolve();
		}

		target_value = new_value;

		let previous_task = task;
		let started = false;

		let {
			delay = 0,
			duration = 400,
			easing = linear,
			interpolate = get_interpolator
		} = assign(assign({}, defaults), opts);

		if (duration === 0) {
			if (previous_task) {
				previous_task.abort();
				previous_task = null;
			}

			store.set(value = target_value);
			return Promise.resolve();
		}

		const start = now() + delay;
		let fn;

		task = loop(now => {
			if (now < start) return true;

			if (!started) {
				fn = interpolate(value, new_value);
				if (typeof duration === 'function') duration = duration(value, new_value);
				started = true;
			}

			if (previous_task) {
				previous_task.abort();
				previous_task = null;
			}

			const elapsed = now - start;

			if (elapsed > duration) {
				store.set(value = new_value);
				return false;
			}

			// @ts-ignore
			store.set(value = fn(easing(elapsed / duration)));
			return true;
		});

		return task.promise;
	}

	return {
		set,
		update: (fn, opts?: Options<T>) => set(fn(target_value, value), opts),
		subscribe: store.subscribe
	};
}
Example #19
Source File: expected.tsx    From language-tools with MIT License 5 votes vote down vote up
function render() {

	
	const foo = writable(1)/*Ωignore_startΩ*/;let $foo = __sveltets_1_store_get(foo);/*Ωignore_endΩ*/;
	type Foo = typeof $foo;
;
() => (<></>);
return { props: {}, slots: {}, getters: {}, events: {} }}
Example #20
Source File: storage.ts    From HyperChat with GNU Affero General Public License v3.0 5 votes vote down vote up
reportDialog = writable(null as null | {
  callback: (selection: ChatReportUserOptions) => void;
  optionStore: Writable<null | ChatReportUserOptions>;
})