open-index/open-npm huggingface dataset:
npm package: @okiba/smooth-scroll
Description: Scrolls a panel following lerped scroll
Latest version: 1.0.12



# Okiba / SmoothScroll
Makes elements scroll smoothly with lerped translations
Can be extended or instantiated




```javascript
import { qs } from '@okiba/dom'
import Component from '@okiba/component'
import SmoothScroll from '@okiba/smooth-scroll'

const app = new Component({
  el: qs('#app'),
  components: [
    {
      ghost: true,
      type: SmoothScroll
    }
  ]
})
```



### Installation

```bash
npm i --save @okiba/smooth-scroll
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/smooth-scroll/index.js"></script>
```

## Usage

```javascript
import SmoothScroll from '@okiba/smooth-scroll'
```

#### Untranspiled code 🛑
Okiba UI packages are not transpiled, so __don't forget to transpile them with your favourite bundler__.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:
```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## constructor(args, args.el, args.options, args.options.elements, args.options.enabled)









#### Arguments


##### + `args`: `Object`

Arguments to create a component


##### + `args.el`: `Element`

DOM Element to be bound


##### + `args.options`: `Object`

Custom options passed to the component


##### + `args.options.elements`: `String` | _optional_ - _default_: `'.js-scroll-element'`

The css selector of element to be translated


##### + `args.options.enabled`: `Boolean` | _optional_ - _default_: `true`

Defines if smooth scroll is enabled





## enable()


Enables component's features







## disable()


Disables component's features







## onScroll(data)


Updates inner elements on scroll







#### Arguments


##### + `data`: `Object`

Scroll event's data





## listen()


Adds scroll event listener to ScrollManager







## unlisten()


Removes scroll event listener from ScrollManager







## onDestroy()


Removes all event listeners on destroy from ScrollManager
npm package: @okiba/sticky-content
Description: Keeps a section in view while its parent is scrolling
Latest version: 1.0.12



# Okiba / StickyContent
Makes an element sticky according to page scroll
Can be extended or instantiated




```javascript
import { qs } from '@okiba/dom'
import Component from '@okiba/component'
import StickyContent from '@okiba/sticky-content'
import EventManager from '@okiba/event-manager'

class StickyComponent extends StickyContent {
  constructor(args) {
    super(args)
    EventManager.on('scroll', () => this.update({ y: window.scrollY }))
  }
}

const app = new Component({
  el: qs('#app'),
  components: [
    {
      selector: '.sticky',
      type: StickyComponent
    }
  ]
})
```



### Installation

```bash
npm i --save @okiba/sticky-content
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/sticky-content/index.js"></script>
```

## Usage

```javascript
import StickyContent from '@okiba/sticky-content'
```

#### Untranspiled code 🛑
Okiba UI packages are not transpiled, so __don't forget to transpile them with your favourite bundler__.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:
```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## constructor(args, args.el, args.options, args.options.targetSelector, args.options.overflow, args.options.thresholdTop)









#### Arguments


##### + `args`: `Object`

Arguments to create a component


##### + `args.el`: `Element`

DOM Element to be bound


##### + `args.options`: `Object`

Custom options passed to the component


##### + `args.options.targetSelector`: `String`

The css selector of element to be made sticky


##### + `args.options.overflow`: `Boolean`

Keeps element sticky even if its limitY has been reached


##### + `args.options.thresholdTop`: `Number`

Adjusts start scroll position





## enable()


Enables component's features







## disable()


Disables component's features







## update(args, args.y)


Updates element's position according to passed scroll position







#### Arguments


##### + `args`: `Object`




##### + `args.y`: `Number`

The current scrollY





## onResize()


Updates element's boundaries according to current viewport sizes







## listen()


Adds resize event listener to EventManager







## unlisten()


Removes resize event listener from EventManager







## onDestroy()


Removes all event listeners on destroy from EventManager
npm package: @okiba/store
Description: A store module to implement state management
Latest version: 0.0.5



# Okiba / Store
A store module to implement state management.
It allows registering to prop updates, as well as any update trough the catch-all callback.

__



