@basiln/utils 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +25 -0
  2. package/dist/DomainFormat.js +123 -0
  3. package/dist/DomainFormat.js.map +1 -0
  4. package/dist/DomainFormat.mjs +7 -0
  5. package/dist/DomainFormat.mjs.map +1 -0
  6. package/dist/Flex.js.map +1 -1
  7. package/dist/Flex.mjs +2 -2
  8. package/dist/SafeArea.js.map +1 -1
  9. package/dist/SafeArea.mjs +4 -4
  10. package/dist/Spacing.js.map +1 -1
  11. package/dist/Spacing.mjs +2 -2
  12. package/dist/{chunk-Z4QPISK7.mjs → chunk-3BSCIHE2.mjs} +1 -1
  13. package/dist/{chunk-Z4QPISK7.mjs.map → chunk-3BSCIHE2.mjs.map} +1 -1
  14. package/dist/{chunk-FUGA35PJ.mjs → chunk-ANMBV2U3.mjs} +2 -2
  15. package/dist/{chunk-FUGA35PJ.mjs.map → chunk-ANMBV2U3.mjs.map} +1 -1
  16. package/dist/{chunk-SJJHTYZC.mjs → chunk-EB5LTJRH.mjs} +2 -2
  17. package/dist/{chunk-SJJHTYZC.mjs.map → chunk-EB5LTJRH.mjs.map} +1 -1
  18. package/dist/{chunk-XBGZ3YNL.mjs → chunk-FTMJVXXH.mjs} +2 -2
  19. package/dist/{chunk-XBGZ3YNL.mjs.map → chunk-FTMJVXXH.mjs.map} +1 -1
  20. package/dist/{chunk-OIJ4AVT7.mjs → chunk-KIUJWSBE.mjs} +1 -1
  21. package/dist/{chunk-OIJ4AVT7.mjs.map → chunk-KIUJWSBE.mjs.map} +1 -1
  22. package/dist/{chunk-C7VOPXT2.mjs → chunk-KMMS4XJ6.mjs} +2 -3
  23. package/dist/{chunk-C7VOPXT2.mjs.map → chunk-KMMS4XJ6.mjs.map} +1 -1
  24. package/dist/{chunk-T7K7QYTL.mjs → chunk-OQ3L65JI.mjs} +1 -1
  25. package/dist/{chunk-T7K7QYTL.mjs.map → chunk-OQ3L65JI.mjs.map} +1 -1
  26. package/dist/{chunk-HLTXXENG.mjs → chunk-RASCHI5T.mjs} +3 -3
  27. package/dist/{chunk-Q3B6WSD7.mjs → chunk-UCZMT7TP.mjs} +2 -2
  28. package/dist/{chunk-Q3B6WSD7.mjs.map → chunk-UCZMT7TP.mjs.map} +1 -1
  29. package/dist/{chunk-DD3KGUQX.mjs → chunk-VIGWO4EN.mjs} +2 -2
  30. package/dist/{chunk-DD3KGUQX.mjs.map → chunk-VIGWO4EN.mjs.map} +1 -1
  31. package/dist/chunk-WWR7M6ID.mjs +99 -0
  32. package/dist/chunk-WWR7M6ID.mjs.map +1 -0
  33. package/dist/{chunk-WHYNBO2G.mjs → chunk-Z4UXDD2C.mjs} +1 -1
  34. package/dist/{chunk-WHYNBO2G.mjs.map → chunk-Z4UXDD2C.mjs.map} +1 -1
  35. package/dist/{chunk-U4T3KW7L.mjs → chunk-Z7YV6A56.mjs} +1 -1
  36. package/dist/{chunk-U4T3KW7L.mjs.map → chunk-Z7YV6A56.mjs.map} +1 -1
  37. package/dist/coerceCssPixelValue.js.map +1 -1
  38. package/dist/coerceCssPixelValue.mjs +1 -1
  39. package/dist/createContext.js.map +1 -1
  40. package/dist/createContext.mjs +1 -1
  41. package/dist/ellipsis.js +1 -1
  42. package/dist/ellipsis.js.map +1 -1
  43. package/dist/ellipsis.mjs +1 -1
  44. package/dist/getVar.js.map +1 -1
  45. package/dist/getVar.mjs +1 -1
  46. package/dist/hasBatchim.js +1 -2
  47. package/dist/hasBatchim.js.map +1 -1
  48. package/dist/hasBatchim.mjs +1 -1
  49. package/dist/hexToRgba.js.map +1 -1
  50. package/dist/hexToRgba.mjs +1 -1
  51. package/dist/index.d.mts +250 -0
  52. package/dist/index.d.ts +23 -1
  53. package/dist/index.js +99 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +16 -12
  56. package/dist/josa.js +1 -2
  57. package/dist/josa.js.map +1 -1
  58. package/dist/josa.mjs +2 -2
  59. package/dist/queryString.js.map +1 -1
  60. package/dist/queryString.mjs +1 -1
  61. package/dist/useSafeArea.js.map +1 -1
  62. package/dist/useSafeArea.mjs +2 -2
  63. package/package.json +6 -17
  64. /package/dist/{chunk-HLTXXENG.mjs.map → chunk-RASCHI5T.mjs.map} +0 -0
