open-index/open-npm huggingface dataset:
npm package: @gglib/components
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.0

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - components
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/content
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/content-loaders
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/core
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.1.3

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - core
=======
Part of the [G]glib project

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/ecs
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/ecs-components
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/effects
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.0

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - effects
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/fx-materials
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/fx-post
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/fx-procedural
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/gglib
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/graphics
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/input
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/math
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/noise
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/particles
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/render
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/terrain
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglib/utils
Description: Part of the [G]glib project
Author: Alexander Graefenstein
Latest version: 0.6.2

[![Coverage Status](https://coveralls.io/repos/github/giniedp/glib/badge.svg?branch=master)](https://coveralls.io/github/giniedp/glib?branch=master)
[![Build Status](https://travis-ci.org/giniedp/glib.svg?branch=master)](https://travis-ci.org/giniedp/glib)

[G]glib - [object Object]
=======
A Web GL Framework

To find out more about this project visit [the repository](https://github.com/giniedp/glib) or the [project page](https://glib.ginie.eu)

Licence: MIT
npm package: @gglnx/eslint-config
Description: Shared ESLint configuration
Author: Dennis Morhardt
Latest version: 1.0.3

# @gglnx/eslint-config

This is my personal ESLint shared configuration. It's based on the [`eslint-config-airbnb-base`](https://www.npmjs.com/package/eslint-config-airbnb-base) and [`@typescript-eslint/recommended`](https://typescript-eslint.io/users/configs) rules.

## Installation

Install the configuration and all peer dependencies:

```bash
npm install --save-dev @gglnx/eslint-config
```

## Usage

Create an `.eslintrc` file in your project root:

```json
{
  "root": true,
  "extends": [
    "@gglnx/eslint-config"
  ]
}
```

## Deviations

* `max-len`: Allowing up to 120 chars in a line
* `lines-between-class-members`: Don't require an empty line between single line class members
* `no-param-reassign`: Allowing parameters starting with `$` to be reassigned (use this only referenced parameters like DOM elements)
* `import/extensions`: Forbid file extensions for importing of JavaScript files in Typescript files
* `import/no-extraneous-dependencies`: Don't report `devDependencies` in config files (`*.config.js`)
* `no-restricted-syntax`: Allows the usages of `for of` loops
* `class-methods-use-this`: Remove requirement for using a `this` in class methods

## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

## License

Distributed under the [MIT License](https://opensource.org/license/mit). See `LICENSE` for more information.
npm package: @gglnx/stylelint-config
Description: Shared Stylelint configuration
Author: Dennis Morhardt
Latest version: 3.0.1

# @gglnx/stylelint-config

This is my personal Stylelint shared configuration. It's based on the [`stylelint-config-sass-guidelines`](https://github.com/bjankord/stylelint-config-sass-guidelines).

## Installation

Install the configuration and all peer dependencies:

```bash
npm install --save-dev @gglnx/stylelint-config
```

## Usage

Create an `.stylelintrc` file in your project root:

```json
{
  "extends": "@gglnx/stylelint-config"
}
```

## Deviations

* `csstools/use-logical`: Use logical props (except for float)
* `selector-max-compound-selectors`: Limited to 4 compound selectors
* `selector-class-pattern`: Allows only the BEM naming scheme (`.block__element--modifier`) and helper and theming classes (`.has-*`, `.u-*`, `.js-*`, `.is-*`, `.t-*`)
* `max-nesting-depth`: Limits to one nesting level except for pseudo-classes, at-rules and theming classes (`.t-*`)
* `property-no-unknown`: Adds allowance for `:export` property (CSS modules)
* `order/properties-alphabetical-order`: Enforce alphabetical order for all properties
* `order/order`: Custom order inside selectors:
  1. SCSS variables
  2. `@extend` at-rules
  3. Custom properties
  4. Declarations
  5. Nested rules beginning with `&`
  6. Nested rules for pseudo-classes (like `:hover`)
  7. Nested rules for pseudo-elements (`::before/::after`)
  8. Other nested rules
  9. At-rules (like @media, @include or @container)

## Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

## License

Distributed under the [MIT License](https://opensource.org/license/mit). See `LICENSE` for more information.
npm package: @gglnx/webpack-config
Description: Opinionated Webpack configuration builder
Author: gglnx
Latest version: 0.6.0

# @gglnx/webpack-config

This is my personal opinionated Webpack configuration builder.

## Installation

Install the configuration and all peer dependencies:

```bash
npm install --save-dev webpack-cli @gglnx/webpack-config
```

## Usage

Create an `webpack.config.mjs` file in your project root:

```js
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import * as webpack from '@gglnx/webpack-config';

const rootDirectory = dirname(fileURLToPath(import.meta.url));
const sourcePath = resolve(rootDirectory, 'src');
const outputPath = resolve(rootDirectory, 'build');
const isDevelopment = process.env.NODE_ENV === 'development';
const mode = isDevelopment ? 'development' : 'production';

const config = await (new webpack.Builder(sourcePath, outputPath, mode))
  .add(webpack.entryPoint('main', [
    'stylesheets/main.scss',
    'javascripts/main.ts',
  ]))
  .add(webpack.cleanOutput())
  .add(webpack.scss())
  .add(webpack.babel())
  .add(webpack.sourceMaps())
  .add(webpack.manifest())
  .add(webpack.analyzer())
  .add(webpack.copy('images/**'))
  .add(webpack.hashedOutput())
  .build();

export default config;
```

## Contribution Policy

This project is open to code contributions for bug fixes only. Features carry a long-term maintenance burden so they will not be accepted at this time. Please submit an issue if you have a feature you'd like to request.

Please note that project is provided AS IN. Issues requesting support or help will be closed and locked. You can [hire me](https://dennismorhardt.de/) for any help with your Webpack configuration.

## License

Distributed under the [MIT License](https://opensource.org/license/mit). See `LICENSE` for more information.
npm package: @ggns/use-before-leave
Description: React hook to leave mouse from browser
Author: Kim Tae Heon
Latest version: 1.0.0

```javascript
* usage
const useBeforeLeave = onBefore => {
  if (typeof onBefore !== "function") {
    return;
  }
  const handle = event => {
    const { clientY } = event; // event : MouseEvent의 객체
    if (clientY <= 0) { // clientY(마우스의 좌표값)가 0 이하
      onBefore();
    }
  };
  useEffect(() => { 
    document.addEventListener("mouseleave", handle); // 컴포넌트가 mount 되면, mouseleave 이벤트 생성
    return () => document.removeEventListener("mouseleave", handle); // 컴포넌트가 unmount 되면, mouseleave 이벤트 제거
  }, []); // 이벤트가 document에 추가 되는 것을 막음(한번만 실행)
};

const App = () => {
  const dontLeave = () => console.log("Pls dont leave");
  useBeforeLeave(dontLeave);
  return (
    <div className="App">
      <h1>Hello</h1>
    </div>
  );
};
```
npm package: @ggns/use-click
Description: React hook to clickEvent
Author: Kim Tae Heon
Latest version: 1.0.0

```javascript
* usage
const useClick = onClick => {
  const element = useRef();
  useEffect(() => {
    if (element.current) {
      element.current.addEventListener("click", onClick); // element.current에 args 함수 실행하는 이벤트 지정
    }
  });
  return element;
};

const App = () => {
  const sayHello = () => console.log("sayHello");
  const h1Element = useClick(sayHello);
  return (
    <div className="App">
      <h1 ref={h1Element}>Hi</h1>
    </div>
  );
};
```
npm package: @ggns/use-confirm
Description: React hook to confirm event from user
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const useConfirm = (message = "", onConfirm, onCancel) => { // message의 기본값은 "" 
  if (!onConfirm || typeof onConfirm !== "function") { 
    return; // 매개변수 onConfirm가 없거나 onConfirm이 함수가 아나라면 return 실행
  }
  if (onCancel && typeof onCancel !== "function") { // onCancle은 필수요소는 아님
    return;
  }
  const confirmAction = () => { // confirm창의 응답에 따른 이벤트 실행 함수
    if (confirm(message)) { // 확인을 눌렀다면
      onConfirm();
    } else { // 취소를 눌렀다면
      onCancel();
    }
  };
  return confirmAction; 
};

const App = () => {
    
  const deleteWorld = () => console.log("delete"); // 확인 눌렀을 때 실행할 함수
  const abortWorld = () => console.log("Aborted"); // 취소 눌렀을 때 실행할 함수

  const conformDelete = useConfirm("r u sure?", deleteWorld, abortWorld);

  return (
    <div className="App">
      <h1>Hello</h1>
      <button onClick={conformDelete} >Delete the world</button>
    </div>
  );
};
```
npm package: @ggns/use-fade-in
Description: React hook to fade in element
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const usefadeIn = () => {
  const element = useRef();
  useEffect(() => {
    // element 안으로 들어가기 위해서 useEffect 사용
    if (element.current) {
      const { current } = element;
      current.style.transition = `opacity 1s`;
      current.style.opacity = 1;
    }
  }, []);
  return { ref: element, style: { opacity: 0 } }; 
};

const App = () => {
  const fadeInH1 = usefadeIn();
  return (
    <div className="App">
      <h1 {...fadeInH1}> Hello </h1>
    </div>
  );
};
```
npm package: @ggns/use-full-screen
Description: React hook to convert screen fully
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage

const useFullscreen = callback => {
  const element = useRef();
  const runCb = isFull => {
    if (callback && typeof callback === "function") {
      callback(isFull);
    }
  };
  const triggerFull = () => { // full화면으로 변환하는 함수
    if (element.current) {
      if (element.current.requestFullscreen) { // chrome, safari
        element.current.requestFullscreen();
      } else if (element.current.mozRequestFullScreen) { // firefox
        element.current.mozRequestFullScreen();
      } else if (element.current.webkitRequestFullscreen) { // opera
        element.current.webkitRequestFullscreen();
      } else if (element.current.msRequestFullscreen) { // microsoft
        element.current.msRequestFullscreen();
      }
      runCb(true);
    }
  };
  const exitFull = () => { // full화면을 해제하는 함수
    document.exitFullscreen();
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) {
      document.webkitExitFullscreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
    runCb(false);
  };
  return { element, triggerFull, exitFull };
};

const App = () => {
  const onFullS = isFull => { // callback 함수
    console.log(isFull ? "Full" : "Small");
  };
  const { element, triggerFull, exitFull } = useFullscreen(onFullS);
  return (
    <div className="App">
      <h1>Hello</h1>
      <div ref={element}>
        <img src="https://hjban-dev.github.io/public/logo.png"/>
        <button onClick={exitFull}>exitFull</button>
        <button onClick={triggerFull}>triggerFull</button>
      </div>
    </div>
  );
};
```
npm package: @ggns/use-input
Description: React hook to update input value
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const useInput = (initialValue, validator) => { // validator 추가
  const [value, setValue] = useState(initialValue);
  const onChange = event => {
    const {
      target: { value }
    } = event;
    let willUpdate = true;
    if (typeof validator === "function") {
      willUpdate = validator(value); // validator 실행
    }
    if (willUpdate) {
      setValue(value);
    }
  };

  return { value, onChange };
};

const App = () => {
  const maxLen = value => value.length < 10; // maxLen 함수 선언
  const name = useInput("hj", maxLen); // maxLen을 args로 전달
  return (
    <div className="App">
      <h1>Hello</h1>
      <input placeholder="name" {...name} />
    </div>
  );
};
```
npm package: @ggns/use-network
Description: React hook to detect navigator is online or offline
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const useNetwork = onChange => {
  const [status, setStatus] = useState(navigator.onLine); // true 또는 false 값
  const handleChange = () => {
    if (typeof onChange === "function") {
      onChange(navigator.onLine);
    }
    setStatus(navigator.onLine);
  };
  useEffect(() => {
    window.addEventListener("online", handleChange);
    window.addEventListener("offline", handleChange);
    () => { //componentWillUnMount 일 때 remove 실행
      window.removeEventListener("online", handleChange);
      window.removeEventListener("offline", handleChange);
    };
  }, []);
  return status;
};

const App = () => {
  const hanldeNetworkChange = online => { // 실행하는 change 함수
    console.log(online ? "It's Online state" : "It's Offline state");
  };
  const online = useNetwork(hanldeNetworkChange);
  return (
    <div className="App">
      <h1>{online ? "Online" : "Offline"} </h1>
      <p>Welcome</p>
    </div>
  );
};
```
npm package: @ggns/use-scroll
Description: React Hook to occur scroll event
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const useScroll = () => {
  const [state, setState] = useState({
    x: 0, // x와 y의 초기값을 0으로 지정
    y: 0
  });
  const onScroll = () => {
    setState({ x: window.scrollX, y: window.scrollY });
  };
  useEffect(() => {
    window.addEventListener("scroll", onScroll); // scorll할 때 onScroll 이벤트 핸들러 지정
    return () => window.removeEventListener("scroll", onScroll); // clean up
  }, []);
  return state;
};

const App = () => {
  const { y } = useScroll();
  return (
    <div className="App" style={{ height: "200vh" }}>
      <h1 style={{ position: "fixed", color: y > 100 ? "red" : "blue" }}>
        Hello
      </h1>
    </div>
  );
};
```
npm package: @ggns/use-tabs
Description: React update content to click button
Author: Kim Tae Heon
Latest version: 1.0.1

```javascript
* usage
const content = [
  {
    tab: "Section 1",
    content: "This is the content of the Section 1"
  },
  {
    tab: "Section 2",
    content: "This is the content of the Section 2"
  }
];

const useTabs = (initialTab, allTabs) => {
  if (!allTabs || !Array.isArray(allTabs)) { 
    return; // useTabs를 사용할 때 두번째 매개변수를 주지 않거나, 두번째 매개변수가 매열이 아니라면 return(에러 페이지 뜨지 않게)
  }
  const [currentIndex, setCurrentIndex] = useState(initialTab);
  return {
    currentItem: allTabs[currentIndex],
    changeItem: setCurrentIndex
  };
};

const App = () => {
  const { currentItem, changeItem } = useTabs(0, content);
  return (
    <div className="App">
      {content.map((section, index) => (
        <button onClick={() => changeItem(index)}>{section.tab}</button>
      ))}
      <div>{currentItem.content}</div>
    </div>
  );
};

export default App;
```
npm package: @ggns/use-title
Description: React Hook to update your document's title
Author: Kim Tae Heon
Latest version: 1.0.2

````javascript
* usage
const useTitle = iniitialTitle => {
  const [title, setTitle] = useState(iniitialTitle);
  const updateTitle = () => {
    const htmlTitle = document.querySelector("title");
    htmlTitle.innerText = title;
  };
  useEffect(updateTitle, [title]);
  return setTitle;
};

const App = () => {
  const titleUpdater = useTitle("My React App...");
  setTimeout(() => { // 3초후 titleUpdater 실행
    titleUpdater("home");
  }, 3000);
  return (
    <div className="App">
      <div>Hi</div>
    </div>
  );
};

export default App;
````
npm package: @ggolfz/tcgen
Description: ## CLI Usage
Author: GGolfz
Latest version: 1.3.0

# Test case Generator

## CLI Usage

### Install

`npm install -g @ggolfz/tcgen`

### Usage without Installation

`npx @ggolfz/tcgen generate [template]`

### Usage

`tcgen [template]`

### Parameter

`-n, --num [number]`: Number of Testcase (Optional: Default is 1)

`-s, --source [source]`: Source of Template File (Optional)

`-e, --extension [extension]`: File Extension (Optional: Default is 'in')

### Template

Input Lines split by `\n` and each inputs split by `space`

**Input Format** : `<type;condition1;condition2;...>`

**String Input Format** : `<string;minLength;maxLength>` [minLength and maxLength are optional]

**Integer Input Format** : `<integer;minValue;maxValue>` [minValue and maxValue are optional]

**Floating Input Format** : `<float;minValue;maxValue;digits>` [minValue, maxValue, digits are optional]

**Regex Input Format** : `<regex;value>`
npm package: @ggondim-org/vue-jsonschema-form
Description: Input Form generator based on JSON Schema
Author: Roman Sabirov roma219@yandex.ru
Latest version: 0.1.15

[![Build Status](https://travis-ci.com/roma219/vue-jsonschema-form.svg?branch=master)](https://travis-ci.com/roma219/vue-jsonschema-form) [![Coverage Status](https://coveralls.io/repos/github/roma219/vue-jsonschema-form/badge.svg?branch=master&service=github&kill_cache=1)](https://coveralls.io/github/roma219/vue-jsonschema-form?branch=master&service=github&kill_cache=1) [![dependencies Status](https://david-dm.org/roma219/vue-jsonschema-form/status.svg)](https://david-dm.org/roma219/vue-jsonschema-form) [![Known Vulnerabilities](https://snyk.io/test/github/roma219/vue-jsonschema-form/badge.svg)](https://snyk.io/test/github/roma219/vue-jsonschema-form) [![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/roma219/vue-jsonschema-form.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/roma219/vue-jsonschema-form/context:javascript) ![last commit](https://badgen.net/github/last-commit/roma219/vue-jsonschema-form)
&nbsp;

![minified size](https://badgen.net/bundlephobia/min/@roma219/vue-jsonschema-form)
![](https://badgen.net/bundlephobia/minzip/@roma219/vue-jsonschema-form)

# vue-jsonschema-form
JSON Schema based form generator built with Vue.js. Currently Work in Progress.

### Full Guide and Examples
https://roma219.github.io/vue-jsonschema-form/guide/

[![Demo on Codesandbox](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/vue-jsonschema-form-basic-example-ulwwy?fontsize=14&hidenavigation=1&module=%2Fsrc%2FApp.vue&theme=dark)

### Installation
```
npm install @roma219/vue-jsonschema-form
```

### Usage
```
<JsonSchema :schema="schema" v-model="value"/>

schema = {
    type: 'object',
    properties: {
      aaa: { type: 'string', minLength: 1 },
      bbb: { type: 'boolean' },
      ccc: { type: 'string', enum: ['1', '2', '3'] },
      ddd: {
        type: 'object',
        title: '',
        properties: {
          a1: { type: 'string', minLength: 1, maxLength: 5 },
          b2: { type: 'boolean', default: true },
          ddd: {
            type: 'object',
            properties: {
              a1: { type: 'string', default: 'aaa' },
              b2: { type: 'boolean' }
            }
          }
        }
      }
    }
}
```
npm package: @ggondim-org/vue2-daterange-picker
Description: Vue2 date range picker based on https://github.com/dangrossman/bootstrap-daterangepicker (no jQuery)
Author: Nikola Kostadinov
Latest version: 0.5.1

# vue2-daterange-picker

> Vue2 date range picker base on https://github.com/dangrossman/bootstrap-daterangepicker (no jQuery)

The component is in its early stages so if there is something wrong - write an issue or create a pull request.

## Demo and Usage
You can see a demo here:
https://innologica.github.io/vue2-daterange-picker/

## Installation

``` bash
# install via npm
npm i vue2-daterange-picker --save
```

## TODO

- [x] documentation
- [x] tests
- [x] disabled dates
- [ ] export single components


### Run local demo
```
npm run docs:dev
```
npm package: @ggondim/ctix
Description: Automatic create index.ts file
Author: ByungJoon Lee
Latest version: 0.5.4

CTIX - Next generation Create TypeScript Index file
----
[![Download Status](https://img.shields.io/npm/dw/ctix.svg)](https://npmcharts.com/compare/ctix?minimal=true) [![Github Star](https://img.shields.io/github/stars/imjuni/ctix.svg?style=popout)](https://github.com/imjuni/ctix) [![Github Issues](https://img.shields.io/github/issues-raw/imjuni/ctix.svg)](https://github.com/imjuni/ctix/issues) [![NPM version](https://img.shields.io/npm/v/ctix.svg)](https://www.npmjs.com/package/ctix) [![License](https://img.shields.io/npm/l/ctix.svg)](https://github.com/imjuni/ctix/blob/master/LICENSE) [![cti](https://circleci.com/gh/imjuni/ctix.svg?style=shield)](https://app.circleci.com/pipelines/github/imjuni/ctix?branch=master)

# 설치
```
npm install ctix --save-dev
```

# 소개
TypeScript 개발을 할 때 다른 프로젝트에서 사용할 패키지를 개발하기도 합니다. 패키지는 TypeScript 컴파일러를 사용해서 빌드하고 배포하지만 좀 더 성능향상을 하기 위해 webpack과 babel을 사용해서 좀 더 최적화를 하기도 합니다. webpack을 통해서 빌드할 때나 패키지로 배포할 때 다른 프로젝트에서 사용할 수 있는 진입점이 필요합니다. 이러한 진입점은 일반적으로 index.ts 파일을 생성해서 제공하며 외부에 노출할 파일을 직접 작성합니다.

이런 절차는 번거롭습니다. 버전업을 통해서 파일이 늘거나 줄거나 또는 클래스, 함수 등이 추가 되고 변경될 때 다시 작성해야 합니다. ctix는 이 때 유용한 도구입니다. .npmignore, .ctiignore를 사용해서 원치 않는 파일을 제외하고 tsconfig.json 파일을 전달해주기만 하면 단일 파일 또는 디렉토리 별로 index.ts 파일을 생성해서 자동으로 노출 파일을 생성합니다. 아래 예를 보겠습니다.

예를들어, 아래와 같은 디렉터리가 있다고 가정합시다.

```
  src/
    app.ts
    component/
      Nav.ts
      Button.ts
```

ctix create 모드는 아래와 같이 export index.ts 파일을 생성합니다.

```
  src/
    app.ts
    > index.ts
      // created from 'create-ts-index'
      export * from './component';
      export * from './app';
    component/
      Nav.ts
      Button.ts
      > index.ts
        // created from 'create-ts-index'
        export * from './Nav';
        export * from './Button';
```

만약 ctix single 모드는 아래와 단일 파일 하나를 생성합니다. webpack 진입점으로 사용하기 좋습니다.

```
  src/
    app.ts
    component/
      Na
      v.ts
      Button.ts
  > entrypoint.ts
    // created from 'create-ts-index'
    export * from './src/app.ts'
    export * from './src/component/Nav.ts'
    export * from './src/component/Button.ts'
```

# Why ctix?
1. tsconfig.json 파일만 전달하면 나머지 모든 과정은 자동입니다.
    * tsconfig.json에 작성된 include, exclude 등을 읽어서 index.ts 파일 작성이 필요한 모든 파일을 탐색합니다.
1. default index를 지원합니다.
    * compiler API를 사용해서 구문분석을 하여 default index를 찾습니다. 
    * default index는 파일이름으로 alias 됩니다.
    * my_default_index.test.ts 파일은 `export { default as myDefaultIndexTest } from './my_default_index.test'` 으로 작성됩니다.
    * default export와 함께 export 구문도 적용됩니다.
1. create, single, clean, init를 지원해서 사용하기 편리합니다.

# Usage
1. craete 모드
    * `ctix create ./tsconfig.json`
1. single 모드
    * `ctix single ./tsconfig.json`
1. clean 모드 
    * `ctix clean ./tsconfig.json`
1. init 모드
    * `ctix init ./tsconfig.json`

# Option

# Language
* [English](https://github.com/imjuni/create-ts-index/blob/master/README.md)
* [Korean](https://github.com/imjuni/create-ts-index/blob/master/README.ko.md)
npm package: @ggoodman/fsm
Description: Fully typed finite state machine for JavaScript and TypeScript
Author: Geoff Goodman
Latest version: 0.1.1

# @ggoodman/fsm

> Fully typed finite state machine for JavaScript and TypeScript

## Installation

```bash
npm install @ggoodman/fsm
```

## Example

The example below demonstrates a traffic light that cycles eternally on a timer.

> **Note**: Instead of defining the 'tick' event, we could have called `ctx.transitionTo('red' | 'green' | 'yellow')` directly.

```typescript
import { DefineEvent, DefineState, Service } from '@ggoodman/fsm';

type Red = DefineState<'red'>;
type Yellow = DefineState<'yellow'>;
type Green = DefineState<'green'>;

type Tick = DefineEvent<'tick'>;

const service = Service.define<Red | Yellow | Green, Tick>(
  (s) =>
    s
      .defineState('red', (red) =>
        red
          .onEnter((ctx) => ctx.runAfter(30 * 1000, (ctx) => ctx.send('tick')))
          .onEvent('tick', (ctx) => ctx.transitionTo('green'))
      )
      .defineState('green', (red) =>
        red
          .onEnter((ctx) => ctx.runAfter(60 * 1000, (ctx) => ctx.send('tick')))
          .onEvent('tick', (ctx) => ctx.transitionTo('yellow'))
      )
      .defineState('yellow', (red) =>
        red
          .onEnter((ctx) => ctx.runAfter(10 * 1000, (ctx) => ctx.send('tick')))
          .onEvent('tick', (ctx) => ctx.transitionTo('red'))
      ),
  'red'
);

service.onStateChange((state) => {
  console.log('State changed to %s', state.id);
});
service.start();
// State changed to red
// State changed to green
// State changed to yellow
// ...
```
npm package: @ggoodman/ts-lab
Description: An opinionated wrapper over @hapi/lab with typescript and disposables support
Author: Geoff Goodman
Latest version: 1.0.3

# Lab + TypeScript = 😍

> Take the [`@hapi/lab`](https://github.com/hapijs/lab) you know and love and add a sprinkling of built-in TypeScript support and out comes `ts-lab`, an opinionated spin on vanilla lab.

See [@hapi/lab](https://hapi.dev/family/lab/) on the official Hapi developer site for more information on Lab itself.

## Differences

`ts-lab` is not a fork of [`@hapi/lab`](https://github.com/hapijs/lab) but instead wraps it. At the time of writing, the justification for this decision isn't entirely clear but here we are. This repo exposes a binary `ts-lab` that forwards arguments to the `lab` binary exposed by [`@hapi/lab`](https://github.com/hapijs/lab) with the addition of arguments to add TypeScript support. The module also exposes an API that wraps [`@hapi/lab`'s API](https://hapi.dev/family/lab/?v=21.0.0#usage). The differences are outlined below:

1. Out-of-the-box support for tests authored in TypeScript.
2. Exposes an instance of [`@hapi/code`](https://github.com/hapijs/code)'s assertion library as the top-level `expect` export.
3. Changes the optional `flags` arguments passed into test functions such that:
   1. It no longer exports a mutable `.onCleanup` property.
   2. Exports a `.disposeOf(disposable: { dispose(): void }): void` function. This can be used to register multiple disposables for disposal during the test's clean-up phase.

## License

See [LICENSE.md](./LICENCE.md).
npm package: @ggrossetie/db-migrate-mongodb
Description: mongodb driver for db-migrate
Latest version: 2.0.0

[![CI](https://github.com/ggrossetie/db-migrate-mongodb/actions/workflows/ci.yml/badge.svg)](https://github.com/ggrossetie/db-migrate-mongodb/actions/workflows/ci.yml)

# @ggrossetie/db-migrate-mongodb

MongoDB driver for [db-migrate](https://github.com/db-migrate/node-db-migrate).

This is a fork of [db-migrate/mongodb](https://github.com/db-migrate/mongodb), rewritten for modern Node.js.

## Differences with upstream

|                | [db-migrate/mongodb](https://github.com/db-migrate/mongodb) v1.5.0 | @ggrossetie/db-migrate-mongodb v2.x |
|----------------|--------------------------------------------------------------------|-------------------------------------|
| Module system  | CommonJS                                                           | ESM (with CJS bundle)               |
| MongoDB driver | ^3.3.3 (direct dependency)                                         | \>= 5.1.0 < 8 (peer dependency)     |
| Promises       | [bluebird](https://github.com/petkaantonov/bluebird)               | Native                              |
| Node.js        | No requirement                                                     | \>= 22                              |
| Tested against | MongoDB 2.x/3.x                                                    | MongoDB 6.0, 7.0, 8.0               |

### Key changes

- **ESM first** — the source is an ES module. A CJS bundle (`bundle.cjs`) is also shipped for compatibility via the `exports` field in `package.json`.
- **`mongodb` is a peer dependency** — you install the MongoDB driver version you need, instead of being locked to a specific major version.
- **No bluebird** — all methods return native promises (and still accept an optional callback for backward compatibility with db-migrate).
- **Removed the internal `_run()` abstraction** — methods call the MongoDB driver API directly.

## Installation

```bash
npm install @ggrossetie/db-migrate-mongodb mongodb
```

## Usage

Refer to the [db-migrate documentation](https://db-migrate.readthedocs.io/) for general usage.

Configure your `database.json`:

```json
{
  "defaultEnv": "dev",
  "dev": {
    "driver": "@ggrossetie/db-migrate-mongodb",
    "database": "my_database",
    "url": "mongodb://localhost:27017/my_database"
  }
}
```

## License

MIT