```javascript
import Store from '@okiba/store'

const store = new Store({ level: 1, lives: 3 })

const onLevelChange = level => {
 console.log(level)
}

store.subscribe('*', state => console.log(`Store: ${state}`))
store.subscribe('level', onLevelChange)

store.set('level', 2)
// Logs: 2
// Logs: the whole state ({level: 1, lives: 3})
```



### Installation

```bash
npm i --save @okiba/store
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/store/index.js"></script>
```

## Usage

```javascript
import Store from '@okiba/store'
```

#### Untranspiled code 🛑
Okiba Core packages are not transpiled, so _don't forget to transpile them with your favourite bundler_.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:

```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## constructor(initialState)









#### Arguments


##### + `initialState`: `Object`

The initial store's state





## set(key, value)


Single state property setter







#### Arguments


##### + `key`: `String`

The property key


##### + `value`: `any`

The property value





## get(key)


Single state property getter







#### Arguments


##### + `key`: `String`

The property key





## getState()


State getter







#### Returns

`Object` The current state
## setState(state)


State setter







#### Arguments


##### + `state`: `Object`

The new state object





## reset()


State resetter







## clear()


Clears the current state, that is, the store is going to be empty.
No callbacks are fired.







## subscribe(key, callback)


State update subscription handler







#### Arguments


##### + `key`: `String`

The property to be observed


##### + `callback`: `function`

The function to be called on property update





## unsubscribe(key, callback)


State update unsubscription handler







#### Arguments


##### + `key`: `String`

The property to be unobserved


##### + `callback`: `function`

The handler to be dismissed
npm package: @okiba/time-progress
Description: Helper class used to normalize time on a duration between 0 and 1
Latest version: 1.0.26



# Okiba / TimeProgress
Maps progress ovrer time, normalized between 0 and 1

__



```javascript
import TimeProgress from '@okiba/time-progress'

const tp = new TimeProgress(400)
tp.setProgress(0.2)

 function loop() {
  const progress = tp.update()
  domeElement.style.opacity = progress

  if (progress > 0.8 || progress < 0.2) {
    tp.reverse()
  }

  requestAnimationFrame(loop)
}

requestAnimationFrame(loop)
```



### Installation

```bash
npm i --save @okiba/time-progress
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/time-progress/index.js"></script>
```

## Usage

```javascript
import TimeProgress from '@okiba/time-progress'
```

#### Untranspiled code 🛑
Okiba Core packages are not transpiled, so _don't forget to transpile them with your favourite bundler_.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:

```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## constructor(duration)









#### Arguments


##### + `duration`: | _optional_ - _default_: `400`

Amount of time it takes to reach progress = 1





## update()


Has to be called at every loop or whenever you want get an updated progress







#### Returns

`Number` Normalized progress in time
## reset()


Sets the timer back to zero







## setProgress(progress)


Forces a certain progress, reflected on the time







#### Arguments


##### + `progress`: `Number`

[description]





## setDirection(direction)


Sets a direction in time.
`1` is forward in time (progress goes from 0 to 1)
`-1` is backwards in time (progress goes from 1 to 0)







#### Arguments


##### + `direction`: `Number`

1 is forward, -1 is backwards





## reverse()


Reverses the direction in time
npm package: @okiba/view-progress
Description: Informs an element about how much of it has been viewed
Latest version: 1.0.12



# Okiba / ViewProgress
Retrieves the percentage (0 to 1) of element's in-view portion according to page scroll
Can be extended or instantiated




```javascript
import { qs, qsa, on } from '@okiba/dom'
import Component from '@okiba/component'
import ViewProgress from '@okiba/view-progress'

class ViewProgressComponent extends ViewProgress {
  constructor(args) {
    super(args)
    this.on('enter', this.onEnter)
    this.on('progress', this.onProgress)
    this.on('exit', this.onExit)
    this.update({ y: window.scrollY })
    on(window, 'scroll', () => this.update({ y: window.scrollY }))
  }

  onEnter = () => console.log()(`${this.el} entered`)
  onProgress = ({ progress }) => console.log(progress)
  onExit = () => console.log()(`${this.el} exited`)
}

const app = new Component({
  el: qs('#app'),
  components: [
    {
      selector: '.view-progress-element',
      type: ViewProgress
    }
  ]
})
```



