open-index/open-npm huggingface dataset:
npm package: @rnui/checkbox
Description: ```bash yarn add react-native-svg @rnui/checkbox ```
Author: 范文华
Latest version: 1.0.3

# Installation

```bash
yarn add react-native-svg @rnui/checkbox
```

# Link
```bash
# RN < 0.60
react-native link react-native-svg

# RN >= 0.60
cd ios && pod install && cd ..
```

## Usage
```typescript jsx
import React from 'react';
import { UICheckbox } from '@rnui/checkbox';

const App = () => {
  return <UICheckbox>Hello World</UICheckbox>;
};
```
npm package: @rnui/text
Description: ```bash yarn add @rnui/text ```
Author: 范文华
Latest version: 1.0.1

# Installation

```bash
yarn add @rnui/text
```

## Usage
```typescript jsx
import React from 'react';
import { UIText } from '@rnui/text';

const App = () => {
  return <UIText>Hello World</UIText>;
};
```
npm package: @rnv/renative
Description: 🚀🚀🚀 Unified Development Platform. Bootstrap, Develop & Deploy `iOS`, `tvOS`, `Android`, `Android TV`, `FireTV`, `Android Wear`, `Web`, `Tizen TV`, `Tizen Watch`, `LG webOS`, `macOS/OSX`, `Windows`, `KaiOS`, and `Linux` platforms
Author: Pavel Jacko
Latest version: 1.9.1
npm package: @rnv/template-blank
Description: 🚧 Blank Template for ReNative (https://www.npmjs.com/package/renative). Supports `iOS`, `tvOS`, `Android`, `Android TV`, `FireTV`, `Android Wear`, `Web`, `Tizen TV`, `Tizen Watch`, `LG webOS`, `macOS/OSX`, `Windows`, `KaiOS`, `FirefoxOS`, `Firefox TV`
Author: Pavel Jacko
Latest version: 0.36.1
npm package: @rnv/template-starter
Description: 🚧 Starter Template for ReNative (https://www.npmjs.com/package/renative). Supports `iOS`, `tvOS`, `Android`, `Android TV`, `FireTV`, `Android Wear`, `Web`, `Tizen TV`, `Tizen Watch`, `LG webOS`, `macOS/OSX`, `Windows`, `KaiOS`, `Linux
Author: Pavel Jacko
Latest version: 1.9.1
npm package: @rnw-community/eslint-plugin
Description: RNW-Community ESLint plugin
Latest version: 1.12.1

# RNW ESLint plugin

Elevate your React/ReactNative projects with our [ESLint](https://eslint.org) plugin, meticulously crafted to ensure adherence to the best practices in the industry.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Feslint-plugin.svg)](https://badge.fury.io/js/%40rnw-community%2Feslint-plugin)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Feslint-plugin.svg)](https://www.npmjs.com/package/%40rnw-community%2Feslint-plugin)

## Notable Rule: no-complex-jsx-logic

Our plugin features the no-complex-jsx-logic rule, specifically designed to streamline JSX in your React components.
It ensures simplicity in JSX by restricting complex expressions, thus enhancing readability and maintainability.
For a comprehensive guide on this rule, see our [detailed documentation](./src/rules/no-complex-jsx-logic/no-complex-jsx-logic.md).

## Installation

Incorporating our plugin into your project is straightforward. Follow these simple steps:

### Install via NPM: Run the following command in your project directory:
```sh
npm install @rnw-community/eslint-plugin --save-dev
```

### Configuration(legacy: .eslintrc*):
#### Custom rule configuration:
```json
{
  "plugins": [
    "@rnw-community"
  ],
  "rules": {
    "@rnw-community/no-complex-jsx-logic": "error"
  }
}
```

#### Extending "recommended":
```json
{
    "extends": [
        "plugin:@rnw-community/recommended"
    ]
}
```

### Configuration(new: eslint.config.js):

#### Custom rule configuration
```js
import rnwcPlugin from '@rnw-community/eslint-plugin';

module.exports = [
  {
      files: ['**/*.{js,jsx,ts,tsx}'],
      plugins: {
          rnwcPlugin,
      },
      rules: {
          "@rnw-community/no-complex-jsx-logic": "error"
      },
  }
];
```

#### Extending "recommended"
```js
import rnwcPlugin from '@rnw-community/eslint-plugin';

module.exports = [
  {
      files: ['**/*.{js,jsx,ts,tsx}'],
      extends: [rnwcPlugin.configs['flat/recommended']],
  }
];
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/fast-style
Description: Fast react native flex and font styling
Latest version: 1.12.1

# React Native Fast Styles

Utility library for rapid React Native styling.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Ffast-style.svg)](https://badge.fury.io/js/%40rnw-community%2Ffast-style)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Ffast-style.svg)](https://www.npmjs.com/package/%40rnw-community%2Ffast-style)

Library using [@rnw-community/object-field-tree](https://www.npmjs.com/package/@rnw-community/object-field-tree) package for
generating complex object field structure.

## Flex

Special object `Flex` for rapid React native FlexBox styles generation with IDE autocomplete(IntelliSense).

### Usage in Style object

Styles usage example with spreading styles:

```ts
import { StyleSheet } from 'react-native';
import { Flex, Font } from '@rnw-community/fast-style';

export const componentStyles = StyleSheet.create({
    root: {
        ...Flex.row.flexEnd.stretch,
        padding: 16,
    },
});
```

### JSX inline usage

```tsx
import { View, Text } from 'react-native';
import { Flex } from '@rnw-community/fast-style';

export const Component = () => <View style={Flex.column.center.flexStart} />;
```

## Font

Special method `getFont()` for generating `Font` object for rapid React native _Font_ styles generation with IDE autocomplete(IntelliSense).

Every project is using their own _fonts_, _colors_ and _sizes_ according to the style-guide, for generating `Font` object:

```ts
const Font = getFont(FontFamilies, Sizes, Colors);
```

Example usage:

```ts
import { getFont } from '@rnw-community/fast-style';

export enum FontColorEnum {
    red = '#D8D8D8',
    green = '#1462FC',
    black = '#353535',
    blue = '#1252D7',
}
export enum FontFamilyEnum {
    ptSansBold = 'PTSans-Bold',
    ptSansRegular = 'PTSans-Regular',
}
export enum FontSizeEnum {
    xxl = '28',
    xl = '24',
    l = '22',
    m = '20',
    s = '18',
    xs = '16',
}

export const Font = getFont(FontFamilyEnum, FontSizeEnum, FontColorEnum);
```

### Usage in Style object

```ts
import { StyleSheet } from 'react-native';

import { Font } from './font';

export const componentStyles = StyleSheet.create({
    text: {
        ...Font.ptSansBold.xs.blue,
        testDecoration: 'underline',
    },
});
```

### JSX inline usage

```tsx
import { Text } from 'react-native';

import { Font } from './font';

export const Component = () => <Text style={Font.ptSansBold.xs.blue}>There!</Text>;
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/hoverable
Description: Hover support for React native elements in React native web
Latest version: 0.65.2

# React Native Hoverable

Bring hover and additional state to custom components and React Native components.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fhoverable.svg)](https://badge.fury.io/js/%40rnw-community%2Fhoverable)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fhoverable.svg)](https://www.npmjs.com/package/%40rnw-community%2Fhoverable)

This package exposes `withHover` higher order component.

Following states and props will be added to the passed component:

| state    |      style prop |   state flag |
| -------- | --------------: | -----------: |
| Disabled | `disabledStyle` | `isDisabled` |
| Active   |   `activeStyle` |   `isActive` |
| Hovered  |    `hoverStyle` |  `isHovered` |
| Regular  |         `style` |              |

Component can only be in one state.

Hoverable components can be nested, giving ability to receive state from the parent Hoverable component.

### Example usage:

```tsx
import { HoverView, withHover } from '@rnw-community/hoverable';
import { Text } from 'react-native';

const TextComponent = ({ style }) => <Text style={style}>I am a component</Text>;

const HoverTextComponent = withHover(TextComponent);

const Example = () => (
    <HoverView>
        <HoverTextComponent hoverStyle={{ backgroundColor: 'red' }} />
        <HoverTextComponent hoverStyle={{ backgroundColor: 'green' }} />
    </HoverView>
);
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/nestjs-enterprise
Description: NestJS Enterprise is a collection of enterprise-grade modules for NestJS.
Latest version: 1.14.1

# NestJS Enterprise

NestJS enterprise is a collection of tools and utilities to help you build enterprise-grade applications with NestJS.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fnestjs-enterprise.svg)](https://badge.fury.io/js/%40rnw-community%2Fnestjs-enterprise)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fnestjs-enterprise.svg)](https://www.npmjs.com/package/%40rnw-community%2Fnestjs-enterprise)


## Installation

Add `@rnw-community/nestjs-enterprise` to your project using you package manager of choice.

Peer dependencies that your project should contain:
 - [@nestjs/common](https://www.npmjs.com/package/@nestjs/common) `^10.2.7`,
 - [RxJS](https://www.npmjs.com/package/rxjs) `^7.8.1`

> Some features have **additional installation requirements**, please refer to the feature documentation for more information.

## Contents

### Decorators
- [Log](./src/decorator/log/log-decorator.md) - method call logging
- [Histogram Metric](./src/decorator/histogram-metric/histogram-metric-decorator.md) - Prometheus histogram metrics

### Distributed Locking

Create lock decorators bound to **any injectable** `LockServiceInterface` via NestJS DI:

```ts
const { SequentialLock, ExclusiveLock } = createPromiseLockDecorators(MyLockService, 5000);
const { SequentialLock$, ExclusiveLock$ } = createObservableLockDecorators(MyLockService, 5000);
```

- [createPromiseLockDecorators](./src/decorator/lock/create-promise-lock-decorators/create-promise-lock-decorators.md) - `SequentialLock` + `ExclusiveLock` for async methods
- [createObservableLockDecorators](./src/decorator/lock/create-observable-lock-decorators/create-observable-lock-decorators.md) - `SequentialLock$` + `ExclusiveLock$` for Observable methods

### Deprecated

- [LockPromise](./src/decorator/lock/lock-promise/lock-promise-decorator.md) - use `createPromiseLockDecorators` instead
- [LockObservable](./src/decorator/lock/lock-observable/lock-observable-decorator.md) - use `createObservableLockDecorators` instead
- [LockableService](./src/decorator/lock/lock-decorator.md) - use `LockServiceInterface` instead

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/nestjs-rxjs-logger
Description: NestJS RxJS logger
Latest version: 1.12.1

# NestJS RxJS logger

NestJS default logger wrapper for using with RxJS streams.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fnestjs-rxjs-logger.svg)](https://badge.fury.io/js/%40rnw-community%2Fnestjs-rxjs-logger)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fnestjs-rxjs-logger.svg)](https://www.npmjs.com/package/%40rnw-community%2Fnestjs-rxjs-logger)

## Supported log levels

-   `error` - `error$` RxJS operator
-   `info` - `info$` RxJS operator
-   `warn` - `warn$` RxJS operator
-   `debug` - `debug$` RxJS operator
-   `verbose` - `verbose$` RxJS operator

## Configuration

Import `NestJsRxJsLoggerModule` into your module:

```ts
import { Logger, Module } from '@nestjs/common';
import { NestJsRxjsLoggerService } from '@rnw-community/nestjs-rxjs-logger';

@Module({
    imports: [NestJsRxJsLoggerModule],
    providers: [],
    exports: [],
})
export class MyModule {}
```

Inject `NestJsRxjsLoggerService` into your service:

```ts
import { Injectable } from '@nestjs/common';
import { NestJsRxjsLoggerService } from '@rnw-community/nestjs-rxjs-logger';
import { mapTo } from 'rxjs';

@Injectable()
export class MyService {
    constructor(private readonly logger: NestJsRxjsLoggerService) {}
}
```

## Usage examples

### Basic operators example

```ts
import { Injectable } from '@nestjs/common';
import { NestJsRxjsLoggerService } from '@rnw-community/nestjs-rxjs-logger';
import { mapTo } from 'rxjs';

@Injectable()
export class MyService {
    constructor(private readonly logger: NestJsRxjsLoggerService) {}

    loggerOperatorExample$(): Observable<true> {
        return of(true).pipe(this.logger.info$('My message', 'OtherContext'));
    }
}
```

### Create stream example

```ts
import { Injectable } from '@nestjs/common';
import { NestJsRxjsLoggerService } from '@rnw-community/nestjs-rxjs-logger';
import { mapTo } from 'rxjs';

@Injectable()
export class MyService {
    constructor(private readonly logger: NestJsRxjsLoggerService) {}

    loggerCreateStreamExample$(): Observable<number> {
        return this.logger.create$('My message', MyService.name).pipe(mapTo(1));
    }
}
```

### Set logger context

```ts
import { Injectable } from '@nestjs/common';
import { NestJsRxjsLoggerService } from '@rnw-community/nestjs-rxjs-logger';
import { mapTo } from 'rxjs';

@Injectable()
export class MyService {
    constructor(private readonly logger: NestJsRxjsLoggerService) {
        this.logger.setContext(MyService.name);
    }

    loggerOperatorExample$(): Observable<true> {
        return of(true).pipe(this.logger.info$('My message'));
    }

    loggerCreateStreamExample$(): Observable<number> {
        return this.logger.create$('My message').pipe(mapTo(1));
    }
}
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/nestjs-typed-config
Description: NestJS typed config
Latest version: 1.12.1

# NestJS Typed config

NestJS typed configuration with full TypeScript support.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fnestjs-typed-config.svg)](https://badge.fury.io/js/%40rnw-community%2Fnestjs-typed-config)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fnestjs-typed-config.svg)](https://www.npmjs.com/package/%40rnw-community%2Fnestjs-typed-config)

## Installation

Install additional peer dependencies:

-   [@nestjs/config](https://github.com/nestjs/config)
-   [joi](https://github.com/sideway/joi)

## Configuration

-   Create enum with names for all the required environment variable names, interface with type for every environment variable
    and validation schema using joi.

```ts
export enum EnvironmentVariablesEnum {
    POSTGRES_USERNAME = 'POSTGRES_USERNAME',
    POSTGRES_PASSWORD = 'POSTGRES_PASSWORD',
    POSTGRES_HOST = 'POSTGRES_HOST',
}

export interface EnvironmentVariablesInterface {
    [EnvironmentVariablesEnum.POSTGRES_USERNAME]: string;
    [EnvironmentVariablesEnum.POSTGRES_PASSWORD]: string;
    [EnvironmentVariablesEnum.POSTGRES_HOST]: string;
}

import Joi from 'joi';

export const environmentVariablesValidationSchema = Joi.object({
    [EnvironmentVariablesEnum.POSTGRES_USERNAME]: Joi.string().required(),
    [EnvironmentVariablesEnum.POSTGRES_PASSWORD]: Joi.string().required(),
    [EnvironmentVariablesEnum.POSTGRES_HOST]: Joi.string().required(),
});
```

-   Create config module and service for NestJS DI, this module and service should be used in the project:

```ts
import { Inject, Injectable } from '@nestjs/common';

import { NestJSTypedConfigModule } from '@rnw-community/nestjs-typed-config';

const [BaseConfigModule, BaseConfigService] = NestJSTypedConfigModule.create<
    EnvironmentVariablesEnum,
    EnvironmentVariablesInterface
>(environmentVariablesValidationSchema);

@Injectable()
export class ConfigService extends BaseConfigService {}

@Module({
    imports: [BaseConfigModule],
    providers: [ConfigService],
    exports: [ConfigService],
})
export class ConfigModule {}
```

## Usage

```ts
import { ConfigService } from './config.module.ts';

@Injectable()
class DomainService {
    private readonly postgresPassword: string;

    constructor(private readonly config: ConfigService) {
        this.postgresPassword = config.get(EnvironmentVariablesEnum.POSTGRES_PASSWORD);
    }

    // ...
}
```

### Reading values from files

To read an environment variable from file, the environment variable name should end with `_FILE`:

```ts
export enum EnvironmentVariablesEnum {
    POSTGRES_PASSWORD_FILE = 'POSTGRES_PASSWORD_FILE',
}
```

Value of that environment variable should be a path to the file:

```shell
echo $POSTGRES_PASSWORD_FILE
/secrets/postgres_pwd
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/object-field-tree
Description: Create a object fields combinations tree with data generator function
Latest version: 1.12.1

# Object field tree

Utility for generating complex nested objects with data generation callback and full TypeScript support
with IDE autocompletion.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fobject-field-tree.svg)](https://badge.fury.io/js/%40rnw-community%2Fobject-field-tree)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fobject-field-tree.svg)](https://www.npmjs.com/package/%40rnw-community%2Fobject-field-tree)

`combine((...keys) => data, ...objects)`

Real world usage examples:
[@rnw-community/fast-style](https://github.com/rnw-community/rnw-community/tree/master/packages/fast-style)

## Example

### Typescript enum and object usage example

You need to understand how [TS converts enums](https://www.typescriptlang.org/docs/handbook/enums.html) into JS.

```ts
import { combine } from '@rnw-community/object-field-tree';
import { View } from 'react-native';

import { WidgetStyles } from './widget.styles';

enum ScienceEnum {
    'Mathematics' = 'Mathematics Science',
    'Physics' = 'Physics Science',
    'Chemistry' = 'Chemistry Science',
}

const complexityObject = {
    Easy: 'Easy',
    Medium: 'Medium',
    Hard: 'Hard',
};

const tree = combine(
    (science, complexity) => ({
        science: ScienceEnum[science],
        complexity: complexityObject[complexity],
        complexData: `${science}_${complexity}`,
    }),
    ScienceEnum,
    complexityObject
);

console.log(tree.Physics.Hard);
console.log(tree.Chemistry.Easy);
```

### Generating components example

With this approach you can create a strictly configurable building framework of Components for your project with very
easy usage and IDE autocompletion.

```tsx
import { combine } from '@rnw-community/object-field-tree';
import { View } from 'react-native';

import { WidgetStyles } from './widget.styles';

enum WidgetHeightEnum {
    'Small' = 'Small',
    'Medium' = 'Medium',
}

const widgetWidthMap = {
    Third: WidgetStyles.thrirdWidth,
    TwoThirds: WidgetStyles.twoThrirdsWidth,
    Full: WidgetStyles.fullWidth,
};

const widgetHeightStyleMap = {
    [WidgetHeightEnum.Small]: WidgetStyles.smallHeight,
    [WidgetHeightEnum.Medium]: WidgetStyles.MediumHeight,
};

export const Widget = combine(
    (height, width) => props => <View {...props} style={[widgetHeightStyleMap[height], widgetWidthMap[width]]} />,
    WidgetHeightEnum,
    widgetWidthMap
);

// Widget usage
const Component = () => (
    <Widget.Small.Full>
        <View>
            <Text>Hello!</Text>
        </View>
    </Widget.Small.Full>
);
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/platform
Description: React native web platform utils and helpers
Latest version: 1.12.1

# Platform - React native web community

Platform specific helpers and utils for react native web.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fredux-loadable.svg)](https://badge.fury.io/js/%40rnw-community%2Fredux-loadable)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fredux-loadable.svg)](https://www.npmjs.com/package/%40rnw-community%2Fredux-loadable)

### Platform constants

Global constants for simple identifying of the platform:

-   `isWeb`
-   `isIOS`
-   `isAndroid`
-   `isMobile` - IOS or Android

### Platform styling

Simple platform-specific styling helpers:

-   `webStyles(style)`
-   `androidStyles(style)`
-   `iosStyles(style)`
-   `iosStyles(style)`
-   `mobileStyles(style)`

Example usage:

```ts
import { StyleSheet } from 'react-native';
import { webStyles, androidStyles } from '@rnw-community/platform';

export const Styles = StyleSheet.create({
    root: {
        width: 200,
        ...webStyles({
            width: 400,
        }),
        ...androidStyles({
            paddingBottom: 5,
        }),
    },
});
```

### getEnv

Generic getter of environment variable value supporting `web` and `native` platforms. Works using [react-native-config](https://github.com/luggit/react-native-config)
on `native` platform, uses node `process` on `web` platform.

Example usage:

```ts
import { getEnv } from '@rnw-community/platform';

const myEnvVar = getEnv('ENV_NAME');
```

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/redux-loadable
Description: Redux loading state slice
Latest version: 1.12.1

# Redux-Loadable - React native web community

Generic redux loading state, selectors and utils for sending requests and handling loading/error states.
Library supports redux-toolkit and other class redux approaches.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fredux-loadable.svg)](https://badge.fury.io/js/%40rnw-community%2Fredux-loadable)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fredux-loadable.svg)](https://www.npmjs.com/package/%40rnw-community%2Fredux-loadable)

Supported loading states:

-   `pristine` - nothing has happened to the state slice
-   `loading` - loading started
-   `failed` - loading failed
-   `success` - loading was successful

## Utils

Helper reducer functions that will change loading state.

### `loadingStarted(state: LoadingStateInterface)`

### `loadingFinished(state: LoadingStateInterface)`

### `loadingFailed(state: LoadingStateInterface, error: string)`

### `loadingReset(state: LoadingStateInterface)`

## LoadingStateInterface

-   `isPristine` - flag showing that slice is in initial state and no requests were made.
-   `isLoading` - flag showing that request is ongoing.
-   `error` - string, storing last request error message

## Examples

### Redux-toolkit example

### ts-action example

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-community/shared
Description: Shared useful utils and types
Latest version: 1.12.1

# Shared

Generic types, type guards and utilities commonly used across packages.

[![npm version](https://badge.fury.io/js/%40rnw-community%2Fshared.svg)](https://badge.fury.io/js/%40rnw-community%2Fshared)
[![npm downloads](https://img.shields.io/npm/dm/%40rnw-community%2Fshared.svg)](https://www.npmjs.com/package/%40rnw-community%2Fshared)

## Type guards

Convenient [typescript type guards](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates) for
everyday usage.

> This type guards makes your code more explicit, readable and type-safe, both in runtime and typescript.

This package provides a set of convenient type guards for everyday usage with the following types:

- Generic:
    - [isObject](src/type-guard/generic/is-object/is-object.md)
    - [isDefined](src/type-guard/generic/is-defined/is-defined.md)
    - [isError](src/type-guard/generic/is-error/is-error.md)
    - [isPromise](src/type-guard/generic/is-promise/is-promise.md)
- Array:
    - [isArray](src/type-guard/array/is-array/is-array.md)
    - [isEmptyArray](src/type-guard/array/is-empty-array/is-empty-array.md)
    - [isNotEmptyArray](src/type-guard/array/is-not-empty-array/is-not-empty-array.md)
- String:
    - [isString](src/type-guard/string/is-string/is-string.md)
    - [isEmptyString](src/type-guard/string/is-empty-string/is-empty-string.md)
    - [isNotEmptyString](src/type-guard/string/is-not-empty-string/is-not-empty-string.md)
- Number:
    - [isNumber](src/type-guard/number/is-number/is-number.md)
    - [isPositiveNumber](src/type-guard/number/is-positive-number/is-positive-number.md)

## Utils

Utility functions that helps with everyday tasks:

- [getErrorMessage](src/util/get-error-message/get-error-message.md) - Get typesafe Error object message.
- [emptyFn](src/util/empty-fn/empty-fn.md) - Useful default react prop callback value.
- [cs](src/util/cs/cs.md) - Conditional styling util.
- [getDefined](src/util/get-defined/get-defined.md) - Get fallback value if passed variable is not defined.
- [getDefinedAsync](src/util/get-defined-async/get-defined-async.md) - Get async fallback value if passed variable is not
  defined.

## Types

Commonly used typescript types:

- [ClassType](src/type/class-type/class.type.md)
- [Maybe](src/type/maybe-type/maybe.type.md)
- [OnEventFn](src/type/on-event-fn-type/on-event-fn.type.md)
- [EmptyFn](src/type/empty-fn-type/empty-fn.type.md)
- [Enum](src/type/enum-type/enum-type.md)
- [IsNotEmptyArray](src/type/is-not-empty-array-type/is-not-empty-array.type.md)
- [ReadonlyIsNotEmptyArray](src/type/readonly-is-not-empty-array-type/readonly-is-not-empty-array.type.md)
- [AnyFn](src/type/any-fn-type/any-fn.type.md)
- [AbstractConstructor](src/type/abstract-constructor-type/abstract-constructor.type.md)
- [MethodDecoratorType](src/type/method-decorator-type/method-decorator.type.md)

## License

This library is licensed under The [MIT License](./LICENSE.md).
npm package: @rnw-scripts/doxysaurus
Description: The new Doxysaurus tool converts Doxygen generated XML to markdown files for Docusaurus.
Latest version: 0.4.59

# @rnw-scripts/doxysaurus

The new Doxysaurus tool converts Doxygen generated XML to markdown files for Docusaurus.

The main goal for the tool is to generate docs for public C++ APIs defined in `Microsoft.ReactNative.Cxx` project.
Doxygen can process code comments and generate HTML, LaTeX and other formats.
To make the generated docs working with our RNW Docusaurus documentation system, we have created the new Doxysaurus tool that runs Doxygen to generate documentation XML and then converts it to the Docusaurus markdown files.

In this PR we add `cpp_generate_documentation_comments = doxygen_double_slash_exclamation` to `.editorconfig` to instruct Visual Studio and VS Code to use `//!` style comments for C++ Doxygen documentation. The `//!` makes it easy to use, while it is different from the `///` which is typically used for C# XML comments. This option enables VS to use `//!` style comments in IntelliSense and to provide autogenerated tags when we type `//!` on top of a function.

Run this command from the root of the repo to generate docs:
```
yarn doc --output ..\react-native-windows-samples\docs
```
It does the following:
- downloads Doxygen executable on-demand;
- runs Doxygen to generate XML files;
- converts the Doxygen XML into an in-memory document model;
- generates Docusaurus markdown files by applying Mustache templates to the model in the provided `output` folder;
- if the `output` folder is not provided then the markdown files are generated in the `out` folder next to the `xml` folder in the `buildDir`.

Run the Doxysaurus tool in the 'watch' mode for interactive documentation development:
```
yarn doc --watch --output ..\react-native-windows-samples\docs
```
Now we can edit C++ comments, save the file, and see the docs in the browser updated after a small delay.
npm package: @rnw-scripts/generate-release-notes
Description: Generates release notes for React Native Windows
Latest version: 1.0.3

### Type of Change
Automate release notes creation by adding a new yarn script. Automating the process of creating release notes so that we don't have to manually copy paste the commits. 


### Why
To save us some time when generating release notes. Fetches commit from start and end date range, ignores bots and creates the release notes md file. It also categorizes the commits. Please cross-check the generated release-notes.md file and update it manually if required like regrouping commits or updating the Summary/Explanation for the PR commit.

## Format

`Explanation. [PRName (#11168) · microsoft/react-native-windows@aaaaaaa (github.com)](link)`

### Steps to follow

#### 1. Set up your personal access token

- Go to GitHub and log in: https://github.com/
- Click on your profile picture (top-right corner), then click Settings
- On the left sidebar, click Developer settings
- Then click Personal access tokens > Tokens (classic)
- Click Generate new token > Generate new token (classic)
- Give it a name like "Release Notes Script"
- Set an expiration (choose less than 90 days)
- Under Scopes, select the permissions your script needs. For fetching commits and repo info, you typically need:
repo (full control of private repositories)
or at least repo:status, repo_deployment, public_repo (for public repos)
- Click Generate token
- Find the token you're using (whichever token you created).
- You should see a message or option to "Grant access to your organization" or "Authorize SAML SSO" for your token.
- Click that button to authorize the token with the organization.
- Copy the generated token

#### 2. Set variables as params and run "yarn release-notes"

```
Usage:
  yarn release-notes --token <GITHUB_TOKEN> --start <START_DATE> --end <END_DATE> [--repo <OWNER/REPO>] [--tag <RELEASE_TAG>]

Options:
  --token       (required) GitHub personal access token.
  --start       (required) Start date in YYYY-MM-DD.
  --end         (required) End date in YYYY-MM-DD.
  --repo        Repository in OWNER/REPO format. Default: microsoft/react-native-windows
  --tag         Release tag label. Default: Unreleased. Expected: 0.80 or similar
  --help        Show this help message.
```

#### 3. You will see a release-notes.md file generated at packages\@rnw-scripts\generate-release-notes\release_notes.md which will have all the data you need.

#### 4. Verify the release notes generated from all commits section and delete the "All Commits" and "Excluded" sections after validation