@@ -64,4 +64,4 @@ var queryString = {
64
64
  export {
65
65
  queryString
66
66
  };
67
- //# sourceMappingURL=chunk-U4T3KW7L.mjs.map
67
+ //# sourceMappingURL=chunk-Z7YV6A56.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/queryString.ts"],"sourcesContent":["/**\n * @description 쿼리 스트링을 생성합니다.\n * @example createSearchParamString({ a: 1, b: 2, c: 3 }) // 'a=1&b=2&c=3'\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createSearchParamString(params: Record<string, any>) {\n return (\n new URLSearchParams(\n Object.entries(params)\n .filter(([, value]) => value != null)\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((x) => [key, x]);\n }\n return [[key, value]];\n })\n .flat()\n )\n .toString()\n // Convert space characters to '%20' according to RFC3986 spec, from RFC1738.\n .replace(/\\+/g, '%20')\n );\n}\n\n/**\n * @description 물음표를 포함한 쿼리 스트링을 생성합니다.\n * @example createQueryString({ a: 1, b: 2, c: 3 }) // '?a=1&b=2&c=3'\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createQueryString(params: Record<string, any>) {\n const queryString = createSearchParamString(params);\n\n if (queryString === '') {\n return '';\n }\n\n return `?${queryString}`;\n}\n\n/**\n * @description 이터러블에서 키와 값을 가진 객체로 변환합니다.\n * @example fromEntries([['a', 1], ['b', 2], ['c', 3]]) // { a: 1, b: 2, c: 3 }\n */\nfunction fromEntries<T extends readonly [string | number, unknown]>(\n iterable: Iterable<T>\n) {\n const result: Record<string | number | symbol, T[1]> = {};\n\n for (const [key, value] of Array.from(iterable)) {\n if (result[key]) {\n if (Array.isArray(result[key])) {\n (result[key] as Array<string | number>).push(value as string | number);\n } else {\n result[key] = [result[key], value];\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * @description 쿼리 스트링을 객체로 변환합니다.\n * @example parseQueryString('?a=1&b=2&c=3') // { a: '1', b: '2', c: '3' }\n */\nfunction parseQueryString<Result = Record<string, string>>(\n queryString: string = typeof location !== 'undefined' ? location.search : ''\n): Result {\n const query = queryString.trim().replace(/^[?#&]/, '');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return fromEntries(new URLSearchParams(query)) as any;\n}\n\n/**\n * @description 쿼리 스트링에서 특정 키의 값을 가져옵니다.\n *\n * @param name 가져올 쿼리 스트링의 키\n * @param parser 가져온 값을 파싱할 함수\n * @returns 파싱된 값\n *\n * @example\n * url: 'http://example.com/?a=1'\n * getQueryString('a') // '1'\n * getQueryString('a', parseInt) // 1\n * getQueryString('b') // undefined\n * getQueryString('b', parseInt) // undefined\n */\nfunction getQueryString(name: string): string | undefined;\nfunction getQueryString<T>(\n name: string,\n parser: (val: string) => T\n): T | undefined;\nfunction getQueryString<T = string>(name: string, parser?: (val: string) => T) {\n const value = queryString.parse<{ [name: string]: string | undefined }>()[\n name\n ];\n\n if (parser == null || value == null) {\n return value;\n } else {\n return parser(value);\n }\n}\n\n/**\n * @description 기존 쿼리 스트링에 새로운 쿼리 스트링을 추가합니다.\n * @example setQueryString({ qs: '?a=1', key: 'b', value: '2' }) // '?a=1&b=2'\n */\nfunction setQueryString({\n qs,\n key,\n value,\n}: {\n qs: string;\n key: string;\n value: string;\n}) {\n const parsed = parseQueryString(qs);\n\n return createQueryString({\n ...parsed,\n [key]: value,\n });\n}\n\nexport const queryString = {\n create: createQueryString,\n parse: parseQueryString,\n get: getQueryString,\n set: setQueryString,\n};\n"],"mappings":";AAKA,SAAS,wBAAwB,QAA6B;AAC5D,SACE,IAAI;AAAA,IACF,OAAO,QAAQ,MAAM,EAClB,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,IAAI,EACnC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,MAClC;AACA,aAAO,CAAC,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,CAAC,EACA,KAAK;AAAA,EACV,EACG,SAAS,EAET,QAAQ,OAAO,KAAK;AAE3B;AAOA,SAAS,kBAAkB,QAA6B;AACtD,QAAMA,eAAc,wBAAwB,MAAM;AAElD,MAAIA,iBAAgB,IAAI;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,IAAIA;AACb;AAMA,SAAS,YACP,UACA;AACA,QAAM,SAAiD,CAAC;AAExD,aAAW,CAAC,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG;AAC/C,QAAI,OAAO,GAAG,GAAG;AACf,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,QAAC,OAAO,GAAG,EAA6B,KAAK,KAAwB;AAAA,MACvE,OAAO;AACL,eAAO,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,KAAK;AAAA,MACnC;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAMA,SAAS,iBACPA,eAAsB,OAAO,aAAa,cAAc,SAAS,SAAS,IAClE;AACR,QAAM,QAAQA,aAAY,KAAK,EAAE,QAAQ,UAAU,EAAE;AAGrD,SAAO,YAAY,IAAI,gBAAgB,KAAK,CAAC;AAC/C;AAqBA,SAAS,eAA2B,MAAc,QAA6B;AAC7E,QAAM,QAAQ,YAAY,MAA8C,EACtE,IACF;AAEA,MAAI,UAAU,QAAQ,SAAS,MAAM;AACnC,WAAO;AAAA,EACT,OAAO;AACL,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAMA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,SAAS,iBAAiB,EAAE;AAElC,SAAO,kBAAkB;AAAA,IACvB,GAAG;AAAA,IACH,CAAC,GAAG,GAAG;AAAA,EACT,CAAC;AACH;AAEO,IAAM,cAAc;AAAA,EACzB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AACP;","names":["queryString"]}
1
+ {"version":3,"sources":["../src/queryString.ts"],"sourcesContent":["/**\n * @description 쿼리 스트링을 생성합니다.\n * @example createSearchParamString({ a: 1, b: 2, c: 3 }) // 'a=1&b=2&c=3'\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createSearchParamString(params: Record<string, any>) {\n return (\n new URLSearchParams(\n Object.entries(params)\n .filter(([, value]) => value != null)\n .map(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((x) => [key, x]);\n }\n return [[key, value]];\n })\n .flat()\n )\n .toString()\n // Convert space characters to '%20' according to RFC3986 spec, from RFC1738.\n .replace(/\\+/g, '%20')\n );\n}\n\n/**\n * @description 물음표를 포함한 쿼리 스트링을 생성합니다.\n * @example createQueryString({ a: 1, b: 2, c: 3 }) // '?a=1&b=2&c=3'\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction createQueryString(params: Record<string, any>) {\n const queryString = createSearchParamString(params);\n\n if (queryString === '') {\n return '';\n }\n\n return `?${queryString}`;\n}\n\n/**\n * @description 이터러블에서 키와 값을 가진 객체로 변환합니다.\n * @example fromEntries([['a', 1], ['b', 2], ['c', 3]]) // { a: 1, b: 2, c: 3 }\n */\nfunction fromEntries<T extends readonly [string | number, unknown]>(\n iterable: Iterable<T>\n) {\n const result: Record<string | number | symbol, T[1]> = {};\n\n for (const [key, value] of Array.from(iterable)) {\n if (result[key]) {\n if (Array.isArray(result[key])) {\n (result[key] as Array<string | number>).push(value as string | number);\n } else {\n result[key] = [result[key], value];\n }\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * @description 쿼리 스트링을 객체로 변환합니다.\n * @example parseQueryString('?a=1&b=2&c=3') // { a: '1', b: '2', c: '3' }\n */\nfunction parseQueryString<Result = Record<string, string>>(\n queryString: string = typeof location !== 'undefined' ? location.search : ''\n): Result {\n const query = queryString.trim().replace(/^[?#&]/, '');\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return fromEntries(new URLSearchParams(query)) as any;\n}\n\n/**\n * @description 쿼리 스트링에서 특정 키의 값을 가져옵니다.\n *\n * @param name 가져올 쿼리 스트링의 키\n * @param parser 가져온 값을 파싱할 함수\n * @returns 파싱된 값\n *\n * @example\n * url: 'http://example.com/?a=1'\n * getQueryString('a') // '1'\n * getQueryString('a', parseInt) // 1\n * getQueryString('b') // undefined\n * getQueryString('b', parseInt) // undefined\n */\nfunction getQueryString(name: string): string | undefined;\nfunction getQueryString<T>(\n name: string,\n parser: (val: string) => T\n): T | undefined;\nfunction getQueryString<T = string>(name: string, parser?: (val: string) => T) {\n const value = queryString.parse<{ [name: string]: string | undefined }>()[\n name\n ];\n\n if (parser == null || value == null) {\n return value;\n } else {\n return parser(value);\n }\n}\n\n/**\n * @description 기존 쿼리 스트링에 새로운 쿼리 스트링을 추가합니다.\n * @example setQueryString({ qs: '?a=1', key: 'b', value: '2' }) // '?a=1&b=2'\n */\nfunction setQueryString({\n qs,\n key,\n value,\n}: {\n qs: string;\n key: string;\n value: string;\n}) {\n const parsed = parseQueryString(qs);\n\n return createQueryString({\n ...parsed,\n [key]: value,\n });\n}\n\nexport const queryString = {\n create: createQueryString,\n parse: parseQueryString,\n get: getQueryString,\n set: setQueryString,\n};\n"],"mappings":";AAKA,SAAS,wBAAwB,QAA6B;AAC5D,SACE,IAAI;AAAA,IACF,OAAO,QAAQ,MAAM,EAClB,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,IAAI,EACnC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AACrB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,eAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,MAClC;AACA,aAAO,CAAC,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,CAAC,EACA,KAAK;AAAA,EACV,EACG,SAAS,EAET,QAAQ,OAAO,KAAK;AAE3B;AAOA,SAAS,kBAAkB,QAA6B;AACtD,QAAMA,eAAc,wBAAwB,MAAM;AAElD,MAAIA,iBAAgB,IAAI;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,IAAIA,YAAW;AACxB;AAMA,SAAS,YACP,UACA;AACA,QAAM,SAAiD,CAAC;AAExD,aAAW,CAAC,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAG;AAC/C,QAAI,OAAO,GAAG,GAAG;AACf,UAAI,MAAM,QAAQ,OAAO,GAAG,CAAC,GAAG;AAC9B,QAAC,OAAO,GAAG,EAA6B,KAAK,KAAwB;AAAA,MACvE,OAAO;AACL,eAAO,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,KAAK;AAAA,MACnC;AAAA,IACF,OAAO;AACL,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAMA,SAAS,iBACPA,eAAsB,OAAO,aAAa,cAAc,SAAS,SAAS,IAClE;AACR,QAAM,QAAQA,aAAY,KAAK,EAAE,QAAQ,UAAU,EAAE;AAGrD,SAAO,YAAY,IAAI,gBAAgB,KAAK,CAAC;AAC/C;AAqBA,SAAS,eAA2B,MAAc,QAA6B;AAC7E,QAAM,QAAQ,YAAY,MAA8C,EACtE,IACF;AAEA,MAAI,UAAU,QAAQ,SAAS,MAAM;AACnC,WAAO;AAAA,EACT,OAAO;AACL,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAMA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,SAAS,iBAAiB,EAAE;AAElC,SAAO,kBAAkB;AAAA,IACvB,GAAG;AAAA,IACH,CAAC,GAAG,GAAG;AAAA,EACT,CAAC;AACH;AAEO,IAAM,cAAc;AAAA,EACzB,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AACP;","names":["queryString"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/coerceCssPixelValue.ts"],"sourcesContent":["export type CSSPixelValue = string | number;\n\nexport function coerceCssPixelValue(value: CSSPixelValue): string {\n return typeof value === 'string' ? value : `${value}px`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,oBAAoB,OAA8B;AAChE,SAAO,OAAO,UAAU,WAAW,QAAQ,GAAG;AAChD;","names":[]}
1
+ {"version":3,"sources":["../src/coerceCssPixelValue.ts"],"sourcesContent":["export type CSSPixelValue = string | number;\n\nexport function coerceCssPixelValue(value: CSSPixelValue): string {\n return typeof value === 'string' ? value : `${value}px`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,oBAAoB,OAA8B;AAChE,SAAO,OAAO,UAAU,WAAW,QAAQ,GAAG,KAAK;AACrD;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  coerceCssPixelValue
3
- } from "./chunk-T7K7QYTL.mjs";
3
+ } from "./chunk-OQ3L65JI.mjs";
4
4
  export {
5
5
  coerceCssPixelValue
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/createContext.tsx"],"sourcesContent":["import {\n useMemo,\n createContext as createContextRaw,\n useContext as useContextRaw,\n type PropsWithChildren,\n} from 'react';\n\nexport function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = createContextRaw<ContextValueType | undefined>(\n defaultContext\n );\n\n function Provider(props: PropsWithChildren<ContextValueType>) {\n const { children, ...contextValues } = props;\n\n const value = useMemo(\n () => contextValues,\n [contextValues]\n ) as ContextValueType;\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n }\n\n function useContext(consumerName: string) {\n const context = useContextRaw(Context);\n if (context == null) {\n throw new Error(\n `${consumerName}은 ${rootComponentName}하위에서 사용해야 합니다.`\n );\n }\n\n return context;\n }\n\n Provider.displayName = `${rootComponentName}Provider`;\n return [Provider, useContext] as const;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;AAkBI;AAhBJ,SAAS,cACd,mBACA,gBACA;AACA,QAAM,cAAU,aAAAA;AAAA,IACd;AAAA,EACF;AAEA,WAAS,SAAS,OAA4C;AAC5D,UAAM,EAAE,UAAU,GAAG,cAAc,IAAI;AAEvC,UAAM,YAAQ;AAAA,MACZ,MAAM;AAAA,MACN,CAAC,aAAa;AAAA,IAChB;AAEA,WAAO,4CAAC,QAAQ,UAAR,EAAiB,OAAe,UAAS;AAAA,EACnD;AAEA,WAAS,WAAW,cAAsB;AACxC,UAAM,cAAU,aAAAC,YAAc,OAAO;AACrC,QAAI,WAAW,MAAM;AACnB,YAAM,IAAI;AAAA,QACR,GAAG,sBAAiB;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,GAAG;AAC1B,SAAO,CAAC,UAAU,UAAU;AAC9B;","names":["createContextRaw","useContextRaw"]}
1
+ {"version":3,"sources":["../src/createContext.tsx"],"sourcesContent":["import {\n useMemo,\n createContext as createContextRaw,\n useContext as useContextRaw,\n type PropsWithChildren,\n} from 'react';\n\nexport function createContext<ContextValueType extends object | null>(\n rootComponentName: string,\n defaultContext?: ContextValueType\n) {\n const Context = createContextRaw<ContextValueType | undefined>(\n defaultContext\n );\n\n function Provider(props: PropsWithChildren<ContextValueType>) {\n const { children, ...contextValues } = props;\n\n const value = useMemo(\n () => contextValues,\n [contextValues]\n ) as ContextValueType;\n\n return <Context.Provider value={value}>{children}</Context.Provider>;\n }\n\n function useContext(consumerName: string) {\n const context = useContextRaw(Context);\n if (context == null) {\n throw new Error(\n `${consumerName}은 ${rootComponentName}하위에서 사용해야 합니다.`\n );\n }\n\n return context;\n }\n\n Provider.displayName = `${rootComponentName}Provider`;\n return [Provider, useContext] as const;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;AAkBI;AAhBJ,SAAS,cACd,mBACA,gBACA;AACA,QAAM,cAAU,aAAAA;AAAA,IACd;AAAA,EACF;AAEA,WAAS,SAAS,OAA4C;AAC5D,UAAM,EAAE,UAAU,GAAG,cAAc,IAAI;AAEvC,UAAM,YAAQ;AAAA,MACZ,MAAM;AAAA,MACN,CAAC,aAAa;AAAA,IAChB;AAEA,WAAO,4CAAC,QAAQ,UAAR,EAAiB,OAAe,UAAS;AAAA,EACnD;AAEA,WAAS,WAAW,cAAsB;AACxC,UAAM,cAAU,aAAAC,YAAc,OAAO;AACrC,QAAI,WAAW,MAAM;AACnB,YAAM,IAAI;AAAA,QACR,GAAG,YAAY,UAAK,iBAAiB;AAAA,MACvC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,WAAS,cAAc,GAAG,iBAAiB;AAC3C,SAAO,CAAC,UAAU,UAAU;AAC9B;","names":["createContextRaw","useContextRaw"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createContext
3
- } from "./chunk-Z4QPISK7.mjs";
3
+ } from "./chunk-3BSCIHE2.mjs";
4
4
  export {
5
5
  createContext
6
6
  };
package/dist/ellipsis.js CHANGED
@@ -27,8 +27,8 @@ module.exports = __toCommonJS(ellipsis_exports);
27
27
  var import_styled_components = require("styled-components");
28
28
  var ellipsis = import_styled_components.css`
29
29
  overflow: hidden;
30
- white-space: nowrap;
31
30
  text-overflow: ellipsis;
31
+ white-space: nowrap;
32
32
  `;
33
33
  var multiLineEllipsis = ({ line }) => import_styled_components.css`
34
34
  display: -webkit-box;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ellipsis.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nexport type MultiLineEllipsisProps = {\n line: number;\n};\n\nexport const ellipsis = css`\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n`;\n\nexport const multiLineEllipsis = ({ line }: MultiLineEllipsisProps) => css`\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: ${line};\n -webkit-box-orient: vertical;\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAoB;AAMb,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAMjB,IAAM,oBAAoB,CAAC,EAAE,KAAK,MAA8B;AAAA;AAAA;AAAA;AAAA,wBAI/C;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../src/ellipsis.ts"],"sourcesContent":["import { css } from 'styled-components';\n\nexport type MultiLineEllipsisProps = {\n line: number;\n};\n\nexport const ellipsis = css`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nexport const multiLineEllipsis = ({ line }: MultiLineEllipsisProps) => css`\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n -webkit-line-clamp: ${line};\n -webkit-box-orient: vertical;\n`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAoB;AAMb,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAMjB,IAAM,oBAAoB,CAAC,EAAE,KAAK,MAA8B;AAAA;AAAA;AAAA;AAAA,wBAI/C,IAAI;AAAA;AAAA;","names":[]}
package/dist/ellipsis.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ellipsis,
3
3
  multiLineEllipsis
4
- } from "./chunk-XBGZ3YNL.mjs";
4
+ } from "./chunk-FTMJVXXH.mjs";
5
5
  export {
6
6
  ellipsis,
7
7
  multiLineEllipsis
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/getVar.ts"],"sourcesContent":["export type VariableType = `--${string}`;\n\nexport function getVar(variable: VariableType, defaultValue?: string) {\n if (defaultValue) {\n return `var(${variable}, ${defaultValue})`;\n }\n\n return `var(${variable})`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,OAAO,UAAwB,cAAuB;AACpE,MAAI,cAAc;AAChB,WAAO,OAAO,aAAa;AAAA,EAC7B;AAEA,SAAO,OAAO;AAChB;","names":[]}
1
+ {"version":3,"sources":["../src/getVar.ts"],"sourcesContent":["export type VariableType = `--${string}`;\n\nexport function getVar(variable: VariableType, defaultValue?: string) {\n if (defaultValue) {\n return `var(${variable}, ${defaultValue})`;\n }\n\n return `var(${variable})`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,OAAO,UAAwB,cAAuB;AACpE,MAAI,cAAc;AAChB,WAAO,OAAO,QAAQ,KAAK,YAAY;AAAA,EACzC;AAEA,SAAO,OAAO,QAAQ;AACxB;","names":[]}
package/dist/getVar.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getVar
3
- } from "./chunk-WHYNBO2G.mjs";
3
+ } from "./chunk-Z4UXDD2C.mjs";
4
4
  export {
5
5
  getVar
6
6
  };
@@ -95,8 +95,7 @@ var JONGSEONGS = [
95
95
  // src/hasBatchim.ts
96
96
  function hasBatchim(str) {
97
97
  const lastChar = str[str.length - 1];
98
- if (!lastChar)
99
- return false;
98
+ if (!lastChar) return false;
100
99
  const charCode = lastChar.charCodeAt(0);
101
100
  if (charCode < COMPLETE_HANGUL_START_CHARCODE || charCode > COMPLETE_HANGUL_END_CHARCODE) {
102
101
  return false;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hasBatchim.ts","../src/constants/josa.ts"],"sourcesContent":["import {\n COMPLETE_HANGUL_END_CHARCODE,\n COMPLETE_HANGUL_START_CHARCODE,\n NUMBER_OF_JONGSEONG,\n} from './constants/josa';\n\n/**\n * 한글 음절의 받침 유무를 확인합니다.\n * @param str - 검사할 문자열\n * @returns 받침이 있으면 true, 없으면 false\n */\nexport function hasBatchim(str: string): boolean {\n const lastChar = str[str.length - 1];\n if (!lastChar) return false;\n\n const charCode = lastChar.charCodeAt(0);\n\n // 한글 완성형 문자인지 확인\n if (\n charCode < COMPLETE_HANGUL_START_CHARCODE ||\n charCode > COMPLETE_HANGUL_END_CHARCODE\n ) {\n return false;\n }\n\n // 받침 코드 계산\n const batchimCode =\n (charCode - COMPLETE_HANGUL_START_CHARCODE) % NUMBER_OF_JONGSEONG;\n\n return batchimCode > 0; // 받침이 있으면 true\n}\n","export const COMPLETE_HANGUL_START_CHARCODE = '가'.charCodeAt(0);\nexport const COMPLETE_HANGUL_END_CHARCODE = '힣'.charCodeAt(0);\n\nexport const NUMBER_OF_JONGSEONG = 28;\nexport const NUMBER_OF_JUNGSEONG = 21;\n\nconst DISASSEMBLED_CONSONANTS_BY_CONSONANT = {\n '': '',\n ㄱ: 'ㄱ',\n ㄲ: 'ㄲ',\n ㄳ: 'ㄱㅅ',\n ㄴ: 'ㄴ',\n ㄵ: 'ㄴㅈ',\n ㄶ: 'ㄴㅎ',\n ㄷ: 'ㄷ',\n ㄸ: 'ㄸ',\n ㄹ: 'ㄹ',\n ㄺ: 'ㄹㄱ',\n ㄻ: 'ㄹㅁ',\n ㄼ: 'ㄹㅂ',\n ㄽ: 'ㄹㅅ',\n ㄾ: 'ㄹㅌ',\n ㄿ: 'ㄹㅍ',\n ㅀ: 'ㄹㅎ',\n ㅁ: 'ㅁ',\n ㅂ: 'ㅂ',\n ㅃ: 'ㅃ',\n ㅄ: 'ㅂㅅ',\n ㅅ: 'ㅅ',\n ㅆ: 'ㅆ',\n ㅇ: 'ㅇ',\n ㅈ: 'ㅈ',\n ㅉ: 'ㅉ',\n ㅊ: 'ㅊ',\n ㅋ: 'ㅋ',\n ㅌ: 'ㅌ',\n ㅍ: 'ㅍ',\n ㅎ: 'ㅎ',\n} as const;\n\nexport const JONGSEONGS = (\n [\n '',\n 'ㄱ',\n 'ㄲ',\n 'ㄳ',\n 'ㄴ',\n 'ㄵ',\n 'ㄶ',\n 'ㄷ',\n 'ㄹ',\n 'ㄺ',\n 'ㄻ',\n 'ㄼ',\n 'ㄽ',\n 'ㄾ',\n 'ㄿ',\n 'ㅀ',\n 'ㅁ',\n 'ㅂ',\n 'ㅄ',\n 'ㅅ',\n 'ㅆ',\n 'ㅇ',\n 'ㅈ',\n 'ㅊ',\n 'ㅋ',\n 'ㅌ',\n 'ㅍ',\n 'ㅎ',\n ] as const\n).map((consonant) => DISASSEMBLED_CONSONANTS_BY_CONSONANT[consonant]);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,iCAAiC,SAAI,WAAW,CAAC;AACvD,IAAM,+BAA+B,SAAI,WAAW,CAAC;AAErD,IAAM,sBAAsB;AAGnC,IAAM,uCAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AACL;AAEO,IAAM,aACX;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EACA,IAAI,CAAC,cAAc,qCAAqC,SAAS,CAAC;;;AD5D7D,SAAS,WAAW,KAAsB;AAC/C,QAAM,WAAW,IAAI,IAAI,SAAS,CAAC;AACnC,MAAI,CAAC;AAAU,WAAO;AAEtB,QAAM,WAAW,SAAS,WAAW,CAAC;AAGtC,MACE,WAAW,kCACX,WAAW,8BACX;AACA,WAAO;AAAA,EACT;AAGA,QAAM,eACH,WAAW,kCAAkC;AAEhD,SAAO,cAAc;AACvB;","names":[]}
1
+ {"version":3,"sources":["../src/hasBatchim.ts","../src/constants/josa.ts"],"sourcesContent":["import {\n COMPLETE_HANGUL_END_CHARCODE,\n COMPLETE_HANGUL_START_CHARCODE,\n NUMBER_OF_JONGSEONG,\n} from './constants/josa';\n\n/**\n * 한글 음절의 받침 유무를 확인합니다.\n * @param str - 검사할 문자열\n * @returns 받침이 있으면 true, 없으면 false\n */\nexport function hasBatchim(str: string): boolean {\n const lastChar = str[str.length - 1];\n if (!lastChar) return false;\n\n const charCode = lastChar.charCodeAt(0);\n\n // 한글 완성형 문자인지 확인\n if (\n charCode < COMPLETE_HANGUL_START_CHARCODE ||\n charCode > COMPLETE_HANGUL_END_CHARCODE\n ) {\n return false;\n }\n\n // 받침 코드 계산\n const batchimCode =\n (charCode - COMPLETE_HANGUL_START_CHARCODE) % NUMBER_OF_JONGSEONG;\n\n return batchimCode > 0; // 받침이 있으면 true\n}\n","export const COMPLETE_HANGUL_START_CHARCODE = '가'.charCodeAt(0);\nexport const COMPLETE_HANGUL_END_CHARCODE = '힣'.charCodeAt(0);\n\nexport const NUMBER_OF_JONGSEONG = 28;\nexport const NUMBER_OF_JUNGSEONG = 21;\n\nconst DISASSEMBLED_CONSONANTS_BY_CONSONANT = {\n '': '',\n ㄱ: 'ㄱ',\n ㄲ: 'ㄲ',\n ㄳ: 'ㄱㅅ',\n ㄴ: 'ㄴ',\n ㄵ: 'ㄴㅈ',\n ㄶ: 'ㄴㅎ',\n ㄷ: 'ㄷ',\n ㄸ: 'ㄸ',\n ㄹ: 'ㄹ',\n ㄺ: 'ㄹㄱ',\n ㄻ: 'ㄹㅁ',\n ㄼ: 'ㄹㅂ',\n ㄽ: 'ㄹㅅ',\n ㄾ: 'ㄹㅌ',\n ㄿ: 'ㄹㅍ',\n ㅀ: 'ㄹㅎ',\n ㅁ: 'ㅁ',\n ㅂ: 'ㅂ',\n ㅃ: 'ㅃ',\n ㅄ: 'ㅂㅅ',\n ㅅ: 'ㅅ',\n ㅆ: 'ㅆ',\n ㅇ: 'ㅇ',\n ㅈ: 'ㅈ',\n ㅉ: 'ㅉ',\n ㅊ: 'ㅊ',\n ㅋ: 'ㅋ',\n ㅌ: 'ㅌ',\n ㅍ: 'ㅍ',\n ㅎ: 'ㅎ',\n} as const;\n\nexport const JONGSEONGS = (\n [\n '',\n 'ㄱ',\n 'ㄲ',\n 'ㄳ',\n 'ㄴ',\n 'ㄵ',\n 'ㄶ',\n 'ㄷ',\n 'ㄹ',\n 'ㄺ',\n 'ㄻ',\n 'ㄼ',\n 'ㄽ',\n 'ㄾ',\n 'ㄿ',\n 'ㅀ',\n 'ㅁ',\n 'ㅂ',\n 'ㅄ',\n 'ㅅ',\n 'ㅆ',\n 'ㅇ',\n 'ㅈ',\n 'ㅊ',\n 'ㅋ',\n 'ㅌ',\n 'ㅍ',\n 'ㅎ',\n ] as const\n).map((consonant) => DISASSEMBLED_CONSONANTS_BY_CONSONANT[consonant]);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,iCAAiC,SAAI,WAAW,CAAC;AACvD,IAAM,+BAA+B,SAAI,WAAW,CAAC;AAErD,IAAM,sBAAsB;AAGnC,IAAM,uCAAuC;AAAA,EAC3C,IAAI;AAAA,EACJ,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AAAA,EACH,QAAG;AACL;AAEO,IAAM,aACX;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EACA,IAAI,CAAC,cAAc,qCAAqC,SAAS,CAAC;;;AD5D7D,SAAS,WAAW,KAAsB;AAC/C,QAAM,WAAW,IAAI,IAAI,SAAS,CAAC;AACnC,MAAI,CAAC,SAAU,QAAO;AAEtB,QAAM,WAAW,SAAS,WAAW,CAAC;AAGtC,MACE,WAAW,kCACX,WAAW,8BACX;AACA,WAAO;AAAA,EACT;AAGA,QAAM,eACH,WAAW,kCAAkC;AAEhD,SAAO,cAAc;AACvB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hasBatchim
3
- } from "./chunk-C7VOPXT2.mjs";
3
+ } from "./chunk-KMMS4XJ6.mjs";
4
4
  import "./chunk-GQPOYY4X.mjs";
5
5
  export {
6
6
  hasBatchim
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hexToRgba.ts"],"sourcesContent":["export type HexToRgbaProps = { hex: string; alpha?: number };\n\nfunction parseHexToDecimal(hex: string): number {\n return parseInt(hex, 16);\n}\n\nfunction validateHex(hex: string): string {\n const match = /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.exec(hex);\n if (!match) {\n throw new Error(\n `Invalid hex value: \"${hex}\". Expected formats: \"#RGB\", \"RGB\", \"#RRGGBB\", or \"RRGGBB\".`\n );\n }\n return match[1];\n}\n\nfunction expandHex(hex: string): string {\n return hex.length === 3\n ? hex\n .split('')\n .map((char) => char + char)\n .join('')\n : hex;\n}\n\nfunction isValidAlpha(alpha: number): boolean {\n return alpha >= 0 && alpha <= 1;\n}\n\nexport function hexToRgba({ hex, alpha = 1 }: HexToRgbaProps): string {\n if (!isValidAlpha(alpha)) {\n throw new Error(\n `Invalid alpha value. Must be between 0 and 1, received: ${alpha}`\n );\n }\n\n const validatedHex = validateHex(hex);\n const expandedHex = expandHex(validatedHex);\n\n const r = parseHexToDecimal(expandedHex.slice(0, 2));\n const g = parseHexToDecimal(expandedHex.slice(2, 4));\n const b = parseHexToDecimal(expandedHex.slice(4, 6));\n\n return `rgba(${r},${g},${b},${alpha})`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,kBAAkB,KAAqB;AAC9C,SAAO,SAAS,KAAK,EAAE;AACzB;AAEA,SAAS,YAAY,KAAqB;AACxC,QAAM,QAAQ,sCAAsC,KAAK,GAAG;AAC5D,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR,uBAAuB;AAAA,IACzB;AAAA,EACF;AACA,SAAO,MAAM,CAAC;AAChB;AAEA,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,WAAW,IAClB,IACG,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,OAAO,IAAI,EACzB,KAAK,EAAE,IACV;AACN;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,SAAS,KAAK,SAAS;AAChC;AAEO,SAAS,UAAU,EAAE,KAAK,QAAQ,EAAE,GAA2B;AACpE,MAAI,CAAC,aAAa,KAAK,GAAG;AACxB,UAAM,IAAI;AAAA,MACR,2DAA2D;AAAA,IAC7D;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,GAAG;AACpC,QAAM,cAAc,UAAU,YAAY;AAE1C,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AACnD,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AACnD,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AAEnD,SAAO,QAAQ,KAAK,KAAK,KAAK;AAChC;","names":[]}
1
+ {"version":3,"sources":["../src/hexToRgba.ts"],"sourcesContent":["export type HexToRgbaProps = { hex: string; alpha?: number };\n\nfunction parseHexToDecimal(hex: string): number {\n return parseInt(hex, 16);\n}\n\nfunction validateHex(hex: string): string {\n const match = /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.exec(hex);\n if (!match) {\n throw new Error(\n `Invalid hex value: \"${hex}\". Expected formats: \"#RGB\", \"RGB\", \"#RRGGBB\", or \"RRGGBB\".`\n );\n }\n return match[1];\n}\n\nfunction expandHex(hex: string): string {\n return hex.length === 3\n ? hex\n .split('')\n .map((char) => char + char)\n .join('')\n : hex;\n}\n\nfunction isValidAlpha(alpha: number): boolean {\n return alpha >= 0 && alpha <= 1;\n}\n\nexport function hexToRgba({ hex, alpha = 1 }: HexToRgbaProps): string {\n if (!isValidAlpha(alpha)) {\n throw new Error(\n `Invalid alpha value. Must be between 0 and 1, received: ${alpha}`\n );\n }\n\n const validatedHex = validateHex(hex);\n const expandedHex = expandHex(validatedHex);\n\n const r = parseHexToDecimal(expandedHex.slice(0, 2));\n const g = parseHexToDecimal(expandedHex.slice(2, 4));\n const b = parseHexToDecimal(expandedHex.slice(4, 6));\n\n return `rgba(${r},${g},${b},${alpha})`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,SAAS,kBAAkB,KAAqB;AAC9C,SAAO,SAAS,KAAK,EAAE;AACzB;AAEA,SAAS,YAAY,KAAqB;AACxC,QAAM,QAAQ,sCAAsC,KAAK,GAAG;AAC5D,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR,uBAAuB,GAAG;AAAA,IAC5B;AAAA,EACF;AACA,SAAO,MAAM,CAAC;AAChB;AAEA,SAAS,UAAU,KAAqB;AACtC,SAAO,IAAI,WAAW,IAClB,IACG,MAAM,EAAE,EACR,IAAI,CAAC,SAAS,OAAO,IAAI,EACzB,KAAK,EAAE,IACV;AACN;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,SAAS,KAAK,SAAS;AAChC;AAEO,SAAS,UAAU,EAAE,KAAK,QAAQ,EAAE,GAA2B;AACpE,MAAI,CAAC,aAAa,KAAK,GAAG;AACxB,UAAM,IAAI;AAAA,MACR,2DAA2D,KAAK;AAAA,IAClE;AAAA,EACF;AAEA,QAAM,eAAe,YAAY,GAAG;AACpC,QAAM,cAAc,UAAU,YAAY;AAE1C,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AACnD,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AACnD,QAAM,IAAI,kBAAkB,YAAY,MAAM,GAAG,CAAC,CAAC;AAEnD,SAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK;AACrC;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hexToRgba
3
- } from "./chunk-OIJ4AVT7.mjs";
3
+ } from "./chunk-KIUJWSBE.mjs";
4
4
  export {
5
5
  hexToRgba
6
6
  };
@@ -0,0 +1,250 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import React__default, { ReactNode, FC, PropsWithChildren, HTMLAttributes, CSSProperties, ComponentPropsWithoutRef } from 'react';
4
+ import * as styled_components from 'styled-components';
5
+
6
+ type ChooseWhenProps = {
7
+ condition: boolean;
8
+ children: ReactNode;
9
+ };
10
+ type ChooseProps = {
11
+ children: ReactNode;
12
+ };
13
+ type ChooseOtherwiseProps = {
14
+ children: ReactNode;
15
+ };
16
+ declare function Choose({ children }: ChooseProps): string | number | Iterable<ReactNode> | react_jsx_runtime.JSX.Element;
17
+ declare namespace Choose {
18
+ var When: FC<ChooseWhenProps>;
19
+ var Otherwise: FC<ChooseOtherwiseProps>;
20
+ }
21
+
22
+ declare function composeEventHandlers<E>(originalEventHandler?: (event: E) => void, ourEventHandler?: (event: E) => void, { checkForDefaultPrevented }?: {
23
+ checkForDefaultPrevented?: boolean | undefined;
24
+ }): (event: E) => void;
25
+
26
+ declare function createContext<ContextValueType extends object | null>(rootComponentName: string, defaultContext?: ContextValueType): readonly [{
27
+ (props: PropsWithChildren<ContextValueType>): react_jsx_runtime.JSX.Element;
28
+ displayName: string;
29
+ }, (consumerName: string) => NonNullable<ContextValueType>];
30
+
31
+ type VariableType = `--${string}`;
32
+ declare function getVar(variable: VariableType, defaultValue?: string): string;
33
+
34
+ type IfProps = {
35
+ condition: boolean;
36
+ children: ReactNode;
37
+ };
38
+ declare function If(props: IfProps): react_jsx_runtime.JSX.Element | null;
39
+
40
+ type CSSPixelValue = string | number;
41
+
42
+ type Justify = CSSProperties['justifyContent'];
43
+ type Align = CSSProperties['alignItems'];
44
+ type Direction = CSSProperties['flexDirection'];
45
+ type FlexProps = HTMLAttributes<HTMLDivElement> & {
46
+ gap?: CSSPixelValue;
47
+ justify?: Justify;
48
+ align?: Align;
49
+ direction?: Direction;
50
+ };
51
+ declare const Flex: React.NamedExoticComponent<FlexProps>;
52
+
53
+ type MultiLineEllipsisProps = {
54
+ line: number;
55
+ };
56
+ declare const ellipsis: styled_components.RuleSet<object>;
57
+ declare const multiLineEllipsis: ({ line }: MultiLineEllipsisProps) => styled_components.RuleSet<object>;
58
+
59
+ type HexToRgbaProps = {
60
+ hex: string;
61
+ alpha?: number;
62
+ };
63
+ declare function hexToRgba({ hex, alpha }: HexToRgbaProps): string;
64
+
65
+ type JosaOption = '이/가' | '을/를' | '은/는';
66
+ type ExtractJosaOption<T> = T extends `${infer A}/${infer B}` ? A | B : never;
67
+ type JosaProps<U extends JosaOption> = {
68
+ word: string;
69
+ josa: U;
70
+ };
71
+ /**
72
+ * 주어진 단어와 조사 옵션을 기반으로 올바른 조사를 반환합니다.
73
+ * @returns 단어와 올바른 조사가 결합된 문자열
74
+ */
75
+ declare function josa<U extends JosaOption>(props: JosaProps<U>): `${JosaProps<U>['word']}${ExtractJosaOption<U>}`;
76
+ declare namespace josa {
77
+ var pick: typeof josaPicker;
78
+ }
79
+ /**
80
+ * 주어진 단어와 조사 옵션을 기반으로 올바른 조사를 선택합니다.
81
+ * @returns 올바른 조사
82
+ */
83
+ declare function josaPicker<U extends JosaOption>(props: JosaProps<U>): ExtractJosaOption<U>;
84
+
85
+ /**
86
+ *
87
+ * @see 이메일 주소가 RFC 5322 표준을 따르는지 검사합니다. {@link https://emailregex.com/}
88
+ */
89
+ declare function isEmail(email: string): boolean;
90
+ declare function isPhoneNumber(phoneNumber: string): boolean;
91
+ declare const Validate: {
92
+ email: typeof isEmail;
93
+ phoneNumber: typeof isPhoneNumber;
94
+ };
95
+
96
+ type AxisDirection = 'vertical' | 'horizontal';
97
+ type SpacingProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'> & {
98
+ direction?: AxisDirection;
99
+ size: CSSPixelValue;
100
+ };
101
+ declare const Spacing: React.NamedExoticComponent<SpacingProps>;
102
+
103
+ type SafeAreaCssValueProps = {
104
+ top?: CSSPixelValue;
105
+ bottom?: CSSPixelValue;
106
+ left?: CSSPixelValue;
107
+ right?: CSSPixelValue;
108
+ };
109
+ declare const useSafeArea: ({ top: T, bottom: B, left: L, right: R, }?: SafeAreaCssValueProps) => {
110
+ top: string;
111
+ bottom: string;
112
+ left: string;
113
+ right: string;
114
+ };
115
+
116
+ type SafeAreaProps<T extends React__default.ElementType = 'div'> = {
117
+ as?: T;
118
+ children: ReactNode;
119
+ } & ComponentPropsWithoutRef<T>;
120
+ declare const SafeArea: {
121
+ <T extends React__default.ElementType = "div">({ as, children, ...props }: SafeAreaProps<T>): react_jsx_runtime.JSX.Element;
122
+ Top: React__default.NamedExoticComponent<Omit<Omit<React__default.HTMLAttributes<HTMLDivElement>, "children"> & {
123
+ direction?: "horizontal" | "vertical";
124
+ size: CSSPixelValue;
125
+ }, "size">>;
126
+ Bottom: React__default.NamedExoticComponent<Omit<Omit<React__default.HTMLAttributes<HTMLDivElement>, "children"> & {
127
+ direction?: "horizontal" | "vertical";
128
+ size: CSSPixelValue;
129
+ }, "size">>;
130
+ };
131
+
132
+ /**
133
+ * @description 물음표를 포함한 쿼리 스트링을 생성합니다.
134
+ * @example createQueryString({ a: 1, b: 2, c: 3 }) // '?a=1&b=2&c=3'
135
+ */
136
+ declare function createQueryString(params: Record<string, any>): string;
137
+ /**
138
+ * @description 쿼리 스트링을 객체로 변환합니다.
139
+ * @example parseQueryString('?a=1&b=2&c=3') // { a: '1', b: '2', c: '3' }
140
+ */
141
+ declare function parseQueryString<Result = Record<string, string>>(queryString?: string): Result;
142
+ /**
143
+ * @description 쿼리 스트링에서 특정 키의 값을 가져옵니다.
144
+ *
145
+ * @param name 가져올 쿼리 스트링의 키
146
+ * @param parser 가져온 값을 파싱할 함수
147
+ * @returns 파싱된 값
148
+ *
149
+ * @example
150
+ * url: 'http://example.com/?a=1'
151
+ * getQueryString('a') // '1'
152
+ * getQueryString('a', parseInt) // 1
153
+ * getQueryString('b') // undefined
154
+ * getQueryString('b', parseInt) // undefined
155
+ */
156
+ declare function getQueryString(name: string): string | undefined;
157
+ declare function getQueryString<T>(name: string, parser: (val: string) => T): T | undefined;
158
+ /**
159
+ * @description 기존 쿼리 스트링에 새로운 쿼리 스트링을 추가합니다.
160
+ * @example setQueryString({ qs: '?a=1', key: 'b', value: '2' }) // '?a=1&b=2'
161
+ */
162
+ declare function setQueryString({ qs, key, value, }: {
163
+ qs: string;
164
+ key: string;
165
+ value: string;
166
+ }): string;
167
+ declare const queryString: {
168
+ create: typeof createQueryString;
169
+ parse: typeof parseQueryString;
170
+ get: typeof getQueryString;
171
+ set: typeof setQueryString;
172
+ };
173
+
174
+ type DebouncedFunction<F extends (...args: any[]) => void> = {
175
+ (...args: Parameters<F>): void;
176
+ /**
177
+ * 디바운스된 함수의 모든 예약된 실행을 취소합니다.
178
+ * 이 메서드는 활성 타이머를 제거하고 저장된 컨텍스트나 인수를 재설정합니다.
179
+ */
180
+ cancel: () => void;
181
+ /**
182
+ * 예약된 실행이 있는 경우 디바운스된 함수를 즉시 호출합니다.
183
+ * 이 메서드는 현재 타이머를 취소하여 함수가 즉시 실행되도록 합니다.
184
+ */
185
+ flush: () => void;
186
+ };
187
+ /**
188
+ * @example
189
+ * const debouncedFunction = debounce(() => {
190
+ * console.log('Function executed');
191
+ * }, 1000);
192
+ *
193
+ */
194
+ declare function debounce<F extends (...args: any[]) => void>(func: F, debounceMs: number): DebouncedFunction<F>;
195
+
196
+ type Value = number | string;
197
+ declare const Format: {
198
+ phone: typeof formatPhoneNumber;
199
+ removeHyphen: typeof removeHyphen;
200
+ commaize: typeof formatCommaizeNumber;
201
+ padTime: typeof padTime;
202
+ };
203
+ /**
204
+ * 숫자를 전화번호 형식으로 변환합니다.
205
+ * @example Format.phone('01012345678') // '010-1234-5678'
206
+ */
207
+ declare function formatPhoneNumber(phoneNumber: string): string;
208
+ /**
209
+ * 하이픈을 제거합니다.
210
+ * @example Format.removeHyphen('01012345678') // '01012345678'
211
+ */
212
+ declare function removeHyphen(value: string): string;
213
+ /**
214
+ * 숫자를 콤마로 구분합니다.
215
+ * https://www.slash.page/ko/libraries/common/utils/src/Numbers_commaizeNumber.i18n
216
+ *
217
+ * @example
218
+ * Format.commaize('123456') // '123,456'
219
+ * Format.commaize(123456) // '123,456'
220
+ */
221
+ declare function formatCommaizeNumber(value: Value): string;
222
+ /**
223
+ * 숫자를 2자리 수 형태로 변환합니다.
224
+ * @example Format.padTime(9) // '09'
225
+ */
226
+ declare function padTime(value: Value): string;
227
+
228
+ type Mode = 'H' | 'C' | 'W';
229
+ type Wind = 1 | 2 | 3;
230
+ type AirLevel = 1 | 2 | 3 | 4 | 5;
231
+ type UserLevel = '1' | '2' | '3' | '4';
232
+ type Language = 'en' | 'ko';
233
+ declare function formatModeName(mode: Mode, customMapping?: Record<string, string>): string;
234
+ declare function formatModeColor(mode: Mode, customMapping?: Record<string, string>): string;
235
+ declare function formatWind(wind: Wind, customMapping?: Record<string, string>): string;
236
+ declare function formatAirLevelName(level: AirLevel): string;
237
+ declare function formatAirLevelColor(level: AirLevel): string;
238
+ declare const DomainFormat: {
239
+ modeName: typeof formatModeName;
240
+ modeColor: typeof formatModeColor;
241
+ wind: typeof formatWind;
242
+ airLevelName: typeof formatAirLevelName;
243
+ airLevelColor: typeof formatAirLevelColor;
244
+ userLevel: ({ level, language }: {
245
+ level: UserLevel;
246
+ language?: Language;
247
+ }) => string;
248
+ };
249
+
250
+ export { type AirLevel, Choose, type ChooseOtherwiseProps, type ChooseProps, type ChooseWhenProps, type DebouncedFunction, DomainFormat, Flex, type FlexProps, Format, type HexToRgbaProps, If, type IfProps, type JosaProps, type Mode, type MultiLineEllipsisProps, SafeArea, type SafeAreaCssValueProps, type SafeAreaProps, Spacing, type SpacingProps, type UserLevel, Validate, type VariableType, type Wind, composeEventHandlers, createContext, debounce, ellipsis, getVar, hexToRgba, josa, multiLineEllipsis, queryString, useSafeArea };
package/dist/index.d.ts CHANGED
@@ -225,4 +225,26 @@ declare function formatCommaizeNumber(value: Value): string;
225
225
  */
226
226
  declare function padTime(value: Value): string;
227
227
 
228
- export { Choose, ChooseOtherwiseProps, ChooseProps, ChooseWhenProps, DebouncedFunction, Flex, FlexProps, Format, HexToRgbaProps, If, IfProps, JosaProps, MultiLineEllipsisProps, SafeArea, SafeAreaCssValueProps, SafeAreaProps, Spacing, SpacingProps, Validate, VariableType, composeEventHandlers, createContext, debounce, ellipsis, getVar, hexToRgba, josa, multiLineEllipsis, queryString, useSafeArea };
228
+ type Mode = 'H' | 'C' | 'W';
229
+ type Wind = 1 | 2 | 3;
230
+ type AirLevel = 1 | 2 | 3 | 4 | 5;
231
+ type UserLevel = '1' | '2' | '3' | '4';
232
+ type Language = 'en' | 'ko';
233
+ declare function formatModeName(mode: Mode, customMapping?: Record<string, string>): string;
234
+ declare function formatModeColor(mode: Mode, customMapping?: Record<string, string>): string;
235
+ declare function formatWind(wind: Wind, customMapping?: Record<string, string>): string;
236
+ declare function formatAirLevelName(level: AirLevel): string;
237
+ declare function formatAirLevelColor(level: AirLevel): string;
238
+ declare const DomainFormat: {
239
+ modeName: typeof formatModeName;
240
+ modeColor: typeof formatModeColor;
241
+ wind: typeof formatWind;
242
+ airLevelName: typeof formatAirLevelName;
243
+ airLevelColor: typeof formatAirLevelColor;
244
+ userLevel: ({ level, language }: {
245
+ level: UserLevel;
246
+ language?: Language;
247
+ }) => string;
248
+ };
249
+
250
+ export { type AirLevel, Choose, type ChooseOtherwiseProps, type ChooseProps, type ChooseWhenProps, type DebouncedFunction, DomainFormat, Flex, type FlexProps, Format, type HexToRgbaProps, If, type IfProps, type JosaProps, type Mode, type MultiLineEllipsisProps, SafeArea, type SafeAreaCssValueProps, type SafeAreaProps, Spacing, type SpacingProps, type UserLevel, Validate, type VariableType, type Wind, composeEventHandlers, createContext, debounce, ellipsis, getVar, hexToRgba, josa, multiLineEllipsis, queryString, useSafeArea };
package/dist/index.js CHANGED
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  Choose: () => Choose,
24
+ DomainFormat: () => DomainFormat,
24
25
  Flex: () => Flex,
25
26
  Format: () => Format,
26
27
  If: () => If,
@@ -159,8 +160,8 @@ var Container = import_styled_components.styled.div`
159
160
  var import_styled_components2 = require("styled-components");
160
161
  var ellipsis = import_styled_components2.css`
161
162
  overflow: hidden;
162
- white-space: nowrap;
163
163
  text-overflow: ellipsis;
164
+ white-space: nowrap;
164
165
  `;
165
166
  var multiLineEllipsis = ({ line }) => import_styled_components2.css`
166
167
  display: -webkit-box;
@@ -274,8 +275,7 @@ var JONGSEONGS = [
274
275
  // src/hasBatchim.ts
275
276
  function hasBatchim(str) {
276
277
  const lastChar = str[str.length - 1];
277
- if (!lastChar)
278
- return false;
278
+ if (!lastChar) return false;
279
279
  const charCode = lastChar.charCodeAt(0);
280
280
  if (charCode < COMPLETE_HANGUL_START_CHARCODE || charCode > COMPLETE_HANGUL_END_CHARCODE) {
281
281
  return false;
@@ -507,9 +507,105 @@ function formatCommaizeNumber(value) {
507
507
  function padTime(value) {
508
508
  return String(value).padStart(2, "0");
509
509
  }
510
+
511
+ // src/DomainFormat.ts
512
+ function formatModeName(mode, customMapping = {}) {
513
+ const defaultModeMapping = {
514
+ H: "\uB09C\uBC29",
515
+ C: "\uB0C9\uBC29",
516
+ W: "\uC1A1\uD48D"
517
+ };
518
+ const combinedMapping = { ...defaultModeMapping, ...customMapping };
519
+ if (!(mode in combinedMapping)) {
520
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uBAA8\uB4DC\uC785\uB2C8\uB2E4. mode: ${mode}`);
521
+ }
522
+ return combinedMapping[mode];
523
+ }
524
+ function formatModeColor(mode, customMapping = {}) {
525
+ const defaultColorMapping = {
526
+ H: "#e77676",
527
+ C: "#9fc6ff",
528
+ W: "#a8e379"
529
+ };
530
+ const combinedMapping = { ...defaultColorMapping, ...customMapping };
531
+ if (!(mode in combinedMapping)) {
532
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uBAA8\uB4DC\uC785\uB2C8\uB2E4. mode: ${mode}`);
533
+ }
534
+ return combinedMapping[mode];
535
+ }
536
+ function formatWind(wind, customMapping = {}) {
537
+ const defaultWindMapping = {
538
+ 1: "\uBBF8\uD48D",
539
+ 2: "\uC57D\uD48D",
540
+ 3: "\uAC15\uD48D"
541
+ };
542
+ const combinedMapping = { ...defaultWindMapping, ...customMapping };
543
+ if (!(wind in combinedMapping)) {
544
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uD48D\uB7C9\uC785\uB2C8\uB2E4. wind: ${wind}`);
545
+ }
546
+ return combinedMapping[wind];
547
+ }
548
+ function formatAirLevelName(level) {
549
+ const airLevelMapping = {
550
+ 1: "\uB9E4\uC6B0 \uB098\uC068",
551
+ 2: "\uB098\uC068",
552
+ 3: "\uBCF4\uD1B5",
553
+ 4: "\uC88B\uC74C",
554
+ 5: "\uB9E4\uC6B0 \uC88B\uC74C"
555
+ };
556
+ if (!(level in airLevelMapping)) {
557
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uB808\uBCA8\uC785\uB2C8\uB2E4. level: ${level}`);
558
+ }
559
+ return airLevelMapping[level];
560
+ }
561
+ function formatAirLevelColor(level) {
562
+ const colorMapping = {
563
+ 1: "#ff5d47",
564
+ 2: "#ff961c",
565
+ 3: "#ffca42",
566
+ 4: "#63ff60",
567
+ 5: "#49ffe9"
568
+ };
569
+ if (!(level in colorMapping)) {
570
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uB808\uBCA8\uC785\uB2C8\uB2E4. level: ${level}`);
571
+ }
572
+ return colorMapping[level];
573
+ }
574
+ var formatUserLevel = ({ level, language = "ko" }) => {
575
+ const userLevelMapping = {
576
+ en: {
577
+ "1": "MASTER",
578
+ "2": "MASTER KID",
579
+ "3": "SENIOR",
580
+ "4": "JUNIOR"
581
+ },
582
+ ko: {
583
+ "1": "\uB9C8\uC2A4\uD130",
584
+ "2": "\uB9C8\uC2A4\uD130\uD0A4\uC988",
585
+ "3": "\uC2DC\uB2C8\uC5B4",
586
+ "4": "\uC8FC\uB2C8\uC5B4"
587
+ }
588
+ };
589
+ if (!(language in userLevelMapping)) {
590
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uC5B8\uC5B4\uC785\uB2C8\uB2E4. language: ${language}`);
591
+ }
592
+ if (!(level in userLevelMapping[language])) {
593
+ throw new Error(`\uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 \uB808\uBCA8\uC785\uB2C8\uB2E4. level: ${level}`);
594
+ }
595
+ return userLevelMapping[language][level];
596
+ };
597
+ var DomainFormat = {
598
+ modeName: formatModeName,
599
+ modeColor: formatModeColor,
600
+ wind: formatWind,
601
+ airLevelName: formatAirLevelName,
602
+ airLevelColor: formatAirLevelColor,
603
+ userLevel: formatUserLevel
604
+ };
510
605
  // Annotate the CommonJS export names for ESM import in node:
511
606
  0 && (module.exports = {
512
607
  Choose,
608
+ DomainFormat,
513
609
  Flex,
514
610
  Format,
515
611
  If,