### Installation

```bash
npm i --save @okiba/view-progress
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/view-progress/index.js"></script>
```

## Usage

```javascript
import ViewProgress from '@okiba/view-progress'
```

#### Untranspiled code 🛑
Okiba UI packages are not transpiled, so __don't forget to transpile them with your favourite bundler__.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:
```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## constructor(args, args.el, args.options, args.options.overflow, args.options.thresholdTop, args.options.thresholdBottom)









#### Arguments


##### + `args`: `Object`

Arguments to create a component


##### + `args.el`: `Element`

DOM Element to be bound


##### + `args.options`: `Object`

Custom options passed to the component


##### + `args.options.overflow`: `Boolean`

Keeps emitting progress even if elements is out of viewport


##### + `args.options.thresholdTop`: `Number`

A value added to element's top position to adjust its bounding area


##### + `args.options.thresholdBottom`: `Number`

A value added to element's bot position to adjust its bounding area





## update(args, args.y)


Updates element's progress and emits enter, exit and progress events according to passed scroll position







#### Arguments


##### + `args`: `Object`




##### + `args.y`: `Number`

The current scrollY





## onResize()


Updates element's boundaries according to current viewport sizes and page scrollable area







## listen()


Adds resize event listener to EventManager







## unlisten()


Removes resize event listener from EventManager







## onDestroy()


Removes all event listeners on destroy from EventManager
npm package: @okiba/worker-utils
Description: Utils to work with WebWorker
Latest version: 0.1.25



# Okiba / worker-utils
Set of useful functions to ease WebWorkers development

__



### Installation

```bash
npm i --save @okiba/worker-utils
```

Or import it directly in the browser
```html
<script type="module" src="https://unpkg.com/@okiba/worker-utils/index.js"></script>
```

## Usage

```javascript
import worker-utils from '@okiba/worker-utils'
```

#### Untranspiled code 🛑
Okiba Core packages are not transpiled, so _don't forget to transpile them with your favourite bundler_.
For example, using Babel with Webpack, you should prevent imports from okiba to be excluded from transpilation, like follows:

```javascript
{
  test: /\.js$/,
  exclude: /node_modules\/(?!(@okiba)\/).*/,
  use: {
    loader: 'babel-loader',
    options: {
      presets: ['@babel/preset-env']
    }
  }
}
```







## createWorker(fn)


Creates a web worker starting from a function







#### Arguments


##### + `fn`: `function`

function to be included in the worker script, will be self-invoked





#### Returns

`WebWorker` worker running the passed script
npm package: @okidoo/eslint9-plugin-no-arithmetic
Description: Forbid arithmetic and suggest float-safe alternatives.
Author: @vertical-made/@okidoo
Latest version: 1.0.0

# eslint-plugin-no-arithmetic

@Fork of [eslint-plugin-no-arithmetic](https://github.com/vertical-made/eslint-plugin-no-arithmetic)
Fix metadata of the package because eslint 9 was throwing an error when using a custom message.

ESLint plugin containing a rule for detecting arithmetic in JavaScript source. Floating-point math can lead to imprecise results, so this plugin directs users to float-safe alternative helper methods.

## Configuration

Add the following to your `eslint` config:

```js
import noArithmetic from "@okidoo/eslint9-plugin-no-arithmetic";

{
  //...
  plugins: {
    // ...
    "@okidoo/eslint9-plugin-no-arithmetic",
    // ...
    },
  rules: {
    "@okidoo/eslint9-plugin-no-arithmetic/no-arithmetic": "error",
    // ...
  }
}
```

Or with a custom alternative suggestion:

```js
{
  //...
  plugins: [
    // ...
    "@okidoo/eslint9-plugin-no-arithmetic",
    // ...
  ],
  rules: {
    "@okidoo/eslint9-plugin-no-arithmetic/no-arithmetic": [
      "error",
      {
        message:
          "Floating-point math can lead to imprecise results, use MathUtil",
      },
    ],
    // ...
  }
}
```

## Options

### `message`

Sets the hint message.

> type: `string`
>
> default: `"use float-safe alternatives"`

### `ignoreIteratorLike`

When enabled, does _not_ error on operations that look like an increment / decrement. We define this as the right-hand value of a binary `+` / `-` operation being the literal value `1`.

> type: boolean
>
> default: `true`
npm package: @okikio/nativejs
Description: A framework who's goal is to make it easier to create complex, performant, light-weight, web applications using native js apis.
Author: Okiki Ojo
Latest version: 1.0.0
Deprecated: Moved to @okikio/native

# nativejs

[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/okikio/nativejs)

A framework who's goal is to make it easier to create complex, performant, light-weight, web applications using native js apis. It was inspired by Rezo Zero's Starting Blocks project, and Barba.js. Both libraries had a major impact on the development of this project. Barba.js is easy to use and elevates the experience of a site with the use of PJAX, while Starting Blocks used native apis to create light-weight but complex web experiences. This project exists as a more flexible alternative to Starting Blocks, but with the same intuitive design and experience (UX/DX) Barba.js provides. It also, allows for web apps to be created without the need of PJAX, and safely switches back to normal HTML controls if JS is disabled.

This project is called a framework but it is more like a guideline, if all you want is a simple starter project that has PJAX built in then you install the project from `npm` once it becomes available, but otherwise you download the project into you workspace and tweak it to match your projects needs and remove all the extra fluff you don't want (By the way, this project works best with treeshaking, so, for the sake of speed, performance, and weight use Rollup or Webpack; Rollup is preferred).
npm package: @okinea/silica-gel
Description: 🀄 DESICCANT SILICA GEL THROW AWAY "DO NOT EAT"
Author: Okinea Dev
Latest version: 0.0.2

<!-- markdownlint-disable first-line-h1 -->

[![NPM Version](https://img.shields.io/npm/v/@okinea/silica-gel?logo=npm&logoColor=212121&label=version&labelColor=FAFAFA&color=212121)](https://npmjs.com/package/aboutproject) [![Tests Status](https://img.shields.io/github/actions/workflow/status/okineadev/silica-gel/test.yml?label=tests&labelColor=212121)](https://github.com/okineadev/silica-gel/actions/workflows/test.yml) [![Built with Bun](https://img.shields.io/badge/Built_with-Bun-fbf0df?logo=bun&labelColor=212121)](https://bun.sh) [![Formatted with Biome](https://img.shields.io/badge/Formatted_with-Biome-60a5fa?style=flat&logo=biome&labelColor=212121)](https://biomejs.dev/)

<!-- markdownlint-capture -->
<!-- markdownlint-disable no-inline-html heading-start-left -->
<div align="center">

  # SILICA GEL

  <img alt="Silica Gel" src="assets/silicagel.png" width="200" />

  > **Silica Gel for JavaScript**
</div>
<!-- markdownlint-restore -->

## 📦 Installation

```bash
npm install @okinea/silica-gel
```

## 🚀 Usage

```typescript
import { SILICA_GEL } from '@okinea/silica-gel'

SILICA_GEL()
// DESICCANT SILICA GEL THROW AWAY "DO NOT EAT"
```

## 🤔 Why?

idk.

## 📑 Wiki

- <https://en.wikipedia.org/wiki/Silica_gel>

## ❤️ Support

If you like this project, consider supporting it by starring ⭐ it on GitHub, sharing it with your friends, or [buying me a coffee ☕](https://github.com/okineadev/silica-gel?sponsor=1)

## 📝 License

MIT © [Okinea Dev](https://github.com/okineadev)
npm package: @okisdev/config
Description: okisdev's personal configuration
Author: Harry Yep
Latest version: 0.0.30

# @okisdev/config

Personal configuration for linting and formatting.

## Installation

```bash
pnpm add -D @okisdev/config @biomejs/biome ultracite
```

## Usage

### Biome

Create a `biome.jsonc` in your project root:

```jsonc
{
  "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
  "extends": ["@okisdev/config/biome"]
}
```

Then run:

```bash
biome check .
biome check --fix .
```

## License

MIT
npm package: @okiss/create-app
Description: `OMS` 的项目模板.
Author: daodao97
Latest version: 0.0.6

## @okiss/create-app

`OMS` 的项目模板.

```shell
npm init @okiss/app
# or
yarn create @okiss/app
# or
pnpm create @okiss/app

# npm 6.x
npm init @okiss/app m-app --template ts 

# npm 7+, extra double-dash is needed:
npm init @okiss/app m-app -- --template ts

# yarn
yarn create @okiss/app m-app --template js
```

template 的可选项有: `js`, `ts`
npm package: @okitan/grid-for-sheet
Description: utilities for google spreadsheet griddata generation
Latest version: 2.6.1

# @okitan/grid-for-sheet

utilities for google spreadsheet griddata generation

## Installation

```
$ npm install @okitan/grid-for-sheet
```

## Usage

```typescript
import { Grid } from "@okitan/grid-for-sheet";

const grid = new Grid({ data: [["strong", 0]] });

grid.toGridData();
/* returns
{
  rowData: [
    { values: [
      {
        userEnteredValue: { stringValue: "strong" }
      },
      {
        userEnteredValue: { numberValue: 0 }
      }
    ]}
  ]
}
 */
```

More usage: `tests/grid.test.ts`.

## Terminology

```
     A     B     C     D
1 |     | C1  | C2  |     | ← columnHeader
2 |     | SUM | SUM | SOS | ← columnTotalHeader
3 | R1  |     |     | SUM |
4 | R2  |     |     | SUM |
    ↑ rowHeader        ↑ rowTotal
```

- columnHeader
  - activated by `column.showHeader`
- columnTotalHeader
  - activated by `sum.column`
- rowHeader
  - activated by `row.showHeader`
- rowTotal
  - activated by `sum.row`

### Labels

On the upper table, these cells can be set by labels.

- gridLable(A1)
  - set `label`, but only shown when rowHeader and columnHeader are present
- rowTotalLabel(D1)
  - set `sum.row.label`, but only shown when rowTotal and columnHeader are present
- columnTotalHeaderLabel(A2)
  - set `sum.column.label`, but only shown when rowHeader and columnTotalHeader are present
npm package: @okitan/ink-slack
Description: render Slack blocks into console
Latest version: 2.3.0

# ink-slack

render Slack blocks into console

## Install

```console
$ npm install @okitan/ink-slack ink react
```

## Usage

```typescript
import { Slack } from "@okitan/ink-slack";
import type { KnownBlock } from "@slack/types";
import { render } from "ink";

const blocks: KnownBlock[] = [
  {
    type: "section",
    text: {
      type: "mrkdwn",
      text: "New Paid Time Off request from <example.com|Fred Enriquez>\n\n<https://example.com|View request>",
    },
  },
];

render(<Slack>{blocks}</Slack>); /* => outputed
New Paid Time Off request from Fred Enriquez (example.com)

View request (https://example.com)
*/
```
npm package: @okitan/notion-manager
Description: yargs commands to sync google sheets to notion.
Latest version: 1.0.2

# @okitan/notion-manager

yargs commands to sync google sheets to notion.

## Usage

```node
// without configuration
yargs.command(require("@okitan/notion-manager/lib/command/db"));

// with configuration
import { dbCommandModule } from "@okitan/notion-manager";

yargs.command(dbCommandModule({ desfinitionsDir: "./definitions" }));
```
npm package: @okitomassa/lpp-cli
Description: L++ CLI - Compiler and Tooling for Roblox Development
Author: ocauapaz
Latest version: 1.0.7

# CLI luax (esboço)
- `luax build file.lx` → transpila um arquivo.
- `luax build src/` → transpila recursivamente.
- `luax watch` → recompila em mudança.
- `luax fmt` → formata usando grammar + pretty printer.

Implementação futura: Node/Deno + pipeline compartilhado com LSP.
npm package: @okjake/electron-forge-maker-nsis
Description: An `electron-forge` maker for NSIS that supports `electron-forge` v7 and can be used as a replacement for `electron-builder`. Supports code-signing and basic updates with `electron-updater`.
Latest version: 7.0.2

# electron-forge-maker-nsis [![npm][npm_img]][npm_url]

An `electron-forge` maker for NSIS that supports `electron-forge` v6 and can be used as a
replacement for `electron-builder`. Supports code-signing and basic updates with `electron-updater`.

This maker takes two configuration objects: `codesigning` for codesigning and `updater` for `electron-updater` support. Both of them are optional, the feature in question will simply be turned off if not provided.

- `codesigning` is passed directly to [@electron/windows-sign](https://github.com/electron/windows-sign) and supports all its options (except for `appDirectory`, which is provided directly by this maker).
- `updater`
  - `url`: URL to the location of yml files.
  - `updaterCacheDirName`: Name of the local cache. By default `${name}-updater`.
  - `channel`: Name of the update channel. By default `latest`.
  - `publisherName`: Used to verify the code signature. 

```ts
// forge.config.js with minimal configuration
makers: [
    {
      name: "@felixrieseberg/electron-forge-maker-nsis",
      config: {},
    }
  ]
```

```ts
  // forge.config.js with example configuration
  makers: [
    {
      name: "@felixrieseberg/electron-forge-maker-nsis",
      config: {
        codesigning: {
          certificateFile?: string;
          certificatePassword?: string;
        },
        updater: {
					url: "https://s3-us-west-2.amazonaws.com/my-bucket",
					updaterCacheDirName: "my-updater",
          channel: "latest",
          publisherName: "My Company, Inc."
				},
        getAdditionalConfig: () => {
          return {
            artifactName: "${productName} Setup ${version} ${arch}.${ext}"
          }
        }
      },
    }
  ]
```

## Updating

This tool supports ["generic" updates][https://www.electron.build/configuration/publish.html#publishers] with `electron-updater`. 

# License
MIT. Please see LICENSE for details.

[electron]: https://github.com/electron/electron
[npm_img]: https://img.shields.io/npm/v/@felixrieseberg/electron-forge-maker-nsis.svg
[npm_url]: https://npmjs.org/package/@felixrieseberg/electron-forge-maker-nsis
npm package: @okjavis/flash-export
Description: blazing fast client-side data export utility
Author: Anand Jee Choubey
Latest version: 1.1.8

# Large Dataset XLSX Exporter

Efficiently process and export large datasets (e.g., 1 million rows) into `.xlsx` files using Web Workers. This library is designed to be easily integrated into any React project, providing a seamless and responsive user experience.

## Features

- **Web Worker Integration**: Offload heavy data processing to Web Workers to keep the UI responsive.
- **Large Dataset Handling**: Efficiently process and export datasets with millions of rows.
- **Easy Integration**: Designed to be easily integrated into any React project.
- **User-Friendly API**: Simple and intuitive API for quick setup and usage.

## Installation

Install the library using npm:

```bash
npm install flash-export
```

## Usage

### Basic Example

```javascript
import FlashExport from "flash-export";

// Example dataset with 1 million rows
const dataset = Array.from({ length: 1000000 }, (_, i) => ({
  id: i + 1,
  name: `Item ${i + 1}`,
  value: Math.random(),
}));

const columns = [
  { header: "ID", key: "id" },
  { header: "Name", key: "name" },
  { header: "Value", key: "value" },
];

function App() {
  return (
    <FlashExport
      data={dataset}
      columns={["name", "value"]}
      fileName={"test-filename"}
    />
  );
}
```

### API

Exports a large dataset to an `.xlsx` file.

- `data`: Array of objects representing the dataset.
- `columns`: Array of column names `['column 1', 'column 2']`.
- `fileName`: Name of the exported file.

<!-- ## Contributing

We welcome contributions! Please read our [Contributing Guidelines](CONTRIBUTING.md) for more details. -->

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Acknowledgements

- This library uses [SheetJS](https://github.com/SheetJS/sheetjs) for generating `.xlsx` files.
- Special thanks to all contributors and open-source projects that made this library possible.

## Contact

For any questions or issues, please open an issue on the [GitHub repository](https://github.com/your-username/large-dataset-xlsx-exporter).

---

Happy exporting! 🚀