@yamada-ui/react 2.2.3-dev-20260622135744 → 2.2.3-dev-20260624122859
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.
- package/dist/cjs/components/accordion/use-accordion.cjs.map +1 -1
- package/dist/cjs/components/autocomplete/use-autocomplete.cjs.map +1 -1
- package/dist/cjs/components/calendar/use-calendar.cjs +1 -1
- package/dist/cjs/components/calendar/use-calendar.cjs.map +1 -1
- package/dist/cjs/components/carousel/carousel.cjs.map +1 -1
- package/dist/cjs/components/chart/chart.cjs.map +1 -1
- package/dist/cjs/components/chart/use-polar-chart.cjs.map +1 -1
- package/dist/cjs/components/checkbox/checkbox.cjs.map +1 -1
- package/dist/cjs/components/checkbox/use-checkbox-group.cjs.map +1 -1
- package/dist/cjs/components/checkbox-card/checkbox-card.cjs.map +1 -1
- package/dist/cjs/components/collapse/collapse.cjs.map +1 -1
- package/dist/cjs/components/color-picker/use-color-picker.cjs.map +1 -1
- package/dist/cjs/components/color-swatch/color-swatch-group.cjs.map +1 -1
- package/dist/cjs/components/date-picker/date-picker.cjs.map +1 -1
- package/dist/cjs/components/date-picker/use-date-picker.cjs +1 -1
- package/dist/cjs/components/date-picker/use-date-picker.cjs.map +1 -1
- package/dist/cjs/components/editable/use-editable.cjs.map +1 -1
- package/dist/cjs/components/field/field.cjs.map +1 -1
- package/dist/cjs/components/file-input/file-input.cjs.map +1 -1
- package/dist/cjs/components/flip/flip.cjs.map +1 -1
- package/dist/cjs/components/highlight/highlight.cjs.map +1 -1
- package/dist/cjs/components/indicator/indicator.cjs.map +1 -1
- package/dist/cjs/components/infinite-scroll-area/use-infinite-scroll.cjs.map +1 -1
- package/dist/cjs/components/input/input-group.cjs.map +1 -1
- package/dist/cjs/components/list/list.cjs.map +1 -1
- package/dist/cjs/components/menu/use-menu.cjs.map +1 -1
- package/dist/cjs/components/native-select/use-native-select.cjs.map +1 -1
- package/dist/cjs/components/native-table/native-table.cjs.map +1 -1
- package/dist/cjs/components/notice/notice.cjs.map +1 -1
- package/dist/cjs/components/number-input/use-number-input.cjs.map +1 -1
- package/dist/cjs/components/pagination/pagination.cjs.map +1 -1
- package/dist/cjs/components/pagination/use-pagination.cjs.map +1 -1
- package/dist/cjs/components/picture/picture.cjs.map +1 -1
- package/dist/cjs/components/pin-input/pin-input.cjs.map +1 -1
- package/dist/cjs/components/pin-input/use-pin-input.cjs.map +1 -1
- package/dist/cjs/components/qr-code/use-qr-code.cjs.map +1 -1
- package/dist/cjs/components/radio/use-radio-group.cjs.map +1 -1
- package/dist/cjs/components/segmented-control/segmented-control.cjs.map +1 -1
- package/dist/cjs/components/select/use-select.cjs.map +1 -1
- package/dist/cjs/components/show/show.cjs.map +1 -1
- package/dist/cjs/components/sidebar/sidebar.cjs.map +1 -1
- package/dist/cjs/components/sidebar/use-sidebar.cjs.map +1 -1
- package/dist/cjs/components/simple-grid/simple-grid.cjs.map +1 -1
- package/dist/cjs/components/stack/z-stack.cjs.map +1 -1
- package/dist/cjs/components/steps/steps.cjs.map +1 -1
- package/dist/cjs/components/steps/use-steps.cjs.map +1 -1
- package/dist/cjs/components/table/table.cjs.map +1 -1
- package/dist/cjs/components/tabs/tabs.cjs.map +1 -1
- package/dist/cjs/components/toggle/use-toggle-group.cjs.map +1 -1
- package/dist/cjs/components/toggle/use-toggle.cjs.map +1 -1
- package/dist/cjs/components/tree/tree.cjs.map +1 -1
- package/dist/cjs/components/tree/use-tree.cjs.map +1 -1
- package/dist/cjs/core/components/create-component.cjs.map +1 -1
- package/dist/cjs/core/components/props.cjs +5 -1
- package/dist/cjs/core/components/props.cjs.map +1 -1
- package/dist/cjs/core/components/use-component-style.cjs.map +1 -1
- package/dist/cjs/core/css/animation.cjs.map +1 -1
- package/dist/cjs/core/css/at-rule.cjs.map +1 -1
- package/dist/cjs/core/css/calc.cjs.map +1 -1
- package/dist/cjs/core/css/color-mix.cjs.map +1 -1
- package/dist/cjs/core/css/config.cjs.map +1 -1
- package/dist/cjs/core/css/css.cjs.map +1 -1
- package/dist/cjs/core/css/gradient.cjs.map +1 -1
- package/dist/cjs/core/css/grid.cjs.map +1 -1
- package/dist/cjs/core/css/index.cjs +1 -0
- package/dist/cjs/core/css/styles.cjs +253 -0
- package/dist/cjs/core/css/styles.cjs.map +1 -1
- package/dist/cjs/core/css/transition.cjs.map +1 -1
- package/dist/cjs/core/css/utils.cjs.map +1 -1
- package/dist/cjs/core/index.cjs +1 -0
- package/dist/cjs/core/system/breakpoint.cjs.map +1 -1
- package/dist/cjs/core/system/color-mode-provider.cjs.map +1 -1
- package/dist/cjs/core/system/create-system.cjs.map +1 -1
- package/dist/cjs/core/system/environment-provider.cjs.map +1 -1
- package/dist/cjs/core/system/storage-manager.cjs.map +1 -1
- package/dist/cjs/core/system/storage-script.cjs.map +1 -1
- package/dist/cjs/core/system/use-system-color-mode.cjs.map +1 -1
- package/dist/cjs/core/system/var.cjs.map +1 -1
- package/dist/cjs/hooks/use-animation/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-breakpoint/use-breakpoint-value.cjs.map +1 -1
- package/dist/cjs/hooks/use-breakpoint/use-breakpoint.cjs.map +1 -1
- package/dist/cjs/hooks/use-clickable/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-clipboard/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-controllable-state/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-counter/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-descendants/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-focus/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-local-storage/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-mounted/index.cjs.map +1 -1
- package/dist/cjs/hooks/use-outside-click/index.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/providers/i18n-provider/i18n-provider.cjs.map +1 -1
- package/dist/cjs/utils/children.cjs.map +1 -1
- package/dist/cjs/utils/dom.cjs.map +1 -1
- package/dist/cjs/utils/store.cjs.map +1 -1
- package/dist/esm/components/accordion/use-accordion.js.map +1 -1
- package/dist/esm/components/autocomplete/use-autocomplete.js.map +1 -1
- package/dist/esm/components/calendar/use-calendar.js +1 -1
- package/dist/esm/components/calendar/use-calendar.js.map +1 -1
- package/dist/esm/components/carousel/carousel.js.map +1 -1
- package/dist/esm/components/chart/chart.js.map +1 -1
- package/dist/esm/components/chart/use-polar-chart.js.map +1 -1
- package/dist/esm/components/checkbox/checkbox.js.map +1 -1
- package/dist/esm/components/checkbox/use-checkbox-group.js.map +1 -1
- package/dist/esm/components/checkbox-card/checkbox-card.js.map +1 -1
- package/dist/esm/components/collapse/collapse.js.map +1 -1
- package/dist/esm/components/color-picker/use-color-picker.js.map +1 -1
- package/dist/esm/components/color-swatch/color-swatch-group.js.map +1 -1
- package/dist/esm/components/date-picker/date-picker.js.map +1 -1
- package/dist/esm/components/date-picker/use-date-picker.js +1 -1
- package/dist/esm/components/date-picker/use-date-picker.js.map +1 -1
- package/dist/esm/components/editable/use-editable.js.map +1 -1
- package/dist/esm/components/field/field.js.map +1 -1
- package/dist/esm/components/file-input/file-input.js.map +1 -1
- package/dist/esm/components/flip/flip.js.map +1 -1
- package/dist/esm/components/highlight/highlight.js.map +1 -1
- package/dist/esm/components/indicator/indicator.js.map +1 -1
- package/dist/esm/components/infinite-scroll-area/use-infinite-scroll.js.map +1 -1
- package/dist/esm/components/input/input-group.js.map +1 -1
- package/dist/esm/components/list/list.js.map +1 -1
- package/dist/esm/components/menu/use-menu.js.map +1 -1
- package/dist/esm/components/native-select/use-native-select.js.map +1 -1
- package/dist/esm/components/native-table/native-table.js.map +1 -1
- package/dist/esm/components/notice/notice.js.map +1 -1
- package/dist/esm/components/number-input/use-number-input.js.map +1 -1
- package/dist/esm/components/pagination/pagination.js.map +1 -1
- package/dist/esm/components/pagination/use-pagination.js.map +1 -1
- package/dist/esm/components/picture/picture.js.map +1 -1
- package/dist/esm/components/pin-input/pin-input.js.map +1 -1
- package/dist/esm/components/pin-input/use-pin-input.js.map +1 -1
- package/dist/esm/components/qr-code/use-qr-code.js.map +1 -1
- package/dist/esm/components/radio/use-radio-group.js.map +1 -1
- package/dist/esm/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/esm/components/select/use-select.js.map +1 -1
- package/dist/esm/components/show/show.js.map +1 -1
- package/dist/esm/components/sidebar/sidebar.js.map +1 -1
- package/dist/esm/components/sidebar/use-sidebar.js.map +1 -1
- package/dist/esm/components/simple-grid/simple-grid.js.map +1 -1
- package/dist/esm/components/stack/z-stack.js.map +1 -1
- package/dist/esm/components/steps/steps.js.map +1 -1
- package/dist/esm/components/steps/use-steps.js.map +1 -1
- package/dist/esm/components/table/table.js.map +1 -1
- package/dist/esm/components/tabs/tabs.js.map +1 -1
- package/dist/esm/components/toggle/use-toggle-group.js.map +1 -1
- package/dist/esm/components/toggle/use-toggle.js.map +1 -1
- package/dist/esm/components/tree/tree.js.map +1 -1
- package/dist/esm/components/tree/use-tree.js.map +1 -1
- package/dist/esm/core/components/create-component.js.map +1 -1
- package/dist/esm/core/components/props.js +6 -2
- package/dist/esm/core/components/props.js.map +1 -1
- package/dist/esm/core/components/use-component-style.js.map +1 -1
- package/dist/esm/core/css/animation.js.map +1 -1
- package/dist/esm/core/css/at-rule.js.map +1 -1
- package/dist/esm/core/css/calc.js.map +1 -1
- package/dist/esm/core/css/color-mix.js.map +1 -1
- package/dist/esm/core/css/config.js.map +1 -1
- package/dist/esm/core/css/css.js.map +1 -1
- package/dist/esm/core/css/gradient.js.map +1 -1
- package/dist/esm/core/css/grid.js.map +1 -1
- package/dist/esm/core/css/index.js +2 -2
- package/dist/esm/core/css/styles.js +253 -1
- package/dist/esm/core/css/styles.js.map +1 -1
- package/dist/esm/core/css/transition.js.map +1 -1
- package/dist/esm/core/css/utils.js.map +1 -1
- package/dist/esm/core/index.js +2 -2
- package/dist/esm/core/system/breakpoint.js.map +1 -1
- package/dist/esm/core/system/color-mode-provider.js.map +1 -1
- package/dist/esm/core/system/create-system.js.map +1 -1
- package/dist/esm/core/system/environment-provider.js.map +1 -1
- package/dist/esm/core/system/storage-manager.js.map +1 -1
- package/dist/esm/core/system/storage-script.js.map +1 -1
- package/dist/esm/core/system/use-system-color-mode.js.map +1 -1
- package/dist/esm/core/system/var.js.map +1 -1
- package/dist/esm/hooks/use-animation/index.js.map +1 -1
- package/dist/esm/hooks/use-breakpoint/use-breakpoint-value.js.map +1 -1
- package/dist/esm/hooks/use-breakpoint/use-breakpoint.js.map +1 -1
- package/dist/esm/hooks/use-clickable/index.js.map +1 -1
- package/dist/esm/hooks/use-clipboard/index.js.map +1 -1
- package/dist/esm/hooks/use-controllable-state/index.js.map +1 -1
- package/dist/esm/hooks/use-counter/index.js.map +1 -1
- package/dist/esm/hooks/use-descendants/index.js.map +1 -1
- package/dist/esm/hooks/use-focus/index.js.map +1 -1
- package/dist/esm/hooks/use-local-storage/index.js.map +1 -1
- package/dist/esm/hooks/use-mounted/index.js.map +1 -1
- package/dist/esm/hooks/use-outside-click/index.js.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/providers/i18n-provider/i18n-provider.js.map +1 -1
- package/dist/esm/utils/children.js.map +1 -1
- package/dist/esm/utils/dom.js.map +1 -1
- package/dist/esm/utils/store.js.map +1 -1
- package/dist/types/core/css/index.d.ts +2 -2
- package/dist/types/core/css/styles.d.ts +3 -1
- package/dist/types/core/index.d.ts +2 -2
- package/dist/types/index.d.ts +3 -3
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transition.js","names":[],"sources":["../../../../src/core/css/transition.ts"],"sourcesContent":["import type { Transform } from \"./utils\"\n\nconst properties: { [key: string]: string[] } = {\n size: [\"width\", \"height\"],\n all: [\"all\"],\n backgrounds: [\n \"background\",\n \"background-color\",\n \"background-image\",\n \"background-position\",\n ],\n colors: [\n \"color\",\n \"fill\",\n \"stroke\",\n \"background-color\",\n \"border-color\",\n \"outline-color\",\n \"text-decoration-color\",\n ],\n common: [\n \"color\",\n \"fill\",\n \"stroke\",\n \"background-color\",\n \"border-color\",\n \"outline-color\",\n \"text-decoration-color\",\n \"opacity\",\n \"box-shadow\",\n \"transform\",\n \"translate\",\n \"scale\",\n \"rotate\",\n \"filter\",\n \"backdrop-filter\",\n ],\n opacity: [\"opacity\"],\n position: [\"top\", \"right\", \"bottom\", \"left\", \"inset-inline\", \"inset-block\"],\n shadow: [\"box-shadow\"],\n}\n\nexport function generateTransition(\n type: \"property\" | \"transition\" = \"transition\",\n): Transform {\n return function (value, { prev }) {\n switch (type) {\n case \"transition\":\n if (value in properties)
|
|
1
|
+
{"version":3,"file":"transition.js","names":[],"sources":["../../../../src/core/css/transition.ts"],"sourcesContent":["import type { Transform } from \"./utils\"\n\nconst properties: { [key: string]: string[] } = {\n size: [\"width\", \"height\"],\n all: [\"all\"],\n backgrounds: [\n \"background\",\n \"background-color\",\n \"background-image\",\n \"background-position\",\n ],\n colors: [\n \"color\",\n \"fill\",\n \"stroke\",\n \"background-color\",\n \"border-color\",\n \"outline-color\",\n \"text-decoration-color\",\n ],\n common: [\n \"color\",\n \"fill\",\n \"stroke\",\n \"background-color\",\n \"border-color\",\n \"outline-color\",\n \"text-decoration-color\",\n \"opacity\",\n \"box-shadow\",\n \"transform\",\n \"translate\",\n \"scale\",\n \"rotate\",\n \"filter\",\n \"backdrop-filter\",\n ],\n opacity: [\"opacity\"],\n position: [\"top\", \"right\", \"bottom\", \"left\", \"inset-inline\", \"inset-block\"],\n shadow: [\"box-shadow\"],\n}\n\nexport function generateTransition(\n type: \"property\" | \"transition\" = \"transition\",\n): Transform {\n return function (value, { prev }) {\n switch (type) {\n case \"transition\":\n if (value in properties)\n return {\n transition: properties[value]?.join(\", \"),\n transitionDuration: prev?.transitionDuration ?? \"200ms\",\n transitionTimingFunction:\n prev?.transitionTimingFunction ??\n \"cubic-bezier(0.42, 0, 0.58, 1)\",\n }\n else return value\n\n case \"property\":\n if (value in properties) return properties[value]?.join(\", \")\n else return value\n }\n }\n}\n"],"mappings":";AAEA,MAAM,aAA0C;CAC9C,MAAM,CAAC,SAAS,QAAQ;CACxB,KAAK,CAAC,KAAK;CACX,aAAa;EACX;EACA;EACA;EACA;CACF;CACA,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,QAAQ;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,SAAS,CAAC,SAAS;CACnB,UAAU;EAAC;EAAO;EAAS;EAAU;EAAQ;EAAgB;CAAa;CAC1E,QAAQ,CAAC,YAAY;AACvB;AAEA,SAAgB,mBACd,OAAkC,cACvB;CACX,OAAO,SAAU,OAAO,EAAE,QAAQ;EAChC,QAAQ,MAAR;GACE,KAAK,cACH,IAAI,SAAS,YACX,OAAO;IACL,YAAY,WAAW,MAAM,EAAE,KAAK,IAAI;IACxC,oBAAoB,MAAM,sBAAsB;IAChD,0BACE,MAAM,4BACN;GACJ;QACG,OAAO;GAEd,KAAK,YACH,IAAI,SAAS,YAAY,OAAO,WAAW,MAAM,EAAE,KAAK,IAAI;QACvD,OAAO;EAChB;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/core/css/utils.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { ColorMode, System, ThemeToken, UsageTheme } from \"../system\"\nimport type { StyleConfig } from \"./config\"\nimport type { CSSFunction, CSSProperties } from \"./index.types\"\nimport { isObject, isString, isUndefined } from \"../../utils\"\nimport { getColorSchemeVar, isColorScheme } from \"../system\"\n\nexport interface TransformOptions {\n system: System\n css?: CSSFunction\n fallback?: any\n prev?: Dict\n properties?: CSSProperties[]\n theme?: UsageTheme\n}\n\nexport interface Transform {\n (value: any, options: TransformOptions): any\n}\n\nexport const globalValues = new Set([\n \"inherit\",\n \"initial\",\n \"none\",\n \"revert\",\n \"unset\",\n])\n\nexport function isCSSFunction(value: any) {\n return isString(value) && value.includes(\"(\") && value.includes(\")\")\n}\n\nexport function getCSSFunction(value: any) {\n const regex = /(^[a-z-A-Z]+)\\((.*)\\)/g\n const [, type, values] = regex.exec(value) ?? []\n\n return { type, values }\n}\n\nexport function splitValues(\n values: string,\n cb: (\n current: string,\n prev: string | undefined,\n next: string | undefined,\n ) => boolean = (current) => current === \",\",\n addSeparator = false,\n) {\n const result = []\n\n let value = \"\"\n let depth = 0\n\n for (let i = 0; i < values.length; i++) {\n const current = values[i]\n const prev = values[i - 1]\n const next = values[i + 1]\n\n if (current === \"(\") depth++\n if (current === \")\") depth--\n\n if (!isUndefined(current) && cb(current, prev, next) && depth === 0) {\n if (value) result.push(value.trim())\n\n if (addSeparator) result.push(current)\n\n value = \"\"\n } else {\n value += current\n }\n }\n\n if (value) result.push(value.trim())\n\n return result.filter(Boolean)\n}\n\nexport function isCSSVar(value: string) {\n return /^var\\(--.+\\)$/.test(value)\n}\n\nexport function isInterpolation(value: string) {\n return /\\{.+\\}/.test(value)\n}\n\nexport function isCSSToken({ cssMap }: System) {\n return function (value: any) {\n return isObject(cssMap) && value in cssMap && !!cssMap[value]?.ref\n }\n}\n\nexport function isImportant(value: any): boolean {\n return (\n isString(value) && (/\\s*!important$/.test(value) || /\\s*!$/.test(value))\n )\n}\n\nexport function omitImportant(value: any): string {\n return isString(value) ? value.replace(/(!important|!)$/, \"\").trim() : value\n}\n\nexport function insertImportant(value: any, style?: StyleConfig): any {\n if (isString(value))
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/core/css/utils.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { ColorMode, System, ThemeToken, UsageTheme } from \"../system\"\nimport type { StyleConfig } from \"./config\"\nimport type { CSSFunction, CSSProperties } from \"./index.types\"\nimport { isObject, isString, isUndefined } from \"../../utils\"\nimport { getColorSchemeVar, isColorScheme } from \"../system\"\n\nexport interface TransformOptions {\n system: System\n css?: CSSFunction\n fallback?: any\n prev?: Dict\n properties?: CSSProperties[]\n theme?: UsageTheme\n}\n\nexport interface Transform {\n (value: any, options: TransformOptions): any\n}\n\nexport const globalValues = new Set([\n \"inherit\",\n \"initial\",\n \"none\",\n \"revert\",\n \"unset\",\n])\n\nexport function isCSSFunction(value: any) {\n return isString(value) && value.includes(\"(\") && value.includes(\")\")\n}\n\nexport function getCSSFunction(value: any) {\n const regex = /(^[a-z-A-Z]+)\\((.*)\\)/g\n const [, type, values] = regex.exec(value) ?? []\n\n return { type, values }\n}\n\nexport function splitValues(\n values: string,\n cb: (\n current: string,\n prev: string | undefined,\n next: string | undefined,\n ) => boolean = (current) => current === \",\",\n addSeparator = false,\n) {\n const result = []\n\n let value = \"\"\n let depth = 0\n\n for (let i = 0; i < values.length; i++) {\n const current = values[i]\n const prev = values[i - 1]\n const next = values[i + 1]\n\n if (current === \"(\") depth++\n if (current === \")\") depth--\n\n if (!isUndefined(current) && cb(current, prev, next) && depth === 0) {\n if (value) result.push(value.trim())\n\n if (addSeparator) result.push(current)\n\n value = \"\"\n } else {\n value += current\n }\n }\n\n if (value) result.push(value.trim())\n\n return result.filter(Boolean)\n}\n\nexport function isCSSVar(value: string) {\n return /^var\\(--.+\\)$/.test(value)\n}\n\nexport function isInterpolation(value: string) {\n return /\\{.+\\}/.test(value)\n}\n\nexport function isCSSToken({ cssMap }: System) {\n return function (value: any) {\n return isObject(cssMap) && value in cssMap && !!cssMap[value]?.ref\n }\n}\n\nexport function isImportant(value: any): boolean {\n return (\n isString(value) && (/\\s*!important$/.test(value) || /\\s*!$/.test(value))\n )\n}\n\nexport function omitImportant(value: any): string {\n return isString(value) ? value.replace(/(!important|!)$/, \"\").trim() : value\n}\n\nexport function insertImportant(value: any, style?: StyleConfig): any {\n if (isString(value)) return value + \" !important\"\n else if (isObject(value))\n if (style?.important) {\n return Object.fromEntries(\n Object.entries(value).map(([key, value]) => [\n key,\n value + \" !important\",\n ]),\n )\n } else {\n if (!style?.properties) return value\n\n for (const property of style.properties) value[property] += \" !important\"\n }\n\n return value\n}\n\nexport function analyzeCSSValue(value: any) {\n let n = parseFloat(value.toString())\n const unit = value.toString().replace(String(n), \"\")\n\n return { unit, unitless: !unit, value }\n}\n\nexport function tokenToVar(system: System) {\n return function (token: ThemeToken, value: any, fallbackValue?: any) {\n if (isColorScheme(value)) return getColorSchemeVar(system)(value)\n\n const resolvedToken = `${token}.${value}`\n\n if (isCSSToken(system)(resolvedToken))\n return system.cssMap[resolvedToken]!.ref\n else return fallbackValue || value\n }\n}\n\nexport function varToValue(system: System) {\n return function (variable: string): string {\n const value = system.cssVars[variable]\n\n if (isCSSVar(value))\n return varToValue(system)(value.replace(/^var\\(/, \"\").replace(/\\)$/, \"\"))\n else return value\n }\n}\n\nexport function tokenToValue(system: System) {\n return function (token: ThemeToken, value: any, fallbackValue?: any) {\n const resolvedToken = `${token}.${value}`\n\n if (isCSSToken(system)(resolvedToken)) {\n const variable = system.cssMap[resolvedToken]!.var\n\n return varToValue(system)(variable)\n } else {\n return fallbackValue || value\n }\n }\n}\n\nexport function mode<L, D>(light: L, dark: D) {\n return function (colorMode: ColorMode | undefined = \"light\"): D | L {\n return colorMode === \"light\" ? light : dark\n }\n}\n\nfunction combineFunctions(a: Transform, b: Transform): Transform {\n return function (value, ...args) {\n return b(a(value, ...args), ...args)\n }\n}\n\nexport function pipe(...transformers: Transform[]) {\n return transformers.reduce(combineFunctions)\n}\n"],"mappings":"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"}
|
package/dist/esm/core/index.js
CHANGED
|
@@ -22,7 +22,7 @@ import { display } from "./css/display.js";
|
|
|
22
22
|
import { focusRingStyle } from "./css/focus-ring.js";
|
|
23
23
|
import { gradient } from "./css/gradient.js";
|
|
24
24
|
import { transforms } from "./css/config.js";
|
|
25
|
-
import { animationProperties, aspectRatioProperties, atRuleStyles, blurProperties, borderProperties, colorProperties, durationProperties, easingProperties, fontProperties, gradientProperties, keyframeProperties, pseudoStyles, radiusProperties, shadowProperties, shorthandStyles, sizeProperties, spaceProperties, standardStyles, styleProperties, styledStyles, styles, variableLengthProperties, zIndexProperties } from "./css/styles.js";
|
|
25
|
+
import { animationProperties, aspectRatioProperties, atRuleStyles, blurProperties, borderProperties, colorProperties, durationProperties, easingProperties, fontProperties, gradientProperties, keyframeProperties, pseudoStyles, radiusProperties, shadowProperties, shorthandStyles, sizeProperties, spaceProperties, standardStyles, styleProperties, styledStyles, styles, variableLengthProperties, vendorProperties, zIndexProperties } from "./css/styles.js";
|
|
26
26
|
import { css, getStyle, transformConditionalValue } from "./css/css.js";
|
|
27
27
|
import { mergeCSS } from "./css/merge-css.js";
|
|
28
28
|
import { getCSS, useCSS } from "./css/use-css.js";
|
|
@@ -31,4 +31,4 @@ import { chainProps, createShouldForwardProp, cssProps, extractProps, isEqualPro
|
|
|
31
31
|
import { getSlotClassName, mergeSlotCSS, useComponentSlotStyle, useComponentStyle } from "./components/use-component-style.js";
|
|
32
32
|
import { getClassName, getDisplayName } from "./components/utils.js";
|
|
33
33
|
import { createComponent, createSlotComponent } from "./components/create-component.js";
|
|
34
|
-
export { COLOR_MODE_STORAGE_KEY, ColorModeContext, ColorModeProvider, ColorModeScript, ColorSchemeContext, DEFAULT_DIRECTION, DEFAULT_LAYERS, DEFAULT_LOCALE, DEFAULT_VAR_PREFIX, EnvironmentProvider, GlobalStyles, SystemProvider, THEME_SCHEME_STORAGE_KEY, ThemeProvider, ThemeSchemeScript, animation, animationProperties, aspectRatioProperties, atRuleStyles, attributeProperties, attributeSelectors, attributes, blurProperties, borderProperties, chainProps, colorMix, colorProperties, conditionProperties, conditionSelectors, conditions, createBreakpoints, createComponent, createLayers, createShouldForwardProp, createSlotComponent, createStorageManager, createStyled, createSystem, createVars, css, cssProps, defaultEnvironment, defaultLayers, defaultSystem, defineComponentSlotStyle, defineComponentStyle, defineConfig, defineSemanticTokens, defineStyles, defineTheme, defineThemeSchemes, defineTokens, display, durationProperties, easingProperties, extractProps, focusRingStyle, fontProperties, getCSS, getCSSFunction, getClassName, getColorModeValue, getColorSchemeVar, getCondition, getDisplayName, getPreventTransition, getSlotClassName, getStorageScript, getStyle, getVar, getVarName, gradient, gradientProperties, groupAttributeProperties, groupAttributeSelectors, groupAttributes, injectKeyframes, injectVars, isCSSFunction, isCSSToken, isCSSVar, isColorScheme, isEqualProps, keyframeProperties, keyframes, mergeCSS, mergeProps, mergeSlotCSS, mergeVars, peerAttributeProperties, peerAttributeSelectors, peerAttributes, pseudoClassProperties, pseudoClassSelectors, pseudoClasses, pseudoElementProperties, pseudoElementSelectors, pseudoElements, pseudoStyles, radiusProperties, shadowProperties, shorthandStyles, sizeProperties, spaceProperties, standardStyles, styleProperties, styled, styledStyles, styles, tokenToValue, tokenToVar, transformConditionalValue, transformInterpolation, transforms, useCSS, useColorMode, useColorModeValue, useColorSchemeContext, useComponentSlotStyle, useComponentStyle, useEnvironment, useExtractProps, useInjectVarsIntoCss, useInjectVarsIntoProps, useSplitProps, useSystem, useSystemColorMode, useTheme, varAttr, varToValue, variableLengthProperties, zIndexProperties };
|
|
34
|
+
export { COLOR_MODE_STORAGE_KEY, ColorModeContext, ColorModeProvider, ColorModeScript, ColorSchemeContext, DEFAULT_DIRECTION, DEFAULT_LAYERS, DEFAULT_LOCALE, DEFAULT_VAR_PREFIX, EnvironmentProvider, GlobalStyles, SystemProvider, THEME_SCHEME_STORAGE_KEY, ThemeProvider, ThemeSchemeScript, animation, animationProperties, aspectRatioProperties, atRuleStyles, attributeProperties, attributeSelectors, attributes, blurProperties, borderProperties, chainProps, colorMix, colorProperties, conditionProperties, conditionSelectors, conditions, createBreakpoints, createComponent, createLayers, createShouldForwardProp, createSlotComponent, createStorageManager, createStyled, createSystem, createVars, css, cssProps, defaultEnvironment, defaultLayers, defaultSystem, defineComponentSlotStyle, defineComponentStyle, defineConfig, defineSemanticTokens, defineStyles, defineTheme, defineThemeSchemes, defineTokens, display, durationProperties, easingProperties, extractProps, focusRingStyle, fontProperties, getCSS, getCSSFunction, getClassName, getColorModeValue, getColorSchemeVar, getCondition, getDisplayName, getPreventTransition, getSlotClassName, getStorageScript, getStyle, getVar, getVarName, gradient, gradientProperties, groupAttributeProperties, groupAttributeSelectors, groupAttributes, injectKeyframes, injectVars, isCSSFunction, isCSSToken, isCSSVar, isColorScheme, isEqualProps, keyframeProperties, keyframes, mergeCSS, mergeProps, mergeSlotCSS, mergeVars, peerAttributeProperties, peerAttributeSelectors, peerAttributes, pseudoClassProperties, pseudoClassSelectors, pseudoClasses, pseudoElementProperties, pseudoElementSelectors, pseudoElements, pseudoStyles, radiusProperties, shadowProperties, shorthandStyles, sizeProperties, spaceProperties, standardStyles, styleProperties, styled, styledStyles, styles, tokenToValue, tokenToVar, transformConditionalValue, transformInterpolation, transforms, useCSS, useColorMode, useColorModeValue, useColorSchemeContext, useComponentSlotStyle, useComponentStyle, useEnvironment, useExtractProps, useInjectVarsIntoCss, useInjectVarsIntoProps, useSplitProps, useSystem, useSystemColorMode, useTheme, varAttr, varToValue, variableLengthProperties, vendorProperties, zIndexProperties };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakpoint.js","names":[],"sources":["../../../../src/core/system/breakpoint.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type {\n Breakpoint,\n BreakpointConfig,\n DefineThemeBreakpointTokens,\n} from \"./index.types\"\nimport { getPx, isObject } from \"../../utils\"\n\ninterface BreakpointQuery {\n breakpoint: Breakpoint\n maxW: number | undefined\n maxWQuery: string | undefined\n minMaxQuery: string | undefined\n minW: number | undefined\n minWQuery: string | undefined\n query: string | undefined\n}\n\nexport interface Breakpoints {\n keys: Breakpoint[]\n queries: BreakpointQuery[]\n queriesObj: { [key: string]: BreakpointQuery }\n getQuery: (key: string) => string | undefined\n isResponsive: (obj: any, strict?: boolean) => boolean\n isResponsiveKey: (key: string) => boolean\n}\n\nfunction createQuery(\n min: number | undefined,\n max: number | undefined,\n identifier = \"@media screen\",\n): string | undefined {\n const query = [identifier]\n\n if (min) query.push(\"and\", `(min-width: ${min}px)`)\n if (max) query.push(\"and\", `(max-width: ${max}px)`)\n\n return query.length > 1\n ? query.join(\" \").replace(/^@container(\\s+\\w*)?\\s+and/, `@container$1`)\n : undefined\n}\n\nfunction createQueries(breakpoints: Dict<number>, config: BreakpointConfig) {\n const { direction, identifier } = config\n const down = direction !== \"up\"\n\n const queryEntries = Object.entries(breakpoints)\n .map(([breakpoint, width], i, entry) => {\n const [, relatedWidth] = entry[i + 1] ?? []\n let minW = down ? relatedWidth : width\n let maxW = down ? width : relatedWidth\n\n if (breakpoint === \"base\")
|
|
1
|
+
{"version":3,"file":"breakpoint.js","names":[],"sources":["../../../../src/core/system/breakpoint.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type {\n Breakpoint,\n BreakpointConfig,\n DefineThemeBreakpointTokens,\n} from \"./index.types\"\nimport { getPx, isObject } from \"../../utils\"\n\ninterface BreakpointQuery {\n breakpoint: Breakpoint\n maxW: number | undefined\n maxWQuery: string | undefined\n minMaxQuery: string | undefined\n minW: number | undefined\n minWQuery: string | undefined\n query: string | undefined\n}\n\nexport interface Breakpoints {\n keys: Breakpoint[]\n queries: BreakpointQuery[]\n queriesObj: { [key: string]: BreakpointQuery }\n getQuery: (key: string) => string | undefined\n isResponsive: (obj: any, strict?: boolean) => boolean\n isResponsiveKey: (key: string) => boolean\n}\n\nfunction createQuery(\n min: number | undefined,\n max: number | undefined,\n identifier = \"@media screen\",\n): string | undefined {\n const query = [identifier]\n\n if (min) query.push(\"and\", `(min-width: ${min}px)`)\n if (max) query.push(\"and\", `(max-width: ${max}px)`)\n\n return query.length > 1\n ? query.join(\" \").replace(/^@container(\\s+\\w*)?\\s+and/, `@container$1`)\n : undefined\n}\n\nfunction createQueries(breakpoints: Dict<number>, config: BreakpointConfig) {\n const { direction, identifier } = config\n const down = direction !== \"up\"\n\n const queryEntries = Object.entries(breakpoints)\n .map(([breakpoint, width], i, entry) => {\n const [, relatedWidth] = entry[i + 1] ?? []\n let minW = down ? relatedWidth : width\n let maxW = down ? width : relatedWidth\n\n if (breakpoint === \"base\")\n if (down) maxW = undefined\n else minW = undefined\n\n if (down) {\n if (minW) minW += 1\n } else {\n if (maxW) maxW -= 1\n }\n\n const maxWQuery = createQuery(undefined, maxW, identifier)\n const minWQuery = createQuery(minW, undefined, identifier)\n const minMaxQuery = createQuery(minW, maxW, identifier)\n const query = down ? maxWQuery : minWQuery\n\n return [\n breakpoint,\n {\n breakpoint: breakpoint as Breakpoint,\n maxW,\n maxWQuery,\n minMaxQuery,\n minW,\n minWQuery,\n query,\n },\n ] as const\n })\n .sort((a, b) =>\n down\n ? (b[1].maxW ?? Infinity) - (a[1].maxW ?? Infinity)\n : (a[1].minW ?? 0) - (b[1].minW ?? 0),\n )\n\n const queries = queryEntries.map(([_, query]) => query)\n const queriesObj = Object.fromEntries(queryEntries)\n\n return { queries, queriesObj }\n}\n\nfunction transformBreakpoints(\n breakpoints: Dict,\n config: BreakpointConfig,\n): Dict {\n return Object.fromEntries(\n Object.entries(breakpoints)\n .map(([name, value]) => [name, getPx(value)] as const)\n .sort((a, b) => {\n if (config.direction !== \"up\") return b[1] - a[1]\n else return a[1] - b[1]\n }),\n )\n}\n\nexport function createBreakpoints(\n breakpoints: DefineThemeBreakpointTokens = {},\n config: BreakpointConfig = {},\n): Breakpoints {\n config.base ??= \"9999px\"\n config.direction ??= \"down\"\n\n breakpoints.base = config.direction !== \"up\" ? config.base : \"0px\"\n\n const transformedBreakpoints = transformBreakpoints(breakpoints, config)\n const { queries, queriesObj } = createQueries(transformedBreakpoints, config)\n const keys = Object.keys(queriesObj) as Breakpoint[]\n\n function isResponsive(obj: any, strict = false) {\n if (!isObject(obj)) return false\n\n const providedKeys = Object.keys(obj) as Breakpoint[]\n\n if (!providedKeys.length) return false\n\n if (strict && !providedKeys.includes(\"base\")) return false\n\n return providedKeys.every((key) => keys.includes(key))\n }\n\n function isResponsiveKey(key: string) {\n return key in queriesObj\n }\n\n function getQuery(key: string) {\n return key in queriesObj ? queriesObj[key]?.query : undefined\n }\n\n return {\n getQuery,\n isResponsive,\n isResponsiveKey,\n keys,\n queries,\n queriesObj,\n }\n}\n"],"mappings":";;AA2BA,SAAS,YACP,KACA,KACA,aAAa,iBACO;CACpB,MAAM,QAAQ,CAAC,UAAU;CAEzB,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAClD,IAAI,KAAK,MAAM,KAAK,OAAO,eAAe,IAAI,IAAI;CAElD,OAAO,MAAM,SAAS,IAClB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,8BAA8B,cAAc,IACpE,KAAA;AACN;AAEA,SAAS,cAAc,aAA2B,QAA0B;CAC1E,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OAAO,cAAc;CAE3B,MAAM,eAAe,OAAO,QAAQ,WAAW,CAAC,CAC7C,KAAK,CAAC,YAAY,QAAQ,GAAG,UAAU;EACtC,MAAM,GAAG,gBAAgB,MAAM,IAAI,MAAM,CAAC;EAC1C,IAAI,OAAO,OAAO,eAAe;EACjC,IAAI,OAAO,OAAO,QAAQ;EAE1B,IAAI,eAAe,QACjB,IAAI,MAAM,OAAO,KAAA;OACZ,OAAO,KAAA;EAEd,IAAI;OACE,MAAM,QAAQ;EAAA,OAElB,IAAI,MAAM,QAAQ;EAGpB,MAAM,YAAY,YAAY,KAAA,GAAW,MAAM,UAAU;EACzD,MAAM,YAAY,YAAY,MAAM,KAAA,GAAW,UAAU;EACzD,MAAM,cAAc,YAAY,MAAM,MAAM,UAAU;EAGtD,OAAO,CACL,YACA;GACc;GACZ;GACA;GACA;GACA;GACA;GACA,OAXU,OAAO,YAAY;EAY/B,CACF;CACF,CAAC,CAAC,CACD,MAAM,GAAG,MACR,QACK,EAAE,EAAE,CAAC,QAAQ,aAAa,EAAE,EAAE,CAAC,QAAQ,aACvC,EAAE,EAAE,CAAC,QAAQ,MAAM,EAAE,EAAE,CAAC,QAAQ,EACvC;CAKF,OAAO;EAAE,SAHO,aAAa,KAAK,CAAC,GAAG,WAAW,KAGlC;EAAG,YAFC,OAAO,YAAY,YAEX;CAAE;AAC/B;AAEA,SAAS,qBACP,aACA,QACM;CACN,OAAO,OAAO,YACZ,OAAO,QAAQ,WAAW,CAAC,CACxB,KAAK,CAAC,MAAM,WAAW,CAAC,OAAA,GAAA,cAAA,MAAA,CAAY,KAAK,CAAC,CAAU,CAAC,CACrD,MAAM,GAAG,MAAM;EACd,IAAI,OAAO,cAAc,MAAM,OAAO,EAAE,KAAK,EAAE;OAC1C,OAAO,EAAE,KAAK,EAAE;CACvB,CAAC,CACL;AACF;AAEA,SAAgB,kBACd,cAA2C,CAAC,GAC5C,SAA2B,CAAC,GACf;CACb,OAAO,SAAS;CAChB,OAAO,cAAc;CAErB,YAAY,OAAO,OAAO,cAAc,OAAO,OAAO,OAAO;CAG7D,MAAM,EAAE,SAAS,eAAe,cADD,qBAAqB,aAAa,MACE,GAAG,MAAM;CAC5E,MAAM,OAAO,OAAO,KAAK,UAAU;CAEnC,SAAS,aAAa,KAAU,SAAS,OAAO;EAC9C,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,GAAG,GAAG,OAAO;EAE3B,MAAM,eAAe,OAAO,KAAK,GAAG;EAEpC,IAAI,CAAC,aAAa,QAAQ,OAAO;EAEjC,IAAI,UAAU,CAAC,aAAa,SAAS,MAAM,GAAG,OAAO;EAErD,OAAO,aAAa,OAAO,QAAQ,KAAK,SAAS,GAAG,CAAC;CACvD;CAEA,SAAS,gBAAgB,KAAa;EACpC,OAAO,OAAO;CAChB;CAEA,SAAS,SAAS,KAAa;EAC7B,OAAO,OAAO,aAAa,WAAW,IAAI,EAAE,QAAQ,KAAA;CACtD;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-mode-provider.js","names":["noop"],"sources":["../../../../src/core/system/color-mode-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport type { ColorMode, ColorModeWithSystem, ThemeConfig } from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { isEmptyObject, noop } from \"../../utils\"\nimport { COLOR_MODE_STORAGE_KEY } from \"../constant\"\nimport { useEnvironment } from \"./environment-provider\"\nimport { createStorageManager } from \"./storage-manager\"\nimport { getPreventTransition } from \"./theme-provider\"\nimport { useSystemColorMode } from \"./use-system-color-mode\"\n\ninterface ColorModeContext {\n colorMode: ColorMode\n internalColorMode: ColorModeWithSystem\n changeColorMode: (colorMode: ColorModeWithSystem) => void\n toggleColorMode: () => void\n forced?: boolean\n}\n\nexport const ColorModeContext = createContext<ColorModeContext>({\n changeColorMode: noop,\n colorMode: \"light\",\n forced: false,\n internalColorMode: \"light\",\n toggleColorMode: noop,\n})\n\nexport interface ColorModeProviderProps extends PropsWithChildren {\n /**\n * The forced color mode.\n */\n colorMode?: ColorMode\n /**\n * The config of the yamada ui.\n */\n config?: ThemeConfig\n /**\n * If `storage` is `cookie`, the cookie to use.\n * If not provided, the cookie will be set to `document.cookie`.\n */\n cookie?: string\n /**\n * The storage to use.\n * If you are using a server-side rendering library, you should use `cookie`.\n *\n * @default 'localStorage'\n */\n storage?: Storage\n /**\n * The key of the value saved in storage.\n *\n * @default 'color-mode'\n */\n storageKey?: string\n}\n\nexport const ColorModeProvider: FC<ColorModeProviderProps> = ({\n children,\n colorMode: forcedColorMode,\n config: {\n defaultColorMode = \"light\" as ColorModeWithSystem,\n disableTransitionOnChange = true,\n } = {},\n cookie,\n storage = cookie ? \"cookie\" : \"localStorage\",\n storageKey = COLOR_MODE_STORAGE_KEY,\n}) => {\n const storageManager = useMemo(\n () =>\n createStorageManager<ColorModeWithSystem, ColorMode>(\n storage,\n storageKey,\n defaultColorMode,\n cookie,\n ),\n [cookie, defaultColorMode, storage, storageKey],\n )\n const environment = useEnvironment()\n const { getDocument } = environment\n const [internalColorMode, setInternalColorMode] =\n useState<ColorModeWithSystem>(storageManager.get())\n const { getSystemColorMode, systemColorMode } = useSystemColorMode({\n callback: (systemColorMode) => {\n if (internalColorMode !== \"system\") return\n\n setClassName(systemColorMode === \"dark\")\n setDataset(systemColorMode)\n },\n defaultColorMode: storageManager.default(\n defaultColorMode === \"dark\" ? \"dark\" : \"light\",\n ),\n })\n const colorMode =\n internalColorMode === \"system\" ? systemColorMode : internalColorMode\n\n const setDataset = useCallback(\n (colorMode: ColorMode) => {\n const doc = getDocument()\n\n if (!doc) return\n\n const cleanup = disableTransitionOnChange\n ? getPreventTransition(environment)\n : undefined\n\n doc.documentElement.dataset.mode = colorMode\n doc.documentElement.style.colorScheme = colorMode\n\n cleanup?.()\n },\n [disableTransitionOnChange, environment, getDocument],\n )\n\n const setClassName = useCallback(\n (isDark: boolean) => {\n const doc = getDocument()\n\n if (!doc) return\n\n doc.body.classList.add(isDark ? \"dark\" : \"light\")\n doc.body.classList.remove(isDark ? \"light\" : \"dark\")\n },\n [getDocument],\n )\n\n const changeColorMode = useCallback(\n (internalColorMode: ColorModeWithSystem) => {\n const colorMode =\n internalColorMode === \"system\"\n ? getSystemColorMode()\n : internalColorMode\n\n setInternalColorMode(internalColorMode)\n setClassName(colorMode === \"dark\")\n setDataset(colorMode)\n\n storageManager.set(internalColorMode)\n },\n [storageManager, getSystemColorMode, setClassName, setDataset],\n )\n\n const toggleColorMode = useCallback(() => {\n changeColorMode(colorMode === \"dark\" ? \"light\" : \"dark\")\n }, [changeColorMode, colorMode])\n\n useEffect(() => {\n const internalColorMode = storageManager.get()\n\n changeColorMode(internalColorMode)\n }, [changeColorMode, storageManager])\n\n const context = useMemo(\n () => ({\n changeColorMode: forcedColorMode ? noop : changeColorMode,\n colorMode: forcedColorMode ?? colorMode,\n forced: forcedColorMode !== undefined,\n internalColorMode,\n toggleColorMode: forcedColorMode ? noop : toggleColorMode,\n }),\n [\n forcedColorMode,\n colorMode,\n internalColorMode,\n changeColorMode,\n toggleColorMode,\n ],\n )\n\n return <ColorModeContext value={context}>{children}</ColorModeContext>\n}\n\n/**\n * `useColorMode` is a custom hook that returns the current color mode.\n *\n * @see https://yamada-ui.com/docs/hooks/use-color-mode\n */\nexport const useColorMode = (): ColorModeContext => {\n const context = use(ColorModeContext)\n\n if (isEmptyObject(context))
|
|
1
|
+
{"version":3,"file":"color-mode-provider.js","names":["noop"],"sources":["../../../../src/core/system/color-mode-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport type { ColorMode, ColorModeWithSystem, ThemeConfig } from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport {\n createContext,\n use,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\"\nimport { isEmptyObject, noop } from \"../../utils\"\nimport { COLOR_MODE_STORAGE_KEY } from \"../constant\"\nimport { useEnvironment } from \"./environment-provider\"\nimport { createStorageManager } from \"./storage-manager\"\nimport { getPreventTransition } from \"./theme-provider\"\nimport { useSystemColorMode } from \"./use-system-color-mode\"\n\ninterface ColorModeContext {\n colorMode: ColorMode\n internalColorMode: ColorModeWithSystem\n changeColorMode: (colorMode: ColorModeWithSystem) => void\n toggleColorMode: () => void\n forced?: boolean\n}\n\nexport const ColorModeContext = createContext<ColorModeContext>({\n changeColorMode: noop,\n colorMode: \"light\",\n forced: false,\n internalColorMode: \"light\",\n toggleColorMode: noop,\n})\n\nexport interface ColorModeProviderProps extends PropsWithChildren {\n /**\n * The forced color mode.\n */\n colorMode?: ColorMode\n /**\n * The config of the yamada ui.\n */\n config?: ThemeConfig\n /**\n * If `storage` is `cookie`, the cookie to use.\n * If not provided, the cookie will be set to `document.cookie`.\n */\n cookie?: string\n /**\n * The storage to use.\n * If you are using a server-side rendering library, you should use `cookie`.\n *\n * @default 'localStorage'\n */\n storage?: Storage\n /**\n * The key of the value saved in storage.\n *\n * @default 'color-mode'\n */\n storageKey?: string\n}\n\nexport const ColorModeProvider: FC<ColorModeProviderProps> = ({\n children,\n colorMode: forcedColorMode,\n config: {\n defaultColorMode = \"light\" as ColorModeWithSystem,\n disableTransitionOnChange = true,\n } = {},\n cookie,\n storage = cookie ? \"cookie\" : \"localStorage\",\n storageKey = COLOR_MODE_STORAGE_KEY,\n}) => {\n const storageManager = useMemo(\n () =>\n createStorageManager<ColorModeWithSystem, ColorMode>(\n storage,\n storageKey,\n defaultColorMode,\n cookie,\n ),\n [cookie, defaultColorMode, storage, storageKey],\n )\n const environment = useEnvironment()\n const { getDocument } = environment\n const [internalColorMode, setInternalColorMode] =\n useState<ColorModeWithSystem>(storageManager.get())\n const { getSystemColorMode, systemColorMode } = useSystemColorMode({\n callback: (systemColorMode) => {\n if (internalColorMode !== \"system\") return\n\n setClassName(systemColorMode === \"dark\")\n setDataset(systemColorMode)\n },\n defaultColorMode: storageManager.default(\n defaultColorMode === \"dark\" ? \"dark\" : \"light\",\n ),\n })\n const colorMode =\n internalColorMode === \"system\" ? systemColorMode : internalColorMode\n\n const setDataset = useCallback(\n (colorMode: ColorMode) => {\n const doc = getDocument()\n\n if (!doc) return\n\n const cleanup = disableTransitionOnChange\n ? getPreventTransition(environment)\n : undefined\n\n doc.documentElement.dataset.mode = colorMode\n doc.documentElement.style.colorScheme = colorMode\n\n cleanup?.()\n },\n [disableTransitionOnChange, environment, getDocument],\n )\n\n const setClassName = useCallback(\n (isDark: boolean) => {\n const doc = getDocument()\n\n if (!doc) return\n\n doc.body.classList.add(isDark ? \"dark\" : \"light\")\n doc.body.classList.remove(isDark ? \"light\" : \"dark\")\n },\n [getDocument],\n )\n\n const changeColorMode = useCallback(\n (internalColorMode: ColorModeWithSystem) => {\n const colorMode =\n internalColorMode === \"system\"\n ? getSystemColorMode()\n : internalColorMode\n\n setInternalColorMode(internalColorMode)\n setClassName(colorMode === \"dark\")\n setDataset(colorMode)\n\n storageManager.set(internalColorMode)\n },\n [storageManager, getSystemColorMode, setClassName, setDataset],\n )\n\n const toggleColorMode = useCallback(() => {\n changeColorMode(colorMode === \"dark\" ? \"light\" : \"dark\")\n }, [changeColorMode, colorMode])\n\n useEffect(() => {\n const internalColorMode = storageManager.get()\n\n changeColorMode(internalColorMode)\n }, [changeColorMode, storageManager])\n\n const context = useMemo(\n () => ({\n changeColorMode: forcedColorMode ? noop : changeColorMode,\n colorMode: forcedColorMode ?? colorMode,\n forced: forcedColorMode !== undefined,\n internalColorMode,\n toggleColorMode: forcedColorMode ? noop : toggleColorMode,\n }),\n [\n forcedColorMode,\n colorMode,\n internalColorMode,\n changeColorMode,\n toggleColorMode,\n ],\n )\n\n return <ColorModeContext value={context}>{children}</ColorModeContext>\n}\n\n/**\n * `useColorMode` is a custom hook that returns the current color mode.\n *\n * @see https://yamada-ui.com/docs/hooks/use-color-mode\n */\nexport const useColorMode = (): ColorModeContext => {\n const context = use(ColorModeContext)\n\n if (isEmptyObject(context))\n return {\n changeColorMode: noop,\n colorMode: \"light\",\n forced: false,\n internalColorMode: \"light\",\n toggleColorMode: noop,\n }\n else return context\n}\n"],"mappings":";;;;;;;;;;AA4BA,MAAa,mBAAmB,cAAgC;CAC9D,iBAAiBA,cAAAA;CACjB,WAAW;CACX,QAAQ;CACR,mBAAmB;CACnB,iBAAiBA,cAAAA;AACnB,CAAC;AA+BD,MAAa,qBAAiD,EAC5D,UACA,WAAW,iBACX,QAAQ,EACN,mBAAmB,SACnB,4BAA4B,SAC1B,CAAC,GACL,QACA,UAAU,SAAS,WAAW,gBAC9B,aAAa,6BACT;CACJ,MAAM,iBAAiB,cAEnB,qBACE,SACA,YACA,kBACA,MACF,GACF;EAAC;EAAQ;EAAkB;EAAS;CAAU,CAChD;CACA,MAAM,cAAc,eAAe;CACnC,MAAM,EAAE,gBAAgB;CACxB,MAAM,CAAC,mBAAmB,wBACxB,SAA8B,eAAe,IAAI,CAAC;CACpD,MAAM,EAAE,oBAAoB,oBAAoB,mBAAmB;EACjE,WAAW,oBAAoB;GAC7B,IAAI,sBAAsB,UAAU;GAEpC,aAAa,oBAAoB,MAAM;GACvC,WAAW,eAAe;EAC5B;EACA,kBAAkB,eAAe,QAC/B,qBAAqB,SAAS,SAAS,OACzC;CACF,CAAC;CACD,MAAM,YACJ,sBAAsB,WAAW,kBAAkB;CAErD,MAAM,aAAa,aAChB,cAAyB;EACxB,MAAM,MAAM,YAAY;EAExB,IAAI,CAAC,KAAK;EAEV,MAAM,UAAU,4BACZ,qBAAqB,WAAW,IAChC,KAAA;EAEJ,IAAI,gBAAgB,QAAQ,OAAO;EACnC,IAAI,gBAAgB,MAAM,cAAc;EAExC,UAAU;CACZ,GACA;EAAC;EAA2B;EAAa;CAAW,CACtD;CAEA,MAAM,eAAe,aAClB,WAAoB;EACnB,MAAM,MAAM,YAAY;EAExB,IAAI,CAAC,KAAK;EAEV,IAAI,KAAK,UAAU,IAAI,SAAS,SAAS,OAAO;EAChD,IAAI,KAAK,UAAU,OAAO,SAAS,UAAU,MAAM;CACrD,GACA,CAAC,WAAW,CACd;CAEA,MAAM,kBAAkB,aACrB,sBAA2C;EAC1C,MAAM,YACJ,sBAAsB,WAClB,mBAAmB,IACnB;EAEN,qBAAqB,iBAAiB;EACtC,aAAa,cAAc,MAAM;EACjC,WAAW,SAAS;EAEpB,eAAe,IAAI,iBAAiB;CACtC,GACA;EAAC;EAAgB;EAAoB;EAAc;CAAU,CAC/D;CAEA,MAAM,kBAAkB,kBAAkB;EACxC,gBAAgB,cAAc,SAAS,UAAU,MAAM;CACzD,GAAG,CAAC,iBAAiB,SAAS,CAAC;CAE/B,gBAAgB;EAGd,gBAF0B,eAAe,IAET,CAAC;CACnC,GAAG,CAAC,iBAAiB,cAAc,CAAC;CAmBpC,OAAO,oBAAC,kBAAD;EAAkB,OAjBT,eACP;GACL,iBAAiB,kBAAkBA,cAAAA,OAAO;GAC1C,WAAW,mBAAmB;GAC9B,QAAQ,oBAAoB,KAAA;GAC5B;GACA,iBAAiB,kBAAkBA,cAAAA,OAAO;EAC5C,IACA;GACE;GACA;GACA;GACA;GACA;EACF,CAGoC;EAAI;CAA2B,CAAA;AACvE;;;;;;AAOA,MAAa,qBAAuC;CAClD,MAAM,UAAU,IAAI,gBAAgB;CAEpC,KAAA,GAAA,cAAA,cAAA,CAAkB,OAAO,GACvB,OAAO;EACL,iBAAiBA,cAAAA;EACjB,WAAW;EACX,QAAQ;EACR,mBAAmB;EACnB,iBAAiBA,cAAAA;CACnB;MACG,OAAO;AACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-system.js","names":["bem"],"sources":["../../../../src/core/system/create-system.ts"],"sourcesContent":["import type { Dict, FlattenObjectOptions } from \"../../utils\"\nimport type { CSSAnimationObject, CSSModifierObject } from \"../css\"\nimport type {\n DefineThemeValue,\n System,\n ThemeConfig,\n UsageTheme,\n} from \"./index.types\"\nimport { bem, flattenObject, isArray, isObject, isUndefined } from \"../../utils\"\nimport { DEFAULT_VAR_PREFIX } from \"../constant\"\nimport { createBreakpoints } from \"./breakpoint\"\nimport { createLayers } from \"./layer\"\nimport { createVars, mergeVars } from \"./var\"\n\nexport type VariableResponsiveValue = Dict<\n [DefineThemeValue, DefineThemeValue] | DefineThemeValue\n>\n\nexport type VariableColorModeValue = [\n DefineThemeValue | Dict<DefineThemeValue>,\n DefineThemeValue | Dict<DefineThemeValue>,\n]\n\nexport type VariableKeyframeValue =\n | [\n CSSModifierObject | Dict<CSSModifierObject>,\n CSSModifierObject | Dict<CSSModifierObject>,\n ]\n | CSSModifierObject\n | Dict<CSSModifierObject>\n\nexport type VariableAnimationValue =\n | CSSAnimationObject\n | CSSAnimationObject[]\n | Dict<CSSAnimationObject>\n\nexport type VariableValue =\n | DefineThemeValue\n | VariableAnimationValue\n | VariableColorModeValue\n | VariableKeyframeValue\n | VariableResponsiveValue\n\ninterface VariableToken {\n semantic: boolean\n value: VariableValue\n}\n\nexport interface VariableTokens {\n [key: string]: VariableToken\n}\n\ninterface TokenOptions {\n [key: string]: FlattenObjectOptions\n}\n\nconst primaryTokens = {\n aspectRatios: {},\n blurs: {},\n borders: {},\n colors: {},\n durations: {},\n easings: {},\n fonts: {},\n fontSizes: {},\n fontWeights: {},\n letterSpacings: {},\n lineHeights: {},\n radii: {},\n sizes: {},\n spaces: {},\n zIndices: {},\n} satisfies TokenOptions\n\ntype PrimaryToken = keyof typeof primaryTokens\n\nconst secondaryTokens = {\n gradients: {},\n keyframes: { maxDepth: 1 },\n shadows: {},\n} satisfies TokenOptions\n\ntype SecondaryToken = keyof typeof secondaryTokens\n\nconst tertiaryTokens = {\n animations: { shouldProcess: (obj) => !obj.keyframes },\n} satisfies TokenOptions\n\ntype TertiaryToken = keyof typeof tertiaryTokens\n\nconst tokenMap: {\n [key in \"primary\" | \"secondary\" | \"tertiary\"]: TokenOptions\n} = {\n primary: primaryTokens,\n secondary: secondaryTokens,\n tertiary: tertiaryTokens,\n}\n\nexport type ThemeToken =\n | \"breakpoints\"\n | PrimaryToken\n | SecondaryToken\n | TertiaryToken\n\nexport const defaultSystem: System = {\n breakpoints: createBreakpoints(),\n config: {},\n cssMap: {},\n cssVars: {},\n layers: createLayers(),\n utils: { getClassName: bem },\n}\n\nexport function createSystem(\n theme: UsageTheme,\n config: ThemeConfig = {},\n): System {\n const prefix = config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n const breakpoints = createBreakpoints(theme.breakpoints, config.breakpoint)\n const layers = createLayers(config.css?.layers)\n const shouldProcess = config.theme?.responsive\n ? (obj: any) => !breakpoints.isResponsive(obj, true)\n : () => true\n\n const primaryTokens = {\n ...createTokens(theme, \"primary\", shouldProcess),\n ...createColorSchemeTokens(theme, undefined, shouldProcess),\n }\n const secondaryTokens = createTokens(theme, \"secondary\", shouldProcess)\n const tertiaryTokens = createTokens(theme, \"tertiary\", shouldProcess)\n\n const { cssMap, cssVars } = mergeVars(\n createVars(prefix, theme, breakpoints)(primaryTokens),\n createVars(prefix, theme, breakpoints)(secondaryTokens),\n createVars(prefix, theme, breakpoints)(tertiaryTokens),\n )()\n\n const getClassName = (\n block?: string,\n element?: string,\n modifier?: string,\n ) => {\n if (!block) return \"\"\n\n const className = bem(block, element, modifier)\n\n return `${prefix}-${className}`\n }\n\n if (theme.themeSchemes) {\n const themeSchemeEntries = Object.entries<Dict>(theme.themeSchemes)\n\n for (const [themeScheme, nestedTheme] of themeSchemeEntries) {\n const themeCondition = `[data-theme=${themeScheme}] &:not([data-theme]), &[data-theme=${themeScheme}]`\n\n const nestedPrimaryTokens = {\n ...createTokens(nestedTheme, \"primary\", shouldProcess),\n ...createColorSchemeTokens(theme, nestedTheme, shouldProcess),\n }\n const nestedSecondaryTokens = createTokens(\n nestedTheme,\n \"secondary\",\n shouldProcess,\n )\n const nestedTertiaryTokens = createTokens(\n nestedTheme,\n \"tertiary\",\n shouldProcess,\n )\n\n const { cssVars: nestedCSSVars } = mergeVars(\n createVars(prefix, theme, breakpoints)(nestedPrimaryTokens),\n createVars(prefix, theme, breakpoints)(nestedSecondaryTokens),\n createVars(prefix, theme, breakpoints)(nestedTertiaryTokens),\n )({ ...primaryTokens, ...secondaryTokens, ...tertiaryTokens })\n\n cssVars[themeCondition] = nestedCSSVars\n }\n }\n\n return {\n breakpoints,\n config,\n cssMap,\n cssVars,\n layers,\n utils: { getClassName },\n }\n}\n\nfunction createColorSchemeTokens(\n theme: Dict,\n nestedTheme: Dict | undefined,\n shouldProcess: FlattenObjectOptions[\"shouldProcess\"],\n) {\n const colors = { base: theme.colors ?? {}, nested: nestedTheme?.colors ?? {} }\n const semanticColors = {\n base: theme.semanticTokens?.colors ?? {},\n nested: nestedTheme?.semanticTokens?.colors ?? {},\n }\n const colorSchemeTokens = flattenObject(\n (nestedTheme ?? theme).semanticTokens?.colorSchemes ?? {},\n { shouldProcess },\n )\n\n const results: VariableTokens = {}\n\n function insertToken(\n primaryKey: string,\n secondaryKey: string | undefined,\n value: any,\n ) {\n if (isUndefined(value)) return\n\n if (!secondaryKey || secondaryKey === \"base\") {\n results[`colors.${primaryKey}`] = { semantic: true, value }\n } else {\n results[`colors.${primaryKey}.${secondaryKey}`] = {\n semantic: true,\n value,\n }\n }\n }\n\n function processValue(primaryKey: string, colors: any, keyOrValue: any) {\n const value = colors.nested[keyOrValue] ?? colors.base[keyOrValue]\n\n if (isObject(value)) {\n const tokens = flattenObject(value, { shouldProcess })\n\n Object.keys(tokens).forEach((secondaryKey) => {\n const value =\n secondaryKey === \"base\" ? keyOrValue : `${keyOrValue}.${secondaryKey}`\n\n insertToken(primaryKey, secondaryKey, value)\n })\n } else {\n insertToken(primaryKey, undefined, keyOrValue)\n }\n }\n\n function processColorModeValue(\n primaryKey: string,\n colors: any,\n keyOrValue: any[],\n ) {\n const [lightValue, darkValue] = keyOrValue\n const lightColors = colors.nested[lightValue] ?? colors.base[lightValue]\n const darkColors = colors.nested[darkValue] ?? colors.base[darkValue]\n\n if (isObject(lightColors) && isObject(darkColors)) {\n const tokens = flattenObject(lightColors, { shouldProcess })\n\n Object.keys(tokens).forEach((secondaryKey) => {\n const value = [\n secondaryKey === \"base\"\n ? lightValue\n : `${lightValue}.${secondaryKey}`,\n secondaryKey === \"base\" ? darkValue : `${darkValue}.${secondaryKey}`,\n ]\n\n insertToken(primaryKey, secondaryKey, value)\n })\n } else if (!isObject(lightValue) && !isObject(darkValue)) {\n insertToken(primaryKey, undefined, [lightValue, darkValue])\n }\n }\n\n Object.entries(colorSchemeTokens).forEach(([primaryKey, value]) => {\n if (isArray(value)) {\n processColorModeValue(primaryKey, colors, value)\n processColorModeValue(primaryKey, semanticColors, value)\n } else {\n processValue(primaryKey, colors, value)\n processValue(primaryKey, semanticColors, value)\n }\n })\n\n return results\n}\n\nfunction createTokens(\n theme: Dict,\n target: \"primary\" | \"secondary\" | \"tertiary\",\n shouldProcess: FlattenObjectOptions[\"shouldProcess\"] = () => true,\n) {\n const results: VariableTokens = {}\n\n Object.entries(tokenMap[target]).forEach(\n ([primaryKey, { shouldProcess: shouldProcessProp, ...rest }]) => {\n const options: FlattenObjectOptions = {\n ...rest,\n shouldProcess: (obj) =>\n shouldProcess(obj) && (!shouldProcessProp || shouldProcessProp(obj)),\n }\n\n const tokens = flattenObject(theme[primaryKey] ?? {}, options)\n const semanticTokens = flattenObject(\n theme.semanticTokens?.[primaryKey] ?? {},\n options,\n )\n\n Object.entries(tokens).forEach(([secondaryKey, value]) => {\n const token = `${primaryKey}.${secondaryKey}`\n\n results[token] = { semantic: false, value }\n })\n\n Object.entries(semanticTokens).forEach(([secondaryKey, value]) => {\n let token = `${primaryKey}.${secondaryKey}`\n\n if (token.endsWith(\".base\")) token = token.replace(\".base\", \"\")\n\n results[token] = { semantic: true, value }\n })\n },\n )\n\n return results\n}\n"],"mappings":";;;;;;AA0FA,MAAM,WAEF;CACF,SAAS;EApCT,cAAc,CAAC;EACf,OAAO,CAAC;EACR,SAAS,CAAC;EACV,QAAQ,CAAC;EACT,WAAW,CAAC;EACZ,SAAS,CAAC;EACV,OAAO,CAAC;EACR,WAAW,CAAC;EACZ,aAAa,CAAC;EACd,gBAAgB,CAAC;EACjB,aAAa,CAAC;EACd,OAAO,CAAC;EACR,OAAO,CAAC;EACR,QAAQ,CAAC;EACT,UAAU,CAAC;CAsBU;CACrB,WAAW;EAjBX,WAAW,CAAC;EACZ,WAAW,EAAE,UAAU,EAAE;EACzB,SAAS,CAAC;CAee;CACzB,UAAU,EAVV,YAAY,EAAE,gBAAgB,QAAQ,CAAC,IAAI,UAAU,EAU9B;AACzB;AAQA,MAAa,gBAAwB;CACnC,aAAa,kBAAkB;CAC/B,QAAQ,CAAC;CACT,QAAQ,CAAC;CACT,SAAS,CAAC;CACV,QAAQ,aAAa;CACrB,OAAO,EAAE,cAAcA,cAAAA,IAAI;AAC7B;AAEA,SAAgB,aACd,OACA,SAAsB,CAAC,GACf;CACR,MAAM,SAAS,OAAO,KAAK,aAAA;CAC3B,MAAM,cAAc,kBAAkB,MAAM,aAAa,OAAO,UAAU;CAC1E,MAAM,SAAS,aAAa,OAAO,KAAK,MAAM;CAC9C,MAAM,gBAAgB,OAAO,OAAO,cAC/B,QAAa,CAAC,YAAY,aAAa,KAAK,IAAI,UAC3C;CAEV,MAAM,gBAAgB;EACpB,GAAG,aAAa,OAAO,WAAW,aAAa;EAC/C,GAAG,wBAAwB,OAAO,KAAA,GAAW,aAAa;CAC5D;CACA,MAAM,kBAAkB,aAAa,OAAO,aAAa,aAAa;CACtE,MAAM,iBAAiB,aAAa,OAAO,YAAY,aAAa;CAEpE,MAAM,EAAE,QAAQ,YAAY,UAC1B,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,aAAa,GACpD,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,eAAe,GACtD,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,cAAc,CACvD,CAAC,CAAC;CAEF,MAAM,gBACJ,OACA,SACA,aACG;EACH,IAAI,CAAC,OAAO,OAAO;EAInB,OAAO,GAAG,OAAO,IAAA,GAAA,cAAA,IAAA,CAFK,OAAO,SAAS,QAEV;CAC9B;CAEA,IAAI,MAAM,cAAc;EACtB,MAAM,qBAAqB,OAAO,QAAc,MAAM,YAAY;EAElE,KAAK,MAAM,CAAC,aAAa,gBAAgB,oBAAoB;GAC3D,MAAM,iBAAiB,eAAe,YAAY,sCAAsC,YAAY;GAEpG,MAAM,sBAAsB;IAC1B,GAAG,aAAa,aAAa,WAAW,aAAa;IACrD,GAAG,wBAAwB,OAAO,aAAa,aAAa;GAC9D;GACA,MAAM,wBAAwB,aAC5B,aACA,aACA,aACF;GACA,MAAM,uBAAuB,aAC3B,aACA,YACA,aACF;GAEA,MAAM,EAAE,SAAS,kBAAkB,UACjC,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,mBAAmB,GAC1D,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,qBAAqB,GAC5D,WAAW,QAAQ,OAAO,WAAW,CAAC,CAAC,oBAAoB,CAC7D,CAAC,CAAC;IAAE,GAAG;IAAe,GAAG;IAAiB,GAAG;GAAe,CAAC;GAE7D,QAAQ,kBAAkB;EAC5B;CACF;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,OAAO,EAAE,aAAa;CACxB;AACF;AAEA,SAAS,wBACP,OACA,aACA,eACA;CACA,MAAM,SAAS;EAAE,MAAM,MAAM,UAAU,CAAC;EAAG,QAAQ,aAAa,UAAU,CAAC;CAAE;CAC7E,MAAM,iBAAiB;EACrB,MAAM,MAAM,gBAAgB,UAAU,CAAC;EACvC,QAAQ,aAAa,gBAAgB,UAAU,CAAC;CAClD;CACA,MAAM,qBAAA,GAAA,cAAA,cAAA,EACH,eAAe,MAAA,CAAO,gBAAgB,gBAAgB,CAAC,GACxD,EAAE,cAAc,CAClB;CAEA,MAAM,UAA0B,CAAC;CAEjC,SAAS,YACP,YACA,cACA,OACA;EACA,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;EAExB,IAAI,CAAC,gBAAgB,iBAAiB,QACpC,QAAQ,UAAU,gBAAgB;GAAE,UAAU;GAAM;EAAM;OAE1D,QAAQ,UAAU,WAAW,GAAG,kBAAkB;GAChD,UAAU;GACV;EACF;CAEJ;CAEA,SAAS,aAAa,YAAoB,QAAa,YAAiB;EACtE,MAAM,QAAQ,OAAO,OAAO,eAAe,OAAO,KAAK;EAEvD,KAAA,GAAA,cAAA,SAAA,CAAa,KAAK,GAAG;GACnB,MAAM,UAAA,GAAA,cAAA,cAAA,CAAuB,OAAO,EAAE,cAAc,CAAC;GAErD,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,iBAAiB;IAI5C,YAAY,YAAY,cAFtB,iBAAiB,SAAS,aAAa,GAAG,WAAW,GAAG,cAEf;GAC7C,CAAC;EACH,OACE,YAAY,YAAY,KAAA,GAAW,UAAU;CAEjD;CAEA,SAAS,sBACP,YACA,QACA,YACA;EACA,MAAM,CAAC,YAAY,aAAa;EAChC,MAAM,cAAc,OAAO,OAAO,eAAe,OAAO,KAAK;EAC7D,MAAM,aAAa,OAAO,OAAO,cAAc,OAAO,KAAK;EAE3D,KAAA,GAAA,cAAA,SAAA,CAAa,WAAW,MAAA,GAAA,cAAA,SAAA,CAAc,UAAU,GAAG;GACjD,MAAM,UAAA,GAAA,cAAA,cAAA,CAAuB,aAAa,EAAE,cAAc,CAAC;GAE3D,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,iBAAiB;IAQ5C,YAAY,YAAY,cAAc,CANpC,iBAAiB,SACb,aACA,GAAG,WAAW,GAAG,gBACrB,iBAAiB,SAAS,YAAY,GAAG,UAAU,GAAG,cAGd,CAAC;GAC7C,CAAC;EACH,OAAO,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,UAAU,KAAK,EAAA,GAAA,cAAA,SAAA,CAAU,SAAS,GACrD,YAAY,YAAY,KAAA,GAAW,CAAC,YAAY,SAAS,CAAC;CAE9D;CAEA,OAAO,QAAQ,iBAAiB,CAAC,CAAC,SAAS,CAAC,YAAY,WAAW;EACjE,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,GAAG;GAClB,sBAAsB,YAAY,QAAQ,KAAK;GAC/C,sBAAsB,YAAY,gBAAgB,KAAK;EACzD,OAAO;GACL,aAAa,YAAY,QAAQ,KAAK;GACtC,aAAa,YAAY,gBAAgB,KAAK;EAChD;CACF,CAAC;CAED,OAAO;AACT;AAEA,SAAS,aACP,OACA,QACA,sBAA6D,MAC7D;CACA,MAAM,UAA0B,CAAC;CAEjC,OAAO,QAAQ,SAAS,OAAO,CAAC,CAAC,SAC9B,CAAC,YAAY,EAAE,eAAe,mBAAmB,GAAG,YAAY;EAC/D,MAAM,UAAgC;GACpC,GAAG;GACH,gBAAgB,QACd,cAAc,GAAG,MAAM,CAAC,qBAAqB,kBAAkB,GAAG;EACtE;EAEA,MAAM,UAAA,GAAA,cAAA,cAAA,CAAuB,MAAM,eAAe,CAAC,GAAG,OAAO;EAC7D,MAAM,kBAAA,GAAA,cAAA,cAAA,CACJ,MAAM,iBAAiB,eAAe,CAAC,GACvC,OACF;EAEA,OAAO,QAAQ,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,WAAW;GACxD,MAAM,QAAQ,GAAG,WAAW,GAAG;GAE/B,QAAQ,SAAS;IAAE,UAAU;IAAO;GAAM;EAC5C,CAAC;EAED,OAAO,QAAQ,cAAc,CAAC,CAAC,SAAS,CAAC,cAAc,WAAW;GAChE,IAAI,QAAQ,GAAG,WAAW,GAAG;GAE7B,IAAI,MAAM,SAAS,OAAO,GAAG,QAAQ,MAAM,QAAQ,SAAS,EAAE;GAE9D,QAAQ,SAAS;IAAE,UAAU;IAAM;GAAM;EAC3C,CAAC;CACH,CACF;CAEA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"create-system.js","names":["bem"],"sources":["../../../../src/core/system/create-system.ts"],"sourcesContent":["import type { Dict, FlattenObjectOptions } from \"../../utils\"\nimport type { CSSAnimationObject, CSSModifierObject } from \"../css\"\nimport type {\n DefineThemeValue,\n System,\n ThemeConfig,\n UsageTheme,\n} from \"./index.types\"\nimport { bem, flattenObject, isArray, isObject, isUndefined } from \"../../utils\"\nimport { DEFAULT_VAR_PREFIX } from \"../constant\"\nimport { createBreakpoints } from \"./breakpoint\"\nimport { createLayers } from \"./layer\"\nimport { createVars, mergeVars } from \"./var\"\n\nexport type VariableResponsiveValue = Dict<\n [DefineThemeValue, DefineThemeValue] | DefineThemeValue\n>\n\nexport type VariableColorModeValue = [\n DefineThemeValue | Dict<DefineThemeValue>,\n DefineThemeValue | Dict<DefineThemeValue>,\n]\n\nexport type VariableKeyframeValue =\n | [\n CSSModifierObject | Dict<CSSModifierObject>,\n CSSModifierObject | Dict<CSSModifierObject>,\n ]\n | CSSModifierObject\n | Dict<CSSModifierObject>\n\nexport type VariableAnimationValue =\n | CSSAnimationObject\n | CSSAnimationObject[]\n | Dict<CSSAnimationObject>\n\nexport type VariableValue =\n | DefineThemeValue\n | VariableAnimationValue\n | VariableColorModeValue\n | VariableKeyframeValue\n | VariableResponsiveValue\n\ninterface VariableToken {\n semantic: boolean\n value: VariableValue\n}\n\nexport interface VariableTokens {\n [key: string]: VariableToken\n}\n\ninterface TokenOptions {\n [key: string]: FlattenObjectOptions\n}\n\nconst primaryTokens = {\n aspectRatios: {},\n blurs: {},\n borders: {},\n colors: {},\n durations: {},\n easings: {},\n fonts: {},\n fontSizes: {},\n fontWeights: {},\n letterSpacings: {},\n lineHeights: {},\n radii: {},\n sizes: {},\n spaces: {},\n zIndices: {},\n} satisfies TokenOptions\n\ntype PrimaryToken = keyof typeof primaryTokens\n\nconst secondaryTokens = {\n gradients: {},\n keyframes: { maxDepth: 1 },\n shadows: {},\n} satisfies TokenOptions\n\ntype SecondaryToken = keyof typeof secondaryTokens\n\nconst tertiaryTokens = {\n animations: { shouldProcess: (obj) => !obj.keyframes },\n} satisfies TokenOptions\n\ntype TertiaryToken = keyof typeof tertiaryTokens\n\nconst tokenMap: {\n [key in \"primary\" | \"secondary\" | \"tertiary\"]: TokenOptions\n} = {\n primary: primaryTokens,\n secondary: secondaryTokens,\n tertiary: tertiaryTokens,\n}\n\nexport type ThemeToken =\n | \"breakpoints\"\n | PrimaryToken\n | SecondaryToken\n | TertiaryToken\n\nexport const defaultSystem: System = {\n breakpoints: createBreakpoints(),\n config: {},\n cssMap: {},\n cssVars: {},\n layers: createLayers(),\n utils: { getClassName: bem },\n}\n\nexport function createSystem(\n theme: UsageTheme,\n config: ThemeConfig = {},\n): System {\n const prefix = config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n const breakpoints = createBreakpoints(theme.breakpoints, config.breakpoint)\n const layers = createLayers(config.css?.layers)\n const shouldProcess = config.theme?.responsive\n ? (obj: any) => !breakpoints.isResponsive(obj, true)\n : () => true\n\n const primaryTokens = {\n ...createTokens(theme, \"primary\", shouldProcess),\n ...createColorSchemeTokens(theme, undefined, shouldProcess),\n }\n const secondaryTokens = createTokens(theme, \"secondary\", shouldProcess)\n const tertiaryTokens = createTokens(theme, \"tertiary\", shouldProcess)\n\n const { cssMap, cssVars } = mergeVars(\n createVars(prefix, theme, breakpoints)(primaryTokens),\n createVars(prefix, theme, breakpoints)(secondaryTokens),\n createVars(prefix, theme, breakpoints)(tertiaryTokens),\n )()\n\n const getClassName = (\n block?: string,\n element?: string,\n modifier?: string,\n ) => {\n if (!block) return \"\"\n\n const className = bem(block, element, modifier)\n\n return `${prefix}-${className}`\n }\n\n if (theme.themeSchemes) {\n const themeSchemeEntries = Object.entries<Dict>(theme.themeSchemes)\n\n for (const [themeScheme, nestedTheme] of themeSchemeEntries) {\n const themeCondition = `[data-theme=${themeScheme}] &:not([data-theme]), &[data-theme=${themeScheme}]`\n\n const nestedPrimaryTokens = {\n ...createTokens(nestedTheme, \"primary\", shouldProcess),\n ...createColorSchemeTokens(theme, nestedTheme, shouldProcess),\n }\n const nestedSecondaryTokens = createTokens(\n nestedTheme,\n \"secondary\",\n shouldProcess,\n )\n const nestedTertiaryTokens = createTokens(\n nestedTheme,\n \"tertiary\",\n shouldProcess,\n )\n\n const { cssVars: nestedCSSVars } = mergeVars(\n createVars(prefix, theme, breakpoints)(nestedPrimaryTokens),\n createVars(prefix, theme, breakpoints)(nestedSecondaryTokens),\n createVars(prefix, theme, breakpoints)(nestedTertiaryTokens),\n )({ ...primaryTokens, ...secondaryTokens, ...tertiaryTokens })\n\n cssVars[themeCondition] = nestedCSSVars\n }\n }\n\n return {\n breakpoints,\n config,\n cssMap,\n cssVars,\n layers,\n utils: { getClassName },\n }\n}\n\nfunction createColorSchemeTokens(\n theme: Dict,\n nestedTheme: Dict | undefined,\n shouldProcess: FlattenObjectOptions[\"shouldProcess\"],\n) {\n const colors = { base: theme.colors ?? {}, nested: nestedTheme?.colors ?? {} }\n const semanticColors = {\n base: theme.semanticTokens?.colors ?? {},\n nested: nestedTheme?.semanticTokens?.colors ?? {},\n }\n const colorSchemeTokens = flattenObject(\n (nestedTheme ?? theme).semanticTokens?.colorSchemes ?? {},\n { shouldProcess },\n )\n\n const results: VariableTokens = {}\n\n function insertToken(\n primaryKey: string,\n secondaryKey: string | undefined,\n value: any,\n ) {\n if (isUndefined(value)) return\n\n if (!secondaryKey || secondaryKey === \"base\")\n results[`colors.${primaryKey}`] = { semantic: true, value }\n else\n results[`colors.${primaryKey}.${secondaryKey}`] = {\n semantic: true,\n value,\n }\n }\n\n function processValue(primaryKey: string, colors: any, keyOrValue: any) {\n const value = colors.nested[keyOrValue] ?? colors.base[keyOrValue]\n\n if (isObject(value)) {\n const tokens = flattenObject(value, { shouldProcess })\n\n Object.keys(tokens).forEach((secondaryKey) => {\n const value =\n secondaryKey === \"base\" ? keyOrValue : `${keyOrValue}.${secondaryKey}`\n\n insertToken(primaryKey, secondaryKey, value)\n })\n } else {\n insertToken(primaryKey, undefined, keyOrValue)\n }\n }\n\n function processColorModeValue(\n primaryKey: string,\n colors: any,\n keyOrValue: any[],\n ) {\n const [lightValue, darkValue] = keyOrValue\n const lightColors = colors.nested[lightValue] ?? colors.base[lightValue]\n const darkColors = colors.nested[darkValue] ?? colors.base[darkValue]\n\n if (isObject(lightColors) && isObject(darkColors)) {\n const tokens = flattenObject(lightColors, { shouldProcess })\n\n Object.keys(tokens).forEach((secondaryKey) => {\n const value = [\n secondaryKey === \"base\"\n ? lightValue\n : `${lightValue}.${secondaryKey}`,\n secondaryKey === \"base\" ? darkValue : `${darkValue}.${secondaryKey}`,\n ]\n\n insertToken(primaryKey, secondaryKey, value)\n })\n } else if (!isObject(lightValue) && !isObject(darkValue)) {\n insertToken(primaryKey, undefined, [lightValue, darkValue])\n }\n }\n\n Object.entries(colorSchemeTokens).forEach(([primaryKey, value]) => {\n if (isArray(value)) {\n processColorModeValue(primaryKey, colors, value)\n processColorModeValue(primaryKey, semanticColors, value)\n } else {\n processValue(primaryKey, colors, value)\n processValue(primaryKey, semanticColors, value)\n }\n })\n\n return results\n}\n\nfunction createTokens(\n theme: Dict,\n target: \"primary\" | \"secondary\" | \"tertiary\",\n shouldProcess: FlattenObjectOptions[\"shouldProcess\"] = () => true,\n) {\n const results: VariableTokens = {}\n\n Object.entries(tokenMap[target]).forEach(\n ([primaryKey, { shouldProcess: shouldProcessProp, ...rest }]) => {\n const options: FlattenObjectOptions = {\n ...rest,\n shouldProcess: (obj) =>\n shouldProcess(obj) && (!shouldProcessProp || shouldProcessProp(obj)),\n }\n\n const tokens = flattenObject(theme[primaryKey] ?? {}, options)\n const semanticTokens = flattenObject(\n theme.semanticTokens?.[primaryKey] ?? {},\n options,\n )\n\n Object.entries(tokens).forEach(([secondaryKey, value]) => {\n const token = `${primaryKey}.${secondaryKey}`\n\n results[token] = { semantic: false, value }\n })\n\n Object.entries(semanticTokens).forEach(([secondaryKey, value]) => {\n let token = `${primaryKey}.${secondaryKey}`\n\n if (token.endsWith(\".base\")) token = token.replace(\".base\", \"\")\n\n results[token] = { semantic: true, value }\n })\n },\n )\n\n return results\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-provider.js","names":[],"sources":["../../../../src/core/system/environment-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport { createContext, use, useCallback, useMemo, useRef } from \"react\"\nimport { createdDom, getDocument, getWindow, runIfFn } from \"../../utils\"\n\nexport type RootNode = Document | Node | ShadowRoot\n\nexport interface Environment {\n getDocument: () => Document | undefined\n getRootNode: () => RootNode | undefined\n getWindow: () => undefined | Window\n}\n\nexport const defaultEnvironment: Environment = {\n getDocument: () => document,\n getRootNode: () => document,\n getWindow: () => window,\n}\n\nconst EnvironmentContext = createContext<Environment>(defaultEnvironment)\n\nexport interface EnvironmentProviderProps extends PropsWithChildren {\n value?: (() => RootNode) | RootNode\n}\n\nexport const EnvironmentProvider: FC<EnvironmentProviderProps> = ({\n children,\n value,\n}) => {\n const ref = useRef<HTMLSpanElement>(null)\n\n const getRootNode = useCallback(() => {\n return runIfFn(value) ?? ref.current?.getRootNode() ?? document\n }, [value, ref])\n\n const context = useMemo<Environment>(() => {\n if (createdDom())
|
|
1
|
+
{"version":3,"file":"environment-provider.js","names":[],"sources":["../../../../src/core/system/environment-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, PropsWithChildren } from \"react\"\nimport { createContext, use, useCallback, useMemo, useRef } from \"react\"\nimport { createdDom, getDocument, getWindow, runIfFn } from \"../../utils\"\n\nexport type RootNode = Document | Node | ShadowRoot\n\nexport interface Environment {\n getDocument: () => Document | undefined\n getRootNode: () => RootNode | undefined\n getWindow: () => undefined | Window\n}\n\nexport const defaultEnvironment: Environment = {\n getDocument: () => document,\n getRootNode: () => document,\n getWindow: () => window,\n}\n\nconst EnvironmentContext = createContext<Environment>(defaultEnvironment)\n\nexport interface EnvironmentProviderProps extends PropsWithChildren {\n value?: (() => RootNode) | RootNode\n}\n\nexport const EnvironmentProvider: FC<EnvironmentProviderProps> = ({\n children,\n value,\n}) => {\n const ref = useRef<HTMLSpanElement>(null)\n\n const getRootNode = useCallback(() => {\n return runIfFn(value) ?? ref.current?.getRootNode() ?? document\n }, [value, ref])\n\n const context = useMemo<Environment>(() => {\n if (createdDom())\n return {\n getDocument: () => getDocument(getRootNode()),\n getRootNode,\n getWindow: () => getWindow(getRootNode()),\n }\n else\n return {\n getDocument: () => undefined,\n getRootNode: () => undefined,\n getWindow: () => undefined,\n }\n }, [getRootNode])\n\n return (\n <EnvironmentContext value={context}>\n {children}\n\n {!value ? <span ref={ref} hidden /> : null}\n </EnvironmentContext>\n )\n}\n\nexport const useEnvironment = () => {\n return use(EnvironmentContext)\n}\n"],"mappings":";;;;;AAcA,MAAa,qBAAkC;CAC7C,mBAAmB;CACnB,mBAAmB;CACnB,iBAAiB;AACnB;AAEA,MAAM,qBAAqB,cAA2B,kBAAkB;AAMxE,MAAa,uBAAqD,EAChE,UACA,YACI;CACJ,MAAM,MAAM,OAAwB,IAAI;CAExC,MAAM,cAAc,kBAAkB;EACpC,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,KAAK,IAAI,SAAS,YAAY,KAAK;CACzD,GAAG,CAAC,OAAO,GAAG,CAAC;CAiBf,OACE,qBAAC,oBAAD;EAAoB,OAhBN,cAA2B;GACzC,KAAA,GAAA,cAAA,WAAA,CAAe,GACb,OAAO;IACL,oBAAA,GAAA,cAAA,YAAA,CAA+B,YAAY,CAAC;IAC5C;IACA,kBAAA,GAAA,cAAA,UAAA,CAA2B,YAAY,CAAC;GAC1C;QAEA,OAAO;IACL,mBAAmB,KAAA;IACnB,mBAAmB,KAAA;IACnB,iBAAiB,KAAA;GACnB;EACJ,GAAG,CAAC,WAAW,CAGoB;YAAjC,CACG,UAEA,CAAC,QAAQ,oBAAC,QAAD;GAAW;GAAK,QAAA;EAAQ,CAAA,IAAI,IACpB;;AAExB;AAEA,MAAa,uBAAuB;CAClC,OAAO,IAAI,kBAAkB;AAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-manager.js","names":[],"sources":["../../../../src/core/system/storage-manager.ts"],"sourcesContent":["\"use client\"\n\nexport type Storage = \"cookie\" | \"localStorage\"\n\nconst hasSupport = !!(globalThis.document as Document | undefined)\n\nfunction parseCookie<Y extends string>(\n cookie: string,\n key: string,\n): undefined | Y {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`))\n\n return match?.[2] as undefined | Y\n}\n\nexport interface StorageManager<Y extends string, M extends Y = Y> {\n default(value: M): M\n get(value?: Y): Y\n set(value: Y): void\n}\n\nexport function createStorageManager<Y extends string, M extends Y = Y>(\n storage: Storage,\n storageKey: string,\n defaultValue: Y,\n cookie?: string,\n): StorageManager<Y, M> {\n return {\n default(value) {\n const defaultStorageKey = `default-${storageKey}`\n\n if (cookie) return parseCookie(cookie, defaultStorageKey) || value\n\n if (storage === \"localStorage\") {\n try {\n return (localStorage.getItem(defaultStorageKey) as M | null) || value\n } catch {\n return value\n }\n } else {\n if (!hasSupport) return value\n\n return parseCookie(document.cookie, defaultStorageKey) || value\n }\n },\n get(value = defaultValue) {\n if (cookie) return parseCookie(cookie, storageKey) || value\n\n if (storage === \"localStorage\") {\n try {\n return (localStorage.getItem(storageKey) as null | Y) || value\n } catch {\n return value\n }\n } else {\n if (!hasSupport) return value\n\n return parseCookie(document.cookie, storageKey) || value\n }\n },\n set(value: Y) {\n if (storage === \"localStorage\")
|
|
1
|
+
{"version":3,"file":"storage-manager.js","names":[],"sources":["../../../../src/core/system/storage-manager.ts"],"sourcesContent":["\"use client\"\n\nexport type Storage = \"cookie\" | \"localStorage\"\n\nconst hasSupport = !!(globalThis.document as Document | undefined)\n\nfunction parseCookie<Y extends string>(\n cookie: string,\n key: string,\n): undefined | Y {\n const match = cookie.match(new RegExp(`(^| )${key}=([^;]+)`))\n\n return match?.[2] as undefined | Y\n}\n\nexport interface StorageManager<Y extends string, M extends Y = Y> {\n default(value: M): M\n get(value?: Y): Y\n set(value: Y): void\n}\n\nexport function createStorageManager<Y extends string, M extends Y = Y>(\n storage: Storage,\n storageKey: string,\n defaultValue: Y,\n cookie?: string,\n): StorageManager<Y, M> {\n return {\n default(value) {\n const defaultStorageKey = `default-${storageKey}`\n\n if (cookie) return parseCookie(cookie, defaultStorageKey) || value\n\n if (storage === \"localStorage\") {\n try {\n return (localStorage.getItem(defaultStorageKey) as M | null) || value\n } catch {\n return value\n }\n } else {\n if (!hasSupport) return value\n\n return parseCookie(document.cookie, defaultStorageKey) || value\n }\n },\n get(value = defaultValue) {\n if (cookie) return parseCookie(cookie, storageKey) || value\n\n if (storage === \"localStorage\") {\n try {\n return (localStorage.getItem(storageKey) as null | Y) || value\n } catch {\n return value\n }\n } else {\n if (!hasSupport) return value\n\n return parseCookie(document.cookie, storageKey) || value\n }\n },\n set(value: Y) {\n if (storage === \"localStorage\") localStorage.setItem(storageKey, value)\n else document.cookie = `${storageKey}=${value}; max-age=31536000; path=/`\n },\n }\n}\n"],"mappings":";;AAIA,MAAM,aAAa,CAAC,CAAE,WAAW;AAEjC,SAAS,YACP,QACA,KACe;CAGf,OAFc,OAAO,MAAM,IAAI,OAAO,QAAQ,IAAI,SAAS,CAEhD,CAAC,GAAG;AACjB;AAQA,SAAgB,qBACd,SACA,YACA,cACA,QACsB;CACtB,OAAO;EACL,QAAQ,OAAO;GACb,MAAM,oBAAoB,WAAW;GAErC,IAAI,QAAQ,OAAO,YAAY,QAAQ,iBAAiB,KAAK;GAE7D,IAAI,YAAY,gBACd,IAAI;IACF,OAAQ,aAAa,QAAQ,iBAAiB,KAAkB;GAClE,QAAQ;IACN,OAAO;GACT;QACK;IACL,IAAI,CAAC,YAAY,OAAO;IAExB,OAAO,YAAY,SAAS,QAAQ,iBAAiB,KAAK;GAC5D;EACF;EACA,IAAI,QAAQ,cAAc;GACxB,IAAI,QAAQ,OAAO,YAAY,QAAQ,UAAU,KAAK;GAEtD,IAAI,YAAY,gBACd,IAAI;IACF,OAAQ,aAAa,QAAQ,UAAU,KAAkB;GAC3D,QAAQ;IACN,OAAO;GACT;QACK;IACL,IAAI,CAAC,YAAY,OAAO;IAExB,OAAO,YAAY,SAAS,QAAQ,UAAU,KAAK;GACrD;EACF;EACA,IAAI,OAAU;GACZ,IAAI,YAAY,gBAAgB,aAAa,QAAQ,YAAY,KAAK;QACjE,SAAS,SAAS,GAAG,WAAW,GAAG,MAAM;EAChD;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-script.js","names":[],"sources":["../../../../src/core/system/storage-script.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ColorModeWithSystem, ThemeScheme } from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport { createdDom } from \"../../utils\"\nimport { COLOR_MODE_STORAGE_KEY, THEME_SCHEME_STORAGE_KEY } from \"../constant\"\n\nexport interface StorageScriptProps<Y extends string> {\n defaultValue?: Y\n key?: string\n nonce?: string\n type?: Storage\n}\n\nexport function getStorageScript<Y extends string>(\n type: \"colorMode\" | \"themeScheme\",\n defaultKey: string,\n) {\n return function ({\n key = defaultKey,\n type: storage = \"localStorage\",\n defaultValue,\n }: Omit<StorageScriptProps<Y>, \"nonce\"> = {}) {\n if (type === \"colorMode\")
|
|
1
|
+
{"version":3,"file":"storage-script.js","names":[],"sources":["../../../../src/core/system/storage-script.tsx"],"sourcesContent":["\"use client\"\n\nimport type { ColorModeWithSystem, ThemeScheme } from \"./index.types\"\nimport type { Storage } from \"./storage-manager\"\nimport { createdDom } from \"../../utils\"\nimport { COLOR_MODE_STORAGE_KEY, THEME_SCHEME_STORAGE_KEY } from \"../constant\"\n\nexport interface StorageScriptProps<Y extends string> {\n defaultValue?: Y\n key?: string\n nonce?: string\n type?: Storage\n}\n\nexport function getStorageScript<Y extends string>(\n type: \"colorMode\" | \"themeScheme\",\n defaultKey: string,\n) {\n return function ({\n key = defaultKey,\n type: storage = \"localStorage\",\n defaultValue,\n }: Omit<StorageScriptProps<Y>, \"nonce\"> = {}) {\n if (type === \"colorMode\")\n if (storage === \"localStorage\")\n return `!(function(){try{var a=function(c){var v=\"(prefers-color-scheme: dark)\",h=window.matchMedia(v).matches?\"dark\":\"light\",r=c===\"system\"?h:c,o=document.documentElement,s=document.body,l=\"light\",d=\"dark\",i=r===\"dark\";return s.classList.add(i?d:l),s.classList.remove(i?l:d),o.style.colorScheme=r,o.dataset.mode=r,r},m=\"${defaultValue}\",e=\"${key}\",t=localStorage.getItem(e);t?a(t):(localStorage.setItem(e,m),localStorage.setItem(\\`default-\\${e}\\`,a(m)))}catch{}})();`\n else\n return `!(function(){try{var a=function(o){var l=\"(prefers-color-scheme: dark)\",v=window.matchMedia(l).matches?\"dark\":\"light\",e=o===\"system\"?v:o,d=document.documentElement,m=document.body,i=\"light\",n=\"dark\",s=e===\"dark\";return m.classList.add(s?n:i),m.classList.remove(s?i:n),d.style.colorScheme=e,d.dataset.mode=e,e},h=\"${defaultValue}\",r=\"${key}\",t=document.cookie.match(new RegExp(\"(^| )\".concat(r,\"=([^;]+)\"))),c=t?t[2]:null;c?a(c):(document.cookie=\"\".concat(r,\"=\").concat(h,\"; max-age=31536000; path=/\"),document.cookie=\"\".concat(\\`default-\\${r}\\`,\"=\").concat(a(h),\"; max-age=31536000; path=/\"))}catch{}})();`\n else if (storage === \"localStorage\")\n return `!(function(){try{var a=function(c){var o=document.documentElement;return o.dataset.theme=c,c},m='${defaultValue}',e='${key}',t=localStorage.getItem(e);t?a(t):localStorage.setItem(e, a(m))}catch{}})();`\n else\n return `!(function(){try{var a=function(c){var o=document.documentElement;return o.dataset.theme=c,c},h='${defaultValue}',r='${key}',t=document.cookie.match(new RegExp('(^| )'.concat(r,'=([^;]+)'))),c=t?t[2]:null;c?a(c):(document.cookie=''.concat(r,'=').concat(a(h),'; max-age=31536000; path=/'))}catch{}})();`\n }\n}\n\nexport function ColorModeScript({\n nonce,\n ...rest\n}: StorageScriptProps<ColorModeWithSystem>) {\n const html = getStorageScript(\n \"colorMode\",\n COLOR_MODE_STORAGE_KEY,\n )({ defaultValue: \"light\", ...rest })\n\n if (createdDom()) return null\n\n return <script dangerouslySetInnerHTML={{ __html: html }} nonce={nonce} />\n}\n\nexport function ThemeSchemeScript({\n nonce,\n ...rest\n}: StorageScriptProps<ThemeScheme>) {\n const html = getStorageScript(\n \"themeScheme\",\n THEME_SCHEME_STORAGE_KEY,\n )({\n defaultValue: \"base\",\n ...rest,\n })\n\n if (createdDom()) return null\n\n return <script dangerouslySetInnerHTML={{ __html: html }} nonce={nonce} />\n}\n"],"mappings":";;;;;AAcA,SAAgB,iBACd,MACA,YACA;CACA,OAAO,SAAU,EACf,MAAM,YACN,MAAM,UAAU,gBAChB,iBACwC,CAAC,GAAG;EAC5C,IAAI,SAAS,aACX,IAAI,YAAY,gBACd,OAAO,4TAA4T,aAAa,OAAO,IAAI;OAE3V,OAAO,4TAA4T,aAAa,OAAO,IAAI;OAC1V,IAAI,YAAY,gBACnB,OAAO,oGAAoG,aAAa,OAAO,IAAI;OAEnI,OAAO,oGAAoG,aAAa,OAAO,IAAI;CACvI;AACF;AAEA,SAAgB,gBAAgB,EAC9B,OACA,GAAG,QACuC;CAC1C,MAAM,OAAO,iBACX,aACA,sBACF,CAAC,CAAC;EAAE,cAAc;EAAS,GAAG;CAAK,CAAC;CAEpC,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG,OAAO;CAEzB,OAAO,oBAAC,UAAD;EAAQ,yBAAyB,EAAE,QAAQ,KAAK;EAAU;CAAQ,CAAA;AAC3E;AAEA,SAAgB,kBAAkB,EAChC,OACA,GAAG,QAC+B;CAClC,MAAM,OAAO,iBACX,eACA,wBACF,CAAC,CAAC;EACA,cAAc;EACd,GAAG;CACL,CAAC;CAED,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG,OAAO;CAEzB,OAAO,oBAAC,UAAD;EAAQ,yBAAyB,EAAE,QAAQ,KAAK;EAAU;CAAQ,CAAA;AAC3E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-system-color-mode.js","names":[],"sources":["../../../../src/core/system/use-system-color-mode.ts"],"sourcesContent":["\"use client\"\n\nimport type { ColorMode } from \"./index.types\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { fnAll, useCallbackRef, useSafeLayoutEffect } from \"../../utils\"\nimport { useEnvironment } from \"./environment-provider\"\n\nexport interface UseSystemColorModeProps {\n defaultColorMode: ColorMode\n callback?: (colorMode: ColorMode) => void\n}\n\n/**\n * `useSystemColorMode` is a custom hook that returns the current system color mode.\n */\nexport const useSystemColorMode = ({\n callback,\n defaultColorMode,\n}: UseSystemColorModeProps) => {\n const { getWindow } = useEnvironment()\n const callbackRef = useCallbackRef(callback)\n const [systemColorMode, setSystemColorMode] =\n useState<ColorMode>(defaultColorMode)\n\n const getSystemColorMode = useCallback(\n (fallback?: ColorMode) => {\n const mql = getWindow()?.matchMedia(\"(prefers-color-scheme: dark)\")\n const dark = mql?.matches ?? fallback === \"dark\"\n\n return dark ? \"dark\" : \"light\"\n },\n [getWindow],\n )\n\n const systemColorModeObserver = useCallback(\n (func: (cm: ColorMode) => void) => {\n const mql = getWindow()?.matchMedia(\"(prefers-color-scheme: dark)\")\n\n const listener = (e: MediaQueryListEvent) => {\n func(e.matches ? \"dark\" : \"light\")\n }\n\n if (typeof mql?.addListener === \"function\")
|
|
1
|
+
{"version":3,"file":"use-system-color-mode.js","names":[],"sources":["../../../../src/core/system/use-system-color-mode.ts"],"sourcesContent":["\"use client\"\n\nimport type { ColorMode } from \"./index.types\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { fnAll, useCallbackRef, useSafeLayoutEffect } from \"../../utils\"\nimport { useEnvironment } from \"./environment-provider\"\n\nexport interface UseSystemColorModeProps {\n defaultColorMode: ColorMode\n callback?: (colorMode: ColorMode) => void\n}\n\n/**\n * `useSystemColorMode` is a custom hook that returns the current system color mode.\n */\nexport const useSystemColorMode = ({\n callback,\n defaultColorMode,\n}: UseSystemColorModeProps) => {\n const { getWindow } = useEnvironment()\n const callbackRef = useCallbackRef(callback)\n const [systemColorMode, setSystemColorMode] =\n useState<ColorMode>(defaultColorMode)\n\n const getSystemColorMode = useCallback(\n (fallback?: ColorMode) => {\n const mql = getWindow()?.matchMedia(\"(prefers-color-scheme: dark)\")\n const dark = mql?.matches ?? fallback === \"dark\"\n\n return dark ? \"dark\" : \"light\"\n },\n [getWindow],\n )\n\n const systemColorModeObserver = useCallback(\n (func: (cm: ColorMode) => void) => {\n const mql = getWindow()?.matchMedia(\"(prefers-color-scheme: dark)\")\n\n const listener = (e: MediaQueryListEvent) => {\n func(e.matches ? \"dark\" : \"light\")\n }\n\n if (typeof mql?.addListener === \"function\") mql.addListener(listener)\n else mql?.addEventListener(\"change\", listener)\n\n return () => {\n if (typeof mql?.removeListener === \"function\")\n mql.removeListener(listener)\n else mql?.removeEventListener(\"change\", listener)\n }\n },\n [getWindow],\n )\n\n useSafeLayoutEffect(() => {\n setSystemColorMode(getSystemColorMode())\n }, [getSystemColorMode])\n\n useEffect(() => {\n return systemColorModeObserver(fnAll(setSystemColorMode, callbackRef))\n }, [systemColorModeObserver, getSystemColorMode, callbackRef])\n\n return { getSystemColorMode, systemColorMode }\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAa,sBAAsB,EACjC,UACA,uBAC6B;CAC7B,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,cAAc,eAAe,QAAQ;CAC3C,MAAM,CAAC,iBAAiB,sBACtB,SAAoB,gBAAgB;CAEtC,MAAM,qBAAqB,aACxB,aAAyB;EAIxB,QAHY,UAAU,CAAC,EAAE,WAAW,8BAA8B,CAAC,GACjD,WAAW,aAAa,SAE5B,SAAS;CACzB,GACA,CAAC,SAAS,CACZ;CAEA,MAAM,0BAA0B,aAC7B,SAAkC;EACjC,MAAM,MAAM,UAAU,CAAC,EAAE,WAAW,8BAA8B;EAElE,MAAM,YAAY,MAA2B;GAC3C,KAAK,EAAE,UAAU,SAAS,OAAO;EACnC;EAEA,IAAI,OAAO,KAAK,gBAAgB,YAAY,IAAI,YAAY,QAAQ;OAC/D,KAAK,iBAAiB,UAAU,QAAQ;EAE7C,aAAa;GACX,IAAI,OAAO,KAAK,mBAAmB,YACjC,IAAI,eAAe,QAAQ;QACxB,KAAK,oBAAoB,UAAU,QAAQ;EAClD;CACF,GACA,CAAC,SAAS,CACZ;CAEA,0BAA0B;EACxB,mBAAmB,mBAAmB,CAAC;CACzC,GAAG,CAAC,kBAAkB,CAAC;CAEvB,gBAAgB;EACd,OAAO,yBAAA,GAAA,cAAA,MAAA,CAA8B,oBAAoB,WAAW,CAAC;CACvE,GAAG;EAAC;EAAyB;EAAoB;CAAW,CAAC;CAE7D,OAAO;EAAE;EAAoB;CAAgB;AAC/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"var.js","names":["calc"],"sources":["../../../../src/core/system/var.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { CSSProperties, StyleValueWithCondition } from \"../css\"\nimport type {\n CSSMap,\n DefineThemeValue,\n System,\n ThemeToken,\n UsageTheme,\n VariableTokens,\n VariableValue,\n} from \"../system\"\nimport type { Breakpoints } from \"./breakpoint\"\nimport {\n calc,\n escape,\n isArray,\n isNull,\n isObject,\n isString,\n isUndefined,\n merge,\n replaceObject,\n} from \"../../utils\"\nimport { DEFAULT_VAR_PREFIX } from \"../constant\"\nimport {\n animation,\n colorMix,\n conditions,\n css,\n getStyle,\n gradient,\n injectKeyframes,\n isCSSFunction,\n isCSSVar,\n} from \"../css\"\nimport { isInterpolation } from \"../css/utils\"\nimport { defaultSystem } from \"../system\"\n\ntype ParsedValue = number | string | undefined\n\ninterface Variable {\n reference: string\n variable: string\n}\n\nexport function transformInterpolation(\n value: any,\n callback: (value: string, fallbackValue?: string) => string,\n) {\n if (isString(value)) {\n return value.replace(/\\{(.*?)\\}/g, (_, value) => {\n const [token, fallbackValue] = value.split(/,(.+)/)\n\n return callback(token.trim(), fallbackValue?.trim())\n })\n } else {\n return value\n }\n}\n\nexport function getVar(token: string, fallback?: string) {\n if (!token.startsWith(\"--\")) token = `--${token}`\n\n token = token.replace(/[^-_a-zA-Z0-9]/g, \"\")\n\n return fallback ? `var(${token}, ${fallback})` : `var(${token})`\n}\n\nexport function getVarName(system: System) {\n return function (token: string) {\n const prefix = system.config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n\n return `--${prefix}-${token}`\n }\n}\n\nexport function getColorSchemeVar(system: System) {\n return function (value: any, fallback?: string) {\n if (!isString(value)) return value\n\n const prefix = system.config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n\n const [, token] = value.split(\".\")\n\n return getVar(`${prefix}-colorScheme-${token}`, fallback)\n }\n}\n\nconst isGradient = (token: string) => token.startsWith(\"gradients.\")\nconst isKeyframes = (token: string) => token.startsWith(\"keyframes.\")\nconst isAnimation = (token: string) => token.startsWith(\"animations.\")\nconst isSpace = (token: string) => token.startsWith(\"spaces.\")\nconst isColor = (token: string) => token.startsWith(\"colors.\")\nexport const isColorScheme = (token: any) =>\n isString(token) && token.startsWith(\"colorScheme.\") && !token.includes(\"/\")\n\nexport function createVars(\n prefix: string = DEFAULT_VAR_PREFIX,\n theme: UsageTheme,\n breakpoints: Breakpoints,\n) {\n return function (tokens: VariableTokens) {\n const { getQuery, isResponsive } = breakpoints\n\n function tokenToVar(token: string): Variable {\n token = token.replace(/\\./g, \"-\")\n token = token.replace(/\\//g, \"\\\\/\")\n\n const variable = `--${[prefix, escape(token, \"-\")].filter(Boolean).join(\"-\")}`\n const reference = `var(${variable})`\n\n return { reference, variable }\n }\n\n return function (\n cssMap: CSSMap = {},\n cssVars: Dict = {},\n prevTokens?: VariableTokens,\n ): { cssMap: CSSMap; cssVars: Dict } {\n const system: System = { ...defaultSystem, cssMap }\n const options = { css, system, theme }\n\n function getRelatedReference(\n token: string,\n value: ParsedValue = \"\",\n ): [ParsedValue, Exclude<ParsedValue, undefined>] {\n const relatedToken = [token.split(\".\")[0], value].join(\".\")\n\n if (token === relatedToken) return [undefined, value]\n\n const targetToken = tokens[relatedToken] ?? prevTokens?.[relatedToken]\n\n if (!targetToken) return [undefined, value]\n\n const { reference, variable } = tokenToVar(relatedToken)\n\n return [variable, reference]\n }\n\n function valueToVar(value: any) {\n return transformInterpolation(value, (value, fallbackValue) => {\n if (value.includes(\"colors.\") || value.includes(\"colorScheme.\")) {\n if (isColorScheme(value)) return getColorSchemeVar(system)(value)\n\n return colorMix(value, { fallback: fallbackValue, system })\n } else {\n const token = tokens[value] ?? prevTokens?.[value]\n\n if (token) {\n return tokenToVar(value).reference\n } else if (value in cssMap && cssMap[value]?.ref) {\n return cssMap[value].ref\n } else if (fallbackValue) {\n fallbackValue =\n fallbackValue in cssMap && cssMap[fallbackValue]?.ref\n ? cssMap[fallbackValue]?.ref\n : fallbackValue\n\n return `var(--${prefix}-${value}, ${fallbackValue})`\n } else {\n return `var(--${prefix}-${value})`\n }\n }\n })\n }\n\n function createNegativeVar(token: string, reference: string) {\n const paths = token.split(\".\")\n const [start, ...rest] = paths\n\n const negativeToken = `${start}.-${rest.join(\".\")}`\n\n const negativeReference = calc.negate(reference)\n\n return { negativeReference, negativeToken }\n }\n\n function createAnimationVar(value: VariableValue) {\n if (isArray(value)) {\n return value.map((value) => animation(value, options)).join(\",\")\n } else {\n return animation(value, options)\n }\n }\n\n function createGradientVar(token: string, value: DefineThemeValue) {\n return function (semantic: boolean) {\n if (!semantic) {\n return gradient(value, options)\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable ? reference : gradient(value, options)\n }\n }\n }\n\n function createKeyframesVar(token: string, value: any) {\n return function (semantic: boolean) {\n if (!semantic) {\n return injectKeyframes(css(system, theme)(value))\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable\n ? reference\n : injectKeyframes(css(system, theme)(value))\n }\n }\n }\n\n function createColorVar(\n token: string,\n properties: string[],\n value: DefineThemeValue,\n ) {\n return function (semantic: boolean) {\n if (!semantic) {\n return colorMix(value, { ...options, properties })\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable\n ? reference\n : colorMix(value, { ...options, properties })\n }\n }\n }\n\n function createVar(\n token: string,\n value: VariableValue,\n variable: string,\n ) {\n return function (semantic: boolean, queries: string[] = []) {\n if (isAnimation(token)) value = createAnimationVar(value)\n\n if (isArray(value)) {\n const [lightValue, darkValue] = value\n\n createVar(token, lightValue, variable)(semantic, queries)\n createVar(\n token,\n darkValue,\n variable,\n )(semantic, [...queries, conditions._dark])\n } else if (isResponsive(value, true)) {\n Object.entries(value).forEach(([key, value]) => {\n if (key === \"base\") {\n createVar(token, value, variable)(semantic, queries)\n } else {\n const query = getQuery(key)\n\n if (!query) return\n\n createVar(token, value, variable)(semantic, [...queries, query])\n }\n })\n } else {\n const computedValue: DefineThemeValue = valueToVar(value)\n\n let resolvedValue: DefineThemeValue | Dict = computedValue\n\n if (isKeyframes(token)) {\n resolvedValue = createKeyframesVar(token, computedValue)(semantic)\n } else if (isGradient(token)) {\n resolvedValue = createGradientVar(token, computedValue)(semantic)\n } else if (isColor(token)) {\n resolvedValue = createColorVar(\n token,\n [variable],\n computedValue,\n )(semantic)\n } else if (semantic) {\n const [, reference] = getRelatedReference(token, computedValue)\n\n resolvedValue = reference\n }\n\n if (!isObject(resolvedValue))\n resolvedValue = { [variable]: resolvedValue }\n\n const resolvedCssVars = queries.reduceRight<Dict>(\n (prev, key) => ({ [key]: prev }),\n resolvedValue,\n )\n\n cssVars = merge(cssVars, resolvedCssVars)\n }\n }\n }\n\n for (let [token, { semantic, value }] of Object.entries(tokens)) {\n const { reference, variable } = tokenToVar(token)\n\n createVar(token, value, variable)(semantic)\n\n if (isSpace(token)) {\n const { negativeReference, negativeToken } = createNegativeVar(\n token,\n reference,\n )\n\n cssMap[negativeToken] = { ref: negativeReference, var: variable }\n }\n\n cssMap[token] = { ref: reference, var: variable }\n }\n\n return { cssMap, cssVars }\n }\n }\n}\n\nexport type CreateVars = ReturnType<ReturnType<typeof createVars>>\n\nexport function mergeVars(...fns: CreateVars[]) {\n return function (prevTokens?: VariableTokens) {\n let cssMap: CSSMap = {}\n let cssVars: Dict = {}\n\n for (const fn of fns) {\n const result = fn(cssMap, cssVars, prevTokens)\n\n cssMap = { ...cssMap, ...result.cssMap }\n cssVars = { ...cssVars, ...result.cssVars }\n }\n\n return { cssMap, cssVars }\n }\n}\n\nexport function varAttr<Y = StyleValueWithCondition<number | string>>(\n value: undefined | Y,\n token?: ThemeToken,\n fallbackValue?: string,\n): undefined | Y {\n if (isUndefined(value) || isNull(value) || isCSSFunction(value)) return value\n\n if (isObject(value) || isArray(value)) {\n return replaceObject(value, (value) => varAttr(value, token, fallbackValue))\n } else {\n return token\n ? (`{${token}.${value as number | string}, ${fallbackValue ?? (value as number | string)}}` as Y)\n : value\n }\n}\n\nexport function injectVars<Y extends Dict | Dict[] | undefined>(\n objOrArray: Y,\n targets: { [key in CSSProperties]?: string },\n isInvalidProp?: (prop: string) => boolean,\n): Y {\n if (!objOrArray) return objOrArray\n\n function callback(objOrArray: Dict) {\n return Object.fromEntries(\n Object.entries(objOrArray).flatMap(function ([prop, value]) {\n if (isInvalidProp?.(prop)) return [[prop, value]]\n\n const target = targets[prop]\n const result: [string, any][] = []\n\n if (target) {\n const { token } = getStyle(prop) ?? {}\n\n if (isCSSVar(value) || isInterpolation(value)) {\n result.push([`--${target}`, value])\n } else {\n result.push([\n `--${target}`,\n replaceObject(value, (value) =>\n token ? `{${token}.${value}, ${value}}` : value,\n ),\n ])\n }\n } else if (isObject(value)) {\n result.push([prop, injectVars(value, targets)])\n } else {\n result.push([prop, value])\n }\n\n return result\n }),\n )\n }\n\n if (isArray(objOrArray)) {\n return objOrArray.map(callback) as Y\n } else {\n return callback(objOrArray) as Y\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"var.js","names":["calc"],"sources":["../../../../src/core/system/var.ts"],"sourcesContent":["import type { Dict } from \"../../utils\"\nimport type { CSSProperties, StyleValueWithCondition } from \"../css\"\nimport type {\n CSSMap,\n DefineThemeValue,\n System,\n ThemeToken,\n UsageTheme,\n VariableTokens,\n VariableValue,\n} from \"../system\"\nimport type { Breakpoints } from \"./breakpoint\"\nimport {\n calc,\n escape,\n isArray,\n isNull,\n isObject,\n isString,\n isUndefined,\n merge,\n replaceObject,\n} from \"../../utils\"\nimport { DEFAULT_VAR_PREFIX } from \"../constant\"\nimport {\n animation,\n colorMix,\n conditions,\n css,\n getStyle,\n gradient,\n injectKeyframes,\n isCSSFunction,\n isCSSVar,\n} from \"../css\"\nimport { isInterpolation } from \"../css/utils\"\nimport { defaultSystem } from \"../system\"\n\ntype ParsedValue = number | string | undefined\n\ninterface Variable {\n reference: string\n variable: string\n}\n\nexport function transformInterpolation(\n value: any,\n callback: (value: string, fallbackValue?: string) => string,\n) {\n if (isString(value))\n return value.replace(/\\{(.*?)\\}/g, (_, value) => {\n const [token, fallbackValue] = value.split(/,(.+)/)\n\n return callback(token.trim(), fallbackValue?.trim())\n })\n else return value\n}\n\nexport function getVar(token: string, fallback?: string) {\n if (!token.startsWith(\"--\")) token = `--${token}`\n\n token = token.replace(/[^-_a-zA-Z0-9]/g, \"\")\n\n return fallback ? `var(${token}, ${fallback})` : `var(${token})`\n}\n\nexport function getVarName(system: System) {\n return function (token: string) {\n const prefix = system.config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n\n return `--${prefix}-${token}`\n }\n}\n\nexport function getColorSchemeVar(system: System) {\n return function (value: any, fallback?: string) {\n if (!isString(value)) return value\n\n const prefix = system.config.css?.varPrefix ?? DEFAULT_VAR_PREFIX\n\n const [, token] = value.split(\".\")\n\n return getVar(`${prefix}-colorScheme-${token}`, fallback)\n }\n}\n\nconst isGradient = (token: string) => token.startsWith(\"gradients.\")\nconst isKeyframes = (token: string) => token.startsWith(\"keyframes.\")\nconst isAnimation = (token: string) => token.startsWith(\"animations.\")\nconst isSpace = (token: string) => token.startsWith(\"spaces.\")\nconst isColor = (token: string) => token.startsWith(\"colors.\")\nexport const isColorScheme = (token: any) =>\n isString(token) && token.startsWith(\"colorScheme.\") && !token.includes(\"/\")\n\nexport function createVars(\n prefix: string = DEFAULT_VAR_PREFIX,\n theme: UsageTheme,\n breakpoints: Breakpoints,\n) {\n return function (tokens: VariableTokens) {\n const { getQuery, isResponsive } = breakpoints\n\n function tokenToVar(token: string): Variable {\n token = token.replace(/\\./g, \"-\")\n token = token.replace(/\\//g, \"\\\\/\")\n\n const variable = `--${[prefix, escape(token, \"-\")].filter(Boolean).join(\"-\")}`\n const reference = `var(${variable})`\n\n return { reference, variable }\n }\n\n return function (\n cssMap: CSSMap = {},\n cssVars: Dict = {},\n prevTokens?: VariableTokens,\n ): { cssMap: CSSMap; cssVars: Dict } {\n const system: System = { ...defaultSystem, cssMap }\n const options = { css, system, theme }\n\n function getRelatedReference(\n token: string,\n value: ParsedValue = \"\",\n ): [ParsedValue, Exclude<ParsedValue, undefined>] {\n const relatedToken = [token.split(\".\")[0], value].join(\".\")\n\n if (token === relatedToken) return [undefined, value]\n\n const targetToken = tokens[relatedToken] ?? prevTokens?.[relatedToken]\n\n if (!targetToken) return [undefined, value]\n\n const { reference, variable } = tokenToVar(relatedToken)\n\n return [variable, reference]\n }\n\n function valueToVar(value: any) {\n return transformInterpolation(value, (value, fallbackValue) => {\n if (value.includes(\"colors.\") || value.includes(\"colorScheme.\")) {\n if (isColorScheme(value)) return getColorSchemeVar(system)(value)\n\n return colorMix(value, { fallback: fallbackValue, system })\n } else {\n const token = tokens[value] ?? prevTokens?.[value]\n\n if (token) {\n return tokenToVar(value).reference\n } else if (value in cssMap && cssMap[value]?.ref) {\n return cssMap[value].ref\n } else if (fallbackValue) {\n fallbackValue =\n fallbackValue in cssMap && cssMap[fallbackValue]?.ref\n ? cssMap[fallbackValue]?.ref\n : fallbackValue\n\n return `var(--${prefix}-${value}, ${fallbackValue})`\n } else {\n return `var(--${prefix}-${value})`\n }\n }\n })\n }\n\n function createNegativeVar(token: string, reference: string) {\n const paths = token.split(\".\")\n const [start, ...rest] = paths\n\n const negativeToken = `${start}.-${rest.join(\".\")}`\n\n const negativeReference = calc.negate(reference)\n\n return { negativeReference, negativeToken }\n }\n\n function createAnimationVar(value: VariableValue) {\n if (isArray(value))\n return value.map((value) => animation(value, options)).join(\",\")\n else return animation(value, options)\n }\n\n function createGradientVar(token: string, value: DefineThemeValue) {\n return function (semantic: boolean) {\n if (!semantic) {\n return gradient(value, options)\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable ? reference : gradient(value, options)\n }\n }\n }\n\n function createKeyframesVar(token: string, value: any) {\n return function (semantic: boolean) {\n if (!semantic) {\n return injectKeyframes(css(system, theme)(value))\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable\n ? reference\n : injectKeyframes(css(system, theme)(value))\n }\n }\n }\n\n function createColorVar(\n token: string,\n properties: string[],\n value: DefineThemeValue,\n ) {\n return function (semantic: boolean) {\n if (!semantic) {\n return colorMix(value, { ...options, properties })\n } else {\n const [variable, reference] = getRelatedReference(token, value)\n\n return variable\n ? reference\n : colorMix(value, { ...options, properties })\n }\n }\n }\n\n function createVar(\n token: string,\n value: VariableValue,\n variable: string,\n ) {\n return function (semantic: boolean, queries: string[] = []) {\n if (isAnimation(token)) value = createAnimationVar(value)\n\n if (isArray(value)) {\n const [lightValue, darkValue] = value\n\n createVar(token, lightValue, variable)(semantic, queries)\n createVar(\n token,\n darkValue,\n variable,\n )(semantic, [...queries, conditions._dark])\n } else if (isResponsive(value, true)) {\n Object.entries(value).forEach(([key, value]) => {\n if (key === \"base\") {\n createVar(token, value, variable)(semantic, queries)\n } else {\n const query = getQuery(key)\n\n if (!query) return\n\n createVar(token, value, variable)(semantic, [...queries, query])\n }\n })\n } else {\n const computedValue: DefineThemeValue = valueToVar(value)\n\n let resolvedValue: DefineThemeValue | Dict = computedValue\n\n if (isKeyframes(token)) {\n resolvedValue = createKeyframesVar(token, computedValue)(semantic)\n } else if (isGradient(token)) {\n resolvedValue = createGradientVar(token, computedValue)(semantic)\n } else if (isColor(token)) {\n resolvedValue = createColorVar(\n token,\n [variable],\n computedValue,\n )(semantic)\n } else if (semantic) {\n const [, reference] = getRelatedReference(token, computedValue)\n\n resolvedValue = reference\n }\n\n if (!isObject(resolvedValue))\n resolvedValue = { [variable]: resolvedValue }\n\n const resolvedCssVars = queries.reduceRight<Dict>(\n (prev, key) => ({ [key]: prev }),\n resolvedValue,\n )\n\n cssVars = merge(cssVars, resolvedCssVars)\n }\n }\n }\n\n for (let [token, { semantic, value }] of Object.entries(tokens)) {\n const { reference, variable } = tokenToVar(token)\n\n createVar(token, value, variable)(semantic)\n\n if (isSpace(token)) {\n const { negativeReference, negativeToken } = createNegativeVar(\n token,\n reference,\n )\n\n cssMap[negativeToken] = { ref: negativeReference, var: variable }\n }\n\n cssMap[token] = { ref: reference, var: variable }\n }\n\n return { cssMap, cssVars }\n }\n }\n}\n\nexport type CreateVars = ReturnType<ReturnType<typeof createVars>>\n\nexport function mergeVars(...fns: CreateVars[]) {\n return function (prevTokens?: VariableTokens) {\n let cssMap: CSSMap = {}\n let cssVars: Dict = {}\n\n for (const fn of fns) {\n const result = fn(cssMap, cssVars, prevTokens)\n\n cssMap = { ...cssMap, ...result.cssMap }\n cssVars = { ...cssVars, ...result.cssVars }\n }\n\n return { cssMap, cssVars }\n }\n}\n\nexport function varAttr<Y = StyleValueWithCondition<number | string>>(\n value: undefined | Y,\n token?: ThemeToken,\n fallbackValue?: string,\n): undefined | Y {\n if (isUndefined(value) || isNull(value) || isCSSFunction(value)) return value\n\n if (isObject(value) || isArray(value))\n return replaceObject(value, (value) => varAttr(value, token, fallbackValue))\n else\n return token\n ? (`{${token}.${value as number | string}, ${fallbackValue ?? (value as number | string)}}` as Y)\n : value\n}\n\nexport function injectVars<Y extends Dict | Dict[] | undefined>(\n objOrArray: Y,\n targets: { [key in CSSProperties]?: string },\n isInvalidProp?: (prop: string) => boolean,\n): Y {\n if (!objOrArray) return objOrArray\n\n function callback(objOrArray: Dict) {\n return Object.fromEntries(\n Object.entries(objOrArray).flatMap(function ([prop, value]) {\n if (isInvalidProp?.(prop)) return [[prop, value]]\n\n const target = targets[prop]\n const result: [string, any][] = []\n\n if (target) {\n const { token } = getStyle(prop) ?? {}\n\n if (isCSSVar(value) || isInterpolation(value))\n result.push([`--${target}`, value])\n else\n result.push([\n `--${target}`,\n replaceObject(value, (value) =>\n token ? `{${token}.${value}, ${value}}` : value,\n ),\n ])\n } else if (isObject(value)) {\n result.push([prop, injectVars(value, targets)])\n } else {\n result.push([prop, value])\n }\n\n return result\n }),\n )\n }\n\n if (isArray(objOrArray)) return objOrArray.map(callback) as Y\n else return callback(objOrArray) as Y\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-animation/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { CSSAnimationObject, Token } from \"../../core\"\nimport { useCallback, useRef, useState } from \"react\"\nimport { animation, css, useSystem } from \"../../core\"\nimport { isArray, isUndefined, runIfFn } from \"../../utils\"\n\ntype CSSObject =\n | Token<CSSAnimationObject, \"animations\">\n | Token<CSSAnimationObject, \"animations\">[]\n\n/**\n * `useAnimation` is a custom hook that implements animations similar to CSS `keyframes`.\n *\n * @see https://yamada-ui.com/docs/hooks/use-animation\n */\nexport const useAnimation = (cssObj: CSSObject): string => {\n const system = useSystem()\n\n if (isArray(cssObj))
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-animation/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { CSSAnimationObject, Token } from \"../../core\"\nimport { useCallback, useRef, useState } from \"react\"\nimport { animation, css, useSystem } from \"../../core\"\nimport { isArray, isUndefined, runIfFn } from \"../../utils\"\n\ntype CSSObject =\n | Token<CSSAnimationObject, \"animations\">\n | Token<CSSAnimationObject, \"animations\">[]\n\n/**\n * `useAnimation` is a custom hook that implements animations similar to CSS `keyframes`.\n *\n * @see https://yamada-ui.com/docs/hooks/use-animation\n */\nexport const useAnimation = (cssObj: CSSObject): string => {\n const system = useSystem()\n\n if (isArray(cssObj))\n return cssObj.map((cssObj) => animation(cssObj, { css, system })).join(\", \")\n else return animation(cssObj, { css, system })\n}\n\n/**\n * `useDynamicAnimation` is a custom hook used to switch animations.\n *\n * @see https://yamada-ui.com/docs/hooks/use-dynamic-animation\n */\nexport const useDynamicAnimation = <\n Y extends\n | Token<CSSAnimationObject, \"animations\">[]\n | { [key: string]: CSSObject },\n>(\n arrayOrObj: Y,\n init?: (keyof Y)[] | keyof Y,\n): [\n string | undefined,\n (\n key:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => void,\n] => {\n const system = useSystem()\n\n const keys = useRef<string | string[] | undefined>(\n !isUndefined(init)\n ? isArray(init)\n ? init.map(String)\n : String(init)\n : undefined,\n )\n const cache = useRef<Map<string, string>>(new Map<string, string>())\n\n const [animations, setAnimations] = useState<string | undefined>(() => {\n for (const [key, styles] of Object.entries(arrayOrObj))\n if (isArray(styles))\n cache.current.set(\n key,\n styles.map((style) => animation(style, { css, system })).join(\", \"),\n )\n else cache.current.set(key, animation(styles, { css, system }))\n\n if (isArray(keys.current))\n return keys.current.map((key) => cache.current.get(key)).join(\", \")\n else return cache.current.get(keys.current ?? \"\")\n })\n\n const setAnimation = useCallback(\n (\n keysOrFunc:\n | ((key: (keyof Y)[] | keyof Y | undefined) => (keyof Y)[] | keyof Y)\n | (keyof Y)[]\n | keyof Y,\n ) => {\n const args = (() => {\n if (!isUndefined(keys.current) && isArray(arrayOrObj))\n return isArray(keys.current)\n ? keys.current.map(Number)\n : Number(keys.current)\n else return keys.current\n })() as (keyof Y)[] | keyof Y | undefined\n\n const keyOrArray = runIfFn(keysOrFunc, args)\n\n keys.current = isArray(keyOrArray)\n ? keyOrArray.map(String)\n : String(keyOrArray)\n\n if (isArray(keys.current))\n setAnimations(\n keys.current.map((key) => cache.current.get(key)).join(\", \"),\n )\n else setAnimations(cache.current.get(keys.current))\n },\n [arrayOrObj],\n )\n\n return [animations, setAnimation]\n}\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAa,gBAAgB,WAA8B;CACzD,MAAM,SAAS,UAAU;CAEzB,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,OAAO,OAAO,KAAK,WAAW,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;MACxE,OAAO,UAAU,QAAQ;EAAE;EAAK;CAAO,CAAC;AAC/C;;;;;;AAOA,MAAa,uBAKX,YACA,SASG;CACH,MAAM,SAAS,UAAU;CAEzB,MAAM,OAAO,OACX,EAAA,GAAA,cAAA,YAAA,CAAa,IAAI,KAAA,GAAA,cAAA,QAAA,CACL,IAAI,IACV,KAAK,IAAI,MAAM,IACf,OAAO,IAAI,IACb,KAAA,CACN;CACA,MAAM,QAAQ,uBAA4B,IAAI,IAAoB,CAAC;CAEnE,MAAM,CAAC,YAAY,iBAAiB,eAAmC;EACrE,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,UAAU,GACnD,KAAA,GAAA,cAAA,QAAA,CAAY,MAAM,GAChB,MAAM,QAAQ,IACZ,KACA,OAAO,KAAK,UAAU,UAAU,OAAO;GAAE;GAAK;EAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CACpE;OACG,MAAM,QAAQ,IAAI,KAAK,UAAU,QAAQ;GAAE;GAAK;EAAO,CAAC,CAAC;EAEhE,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,OAAO,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;OAC/D,OAAO,MAAM,QAAQ,IAAI,KAAK,WAAW,EAAE;CAClD,CAAC;CAgCD,OAAO,CAAC,YA9Ba,aAEjB,eAIG;EASH,MAAM,cAAA,GAAA,cAAA,QAAA,CAAqB,mBARP;GAClB,IAAI,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK,OAAO,MAAA,GAAA,cAAA,QAAA,CAAa,UAAU,GAClD,QAAA,GAAA,cAAA,QAAA,CAAe,KAAK,OAAO,IACvB,KAAK,QAAQ,IAAI,MAAM,IACvB,OAAO,KAAK,OAAO;QACpB,OAAO,KAAK;EACnB,EAAA,CAE0C,CAAC;EAE3C,KAAK,WAAA,GAAA,cAAA,QAAA,CAAkB,UAAU,IAC7B,WAAW,IAAI,MAAM,IACrB,OAAO,UAAU;EAErB,KAAA,GAAA,cAAA,QAAA,CAAY,KAAK,OAAO,GACtB,cACE,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAC7D;OACG,cAAc,MAAM,QAAQ,IAAI,KAAK,OAAO,CAAC;CACpD,GACA,CAAC,UAAU,CAGkB,CAAC;AAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-breakpoint-value.js","names":[],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint, ResponsiveObject, System } from \"../../core\"\nimport { useMemo } from \"react\"\nimport { useSystem } from \"../../core\"\nimport { useBreakpoint } from \"./use-breakpoint\"\n\n/**\n * `useBreakpointValue` is a custom hook that returns the value of the current breakpoint from the provided object.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint-value\n */\nexport const useBreakpointValue = <Y>(\n values: ResponsiveObject<Y, false>,\n): Y => {\n const system = useSystem()\n const breakpoint = useBreakpoint()\n\n return useMemo(\n () => getBreakpointValue<Y>(values)(system, breakpoint),\n [values, system, breakpoint],\n )\n}\n\nexport const getBreakpointValue =\n <Y>(values: ResponsiveObject<Y, false> = {}) =>\n (system: System, breakpoint: Breakpoint): Y => {\n const breakpoints = system.breakpoints.keys\n\n if (!breakpoints.length)
|
|
1
|
+
{"version":3,"file":"use-breakpoint-value.js","names":[],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint-value.ts"],"sourcesContent":["import type { Breakpoint, ResponsiveObject, System } from \"../../core\"\nimport { useMemo } from \"react\"\nimport { useSystem } from \"../../core\"\nimport { useBreakpoint } from \"./use-breakpoint\"\n\n/**\n * `useBreakpointValue` is a custom hook that returns the value of the current breakpoint from the provided object.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint-value\n */\nexport const useBreakpointValue = <Y>(\n values: ResponsiveObject<Y, false>,\n): Y => {\n const system = useSystem()\n const breakpoint = useBreakpoint()\n\n return useMemo(\n () => getBreakpointValue<Y>(values)(system, breakpoint),\n [values, system, breakpoint],\n )\n}\n\nexport const getBreakpointValue =\n <Y>(values: ResponsiveObject<Y, false> = {}) =>\n (system: System, breakpoint: Breakpoint): Y => {\n const breakpoints = system.breakpoints.keys\n\n if (!breakpoints.length)\n console.warn(\"getBreakpointValue: `breakpoints` is undefined.\")\n\n const currentIndex = breakpoints.indexOf(breakpoint)\n\n for (let i = currentIndex; 0 < i; i--) {\n const nextBreakpoint = breakpoints[i]\n\n if (nextBreakpoint && values.hasOwnProperty(nextBreakpoint))\n return values[nextBreakpoint] as Y\n }\n\n return values.base as Y\n }\n"],"mappings":";;;;;;;;;;AAWA,MAAa,sBACX,WACM;CACN,MAAM,SAAS,UAAU;CACzB,MAAM,aAAa,cAAc;CAEjC,OAAO,cACC,mBAAsB,MAAM,CAAC,CAAC,QAAQ,UAAU,GACtD;EAAC;EAAQ;EAAQ;CAAU,CAC7B;AACF;AAEA,MAAa,sBACP,SAAqC,CAAC,OACzC,QAAgB,eAA8B;CAC7C,MAAM,cAAc,OAAO,YAAY;CAEvC,IAAI,CAAC,YAAY,QACf,QAAQ,KAAK,iDAAiD;CAEhE,MAAM,eAAe,YAAY,QAAQ,UAAU;CAEnD,KAAK,IAAI,IAAI,cAAc,IAAI,GAAG,KAAK;EACrC,MAAM,iBAAiB,YAAY;EAEnC,IAAI,kBAAkB,OAAO,eAAe,cAAc,GACxD,OAAO,OAAO;CAClB;CAEA,OAAO,OAAO;AAChB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries)
|
|
1
|
+
{"version":3,"file":"use-breakpoint.js","names":["noop"],"sources":["../../../../src/hooks/use-breakpoint/use-breakpoint.ts"],"sourcesContent":["\"use client\"\n\nimport type { Breakpoint } from \"../../core\"\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from \"react\"\nimport { useEnvironment, useSystem } from \"../../core\"\nimport { createdDom, isUndefined, noop } from \"../../utils\"\n\n/**\n * `useBreakpoint` is a custom hook that returns the current breakpoint.\n * This hook monitors changes in the window size and returns the appropriate value.\n *\n * @see https://yamada-ui.com/docs/hooks/use-breakpoint\n */\nexport const useBreakpoint = () => {\n const animationFrameId = useRef(0)\n const { breakpoints, config } = useSystem()\n const { getWindow } = useEnvironment()\n const {\n containerRef,\n direction = \"down\",\n identifier = \"@media screen\",\n } = config.breakpoint ?? {}\n const hasContainer = !!containerRef\n\n const queries = useMemo(() => {\n return breakpoints.queries.map(\n ({ breakpoint, maxW, minMaxQuery, minW }) => {\n const searchValue =\n identifier === \"@media screen\"\n ? \"@media screen and \"\n : `${identifier} `\n const query = minMaxQuery?.replace(searchValue, \"\") ?? \"\"\n\n return {\n breakpoint,\n maxW,\n minW,\n query,\n }\n },\n )\n }, [breakpoints, identifier])\n\n const hasQueries = !!queries.length\n\n const getBreakpoint = useCallback(\n (width?: number) => {\n if (isUndefined(width)) {\n const win = getWindow()\n\n if (hasContainer || !hasQueries) return \"base\"\n\n for (const { breakpoint, query } of queries) {\n const mql = win?.matchMedia(query)\n\n if (mql?.matches) return breakpoint\n }\n } else {\n for (const { breakpoint, maxW, minW } of queries)\n if (direction !== \"up\") {\n if ((minW ?? 0) <= width) return breakpoint\n } else {\n if (width <= (maxW ?? Infinity)) return breakpoint\n }\n }\n\n return \"base\"\n },\n [direction, getWindow, hasContainer, hasQueries, queries],\n )\n\n const breakpointRef = useRef<Breakpoint>(getBreakpoint())\n\n const subscribe = useCallback(\n (listener: () => void) => {\n if (!hasContainer || !hasQueries) {\n const observer = queries.map(({ breakpoint, query }): (() => void) => {\n const mql = getWindow()?.matchMedia(query)\n\n const onChange = (e: MediaQueryListEvent) => {\n if (e.matches) breakpointRef.current = breakpoint\n\n listener()\n }\n\n mql?.addEventListener(\"change\", onChange)\n\n return () => {\n mql?.removeEventListener(\"change\", onChange)\n }\n })\n\n return () => {\n observer.forEach((unobserve) => unobserve())\n }\n } else if (createdDom()) {\n const observer = new ResizeObserver(([entry]) => {\n if (!entry) return\n\n cancelAnimationFrame(animationFrameId.current)\n\n const { width } = entry.contentRect\n\n breakpointRef.current = getBreakpoint(width)\n\n animationFrameId.current = requestAnimationFrame(listener)\n })\n\n if (containerRef.current) observer.observe(containerRef.current)\n\n return () => {\n observer.disconnect()\n\n if (process.env.NODE_ENV !== \"test\")\n cancelAnimationFrame(animationFrameId.current)\n }\n } else {\n return noop\n }\n },\n [containerRef, getBreakpoint, getWindow, hasContainer, hasQueries, queries],\n )\n\n const getSnapshot = useCallback(() => {\n return breakpointRef.current\n }, [])\n\n const breakpoint = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n\n return breakpoint\n}\n"],"mappings":";;;;;;;;;;;;AAaA,MAAa,sBAAsB;CACjC,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,EAAE,aAAa,WAAW,UAAU;CAC1C,MAAM,EAAE,cAAc,eAAe;CACrC,MAAM,EACJ,cACA,YAAY,QACZ,aAAa,oBACX,OAAO,cAAc,CAAC;CAC1B,MAAM,eAAe,CAAC,CAAC;CAEvB,MAAM,UAAU,cAAc;EAC5B,OAAO,YAAY,QAAQ,KACxB,EAAE,YAAY,MAAM,aAAa,WAAW;GAC3C,MAAM,cACJ,eAAe,kBACX,uBACA,GAAG,WAAW;GAGpB,OAAO;IACL;IACA;IACA;IACA,OANY,aAAa,QAAQ,aAAa,EAAE,KAAK;GAOvD;EACF,CACF;CACF,GAAG,CAAC,aAAa,UAAU,CAAC;CAE5B,MAAM,aAAa,CAAC,CAAC,QAAQ;CAE7B,MAAM,gBAAgB,aACnB,UAAmB;EAClB,KAAA,GAAA,cAAA,YAAA,CAAgB,KAAK,GAAG;GACtB,MAAM,MAAM,UAAU;GAEtB,IAAI,gBAAgB,CAAC,YAAY,OAAO;GAExC,KAAK,MAAM,EAAE,YAAY,WAAW,SAGlC,KAFY,KAAK,WAAW,KAAK,CAAC,GAEzB,SAAS,OAAO;EAE7B,OACE,KAAK,MAAM,EAAE,YAAY,MAAM,UAAU,SACvC,IAAI,cAAc;QACX,QAAQ,MAAM,OAAO,OAAO;EAAA,OAEjC,IAAI,UAAU,QAAQ,WAAW,OAAO;EAI9C,OAAO;CACT,GACA;EAAC;EAAW;EAAW;EAAc;EAAY;CAAO,CAC1D;CAEA,MAAM,gBAAgB,OAAmB,cAAc,CAAC;CAExD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,gBAAgB,CAAC,YAAY;GAChC,MAAM,WAAW,QAAQ,KAAK,EAAE,YAAY,YAA0B;IACpE,MAAM,MAAM,UAAU,CAAC,EAAE,WAAW,KAAK;IAEzC,MAAM,YAAY,MAA2B;KAC3C,IAAI,EAAE,SAAS,cAAc,UAAU;KAEvC,SAAS;IACX;IAEA,KAAK,iBAAiB,UAAU,QAAQ;IAExC,aAAa;KACX,KAAK,oBAAoB,UAAU,QAAQ;IAC7C;GACF,CAAC;GAED,aAAa;IACX,SAAS,SAAS,cAAc,UAAU,CAAC;GAC7C;EACF,OAAO,KAAA,GAAA,cAAA,WAAA,CAAe,GAAG;GACvB,MAAM,WAAW,IAAI,gBAAgB,CAAC,WAAW;IAC/C,IAAI,CAAC,OAAO;IAEZ,qBAAqB,iBAAiB,OAAO;IAE7C,MAAM,EAAE,UAAU,MAAM;IAExB,cAAc,UAAU,cAAc,KAAK;IAE3C,iBAAiB,UAAU,sBAAsB,QAAQ;GAC3D,CAAC;GAED,IAAI,aAAa,SAAS,SAAS,QAAQ,aAAa,OAAO;GAE/D,aAAa;IACX,SAAS,WAAW;IAGlB,qBAAqB,iBAAiB,OAAO;GACjD;EACF,OACE,OAAOA,cAAAA;CAEX,GACA;EAAC;EAAc;EAAe;EAAW;EAAc;EAAY;CAAO,CAC5E;CAEA,MAAM,cAAc,kBAAkB;EACpC,OAAO,cAAc;CACvB,GAAG,CAAC,CAAC;CAIL,OAFmB,qBAAqB,WAAW,aAAa,WAEhD;AAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["isValidElement"],"sources":["../../../../src/hooks/use-clickable/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLAttributes, KeyboardEvent, MouseEvent, Ref } from \"react\"\nimport type { StyledProps } from \"../../core\"\nimport { useCallback, useState } from \"react\"\nimport { dataAttr, isTouchDevice, mergeRefs } from \"../../utils\"\nimport { useEventListeners } from \"../use-event-listener\"\n\ntype Props<Y extends HTMLElement = HTMLElement> = Omit<\n HTMLAttributes<Y>,\n \"ref\" | \"size\" | keyof StyledProps\n>\n\nexport type UseClickableProps<\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n> = M & {\n /**\n * Whether or not trigger click on pressing `Enter`.\n *\n * @default true\n */\n clickOnEnter?: boolean\n /**\n * Whether or not trigger click on pressing `Space`.\n *\n * @default true\n */\n clickOnSpace?: boolean\n /**\n * If `true`, the element will be disabled. It will set the `disabled` HTML attribute.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Disable the touch device behavior.\n *\n * @default true\n */\n disableTouchBehavior?: boolean\n /**\n * If `true` and isDisabled, the element will have only `aria-disabled` set to `true`.\n *\n * @default false\n */\n focusable?: boolean\n /**\n * Whether or not to focus the element when it is clicked.\n * If `true`, the element will receive focus upon click.\n *\n * @default true\n */\n focusOnClick?: boolean\n /**\n * The ref for the element.\n */\n ref?: Ref<Y>\n}\n\nconst isValidElement = (\n ev: KeyboardEvent | KeyboardEvent[\"nativeEvent\"],\n): boolean => {\n const { isContentEditable, tagName } = ev.target as HTMLElement\n\n return tagName !== \"INPUT\" && tagName !== \"TEXTAREA\" && !isContentEditable\n}\n\nexport const useClickable = <\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n>(\n {\n ref,\n clickOnEnter = true,\n clickOnSpace = true,\n disabled,\n disableTouchBehavior = true,\n focusable,\n focusOnClick = true,\n tabIndex: tabIndexProp,\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n ...props\n }: UseClickableProps<Y, M> = {} as UseClickableProps<Y, M>,\n) => {\n const [button, setButton] = useState<boolean>(true)\n const [pressed, setPressed] = useState<boolean>(false)\n\n const listeners = useEventListeners()\n\n const tabIndex = button ? tabIndexProp : tabIndexProp || 0\n const trulyDisabled = disabled && !focusable\n\n const refCb = (node: any) => {\n if (!node) return\n\n if (node.tagName !== \"BUTTON\") setButton(false)\n }\n\n const onClick = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (focusOnClick) ev.currentTarget.focus()\n onClickProp?.(ev)\n },\n [disabled, focusOnClick, onClickProp],\n )\n\n const onDocumentKeyUp = useCallback(\n (ev: globalThis.KeyboardEvent) => {\n if (pressed && isValidElement(ev)) {\n ev.preventDefault()\n ev.stopPropagation()\n\n setPressed(false)\n\n listeners.remove(document, \"keyup\", onDocumentKeyUp, false)\n }\n },\n [pressed, listeners],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyDownProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(true)\n }\n\n if (clickOnEnter && ev.key === \"Enter\") {\n ev.preventDefault()\n ev.currentTarget.click()\n }\n\n listeners.add(document, \"keyup\", onDocumentKeyUp, false)\n },\n [\n disabled,\n button,\n onKeyDownProp,\n clickOnEnter,\n clickOnSpace,\n listeners,\n onDocumentKeyUp,\n ],\n )\n\n const onKeyUp = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyUpProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(false)\n\n ev.currentTarget.click()\n }\n },\n [clickOnSpace, button, disabled, onKeyUpProp],\n )\n\n const onDocumentMouseUp = useCallback(\n (ev: globalThis.MouseEvent) => {\n if (ev.button !== 0) return\n\n setPressed(false)\n\n listeners.remove(document, \"mouseup\", onDocumentMouseUp, false)\n },\n [listeners],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (!button) setPressed(true)\n\n if (focusOnClick) ev.currentTarget.focus({ preventScroll: true })\n\n listeners.add(document, \"mouseup\", onDocumentMouseUp, false)\n\n onMouseDownProp?.(ev)\n },\n [\n disabled,\n button,\n onMouseDownProp,\n listeners,\n onDocumentMouseUp,\n focusOnClick,\n ],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (!button) setPressed(false)\n\n onMouseUpProp?.(ev)\n },\n [onMouseUpProp, button],\n )\n\n const onMouseOver = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseOverProp?.(ev)\n },\n [disabled, onMouseOverProp, disableTouchBehavior],\n )\n\n const onMouseLeave = useCallback(\n (ev: MouseEvent<Y>) => {\n if (pressed) {\n ev.preventDefault()\n\n setPressed(false)\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseLeaveProp?.(ev)\n },\n [pressed, onMouseLeaveProp, disableTouchBehavior],\n )\n\n if (button) {\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n type: \"button\" as const,\n \"aria-disabled\": trulyDisabled ? undefined : disabled,\n disabled: trulyDisabled,\n onClick: onClick,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n }\n } else {\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n \"aria-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-active\": dataAttr(pressed),\n role: \"button\",\n tabIndex: trulyDisabled ? undefined : tabIndex,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseOver,\n onMouseUp,\n }\n }\n}\n\nexport type UseClickableReturn = ReturnType<typeof useClickable>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["isValidElement"],"sources":["../../../../src/hooks/use-clickable/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { HTMLAttributes, KeyboardEvent, MouseEvent, Ref } from \"react\"\nimport type { StyledProps } from \"../../core\"\nimport { useCallback, useState } from \"react\"\nimport { dataAttr, isTouchDevice, mergeRefs } from \"../../utils\"\nimport { useEventListeners } from \"../use-event-listener\"\n\ntype Props<Y extends HTMLElement = HTMLElement> = Omit<\n HTMLAttributes<Y>,\n \"ref\" | \"size\" | keyof StyledProps\n>\n\nexport type UseClickableProps<\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n> = M & {\n /**\n * Whether or not trigger click on pressing `Enter`.\n *\n * @default true\n */\n clickOnEnter?: boolean\n /**\n * Whether or not trigger click on pressing `Space`.\n *\n * @default true\n */\n clickOnSpace?: boolean\n /**\n * If `true`, the element will be disabled. It will set the `disabled` HTML attribute.\n *\n * @default false\n */\n disabled?: boolean\n /**\n * Disable the touch device behavior.\n *\n * @default true\n */\n disableTouchBehavior?: boolean\n /**\n * If `true` and isDisabled, the element will have only `aria-disabled` set to `true`.\n *\n * @default false\n */\n focusable?: boolean\n /**\n * Whether or not to focus the element when it is clicked.\n * If `true`, the element will receive focus upon click.\n *\n * @default true\n */\n focusOnClick?: boolean\n /**\n * The ref for the element.\n */\n ref?: Ref<Y>\n}\n\nconst isValidElement = (\n ev: KeyboardEvent | KeyboardEvent[\"nativeEvent\"],\n): boolean => {\n const { isContentEditable, tagName } = ev.target as HTMLElement\n\n return tagName !== \"INPUT\" && tagName !== \"TEXTAREA\" && !isContentEditable\n}\n\nexport const useClickable = <\n Y extends HTMLElement = HTMLElement,\n M extends Props<Y> = Props<Y>,\n>(\n {\n ref,\n clickOnEnter = true,\n clickOnSpace = true,\n disabled,\n disableTouchBehavior = true,\n focusable,\n focusOnClick = true,\n tabIndex: tabIndexProp,\n onClick: onClickProp,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n ...props\n }: UseClickableProps<Y, M> = {} as UseClickableProps<Y, M>,\n) => {\n const [button, setButton] = useState<boolean>(true)\n const [pressed, setPressed] = useState<boolean>(false)\n\n const listeners = useEventListeners()\n\n const tabIndex = button ? tabIndexProp : tabIndexProp || 0\n const trulyDisabled = disabled && !focusable\n\n const refCb = (node: any) => {\n if (!node) return\n\n if (node.tagName !== \"BUTTON\") setButton(false)\n }\n\n const onClick = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (focusOnClick) ev.currentTarget.focus()\n onClickProp?.(ev)\n },\n [disabled, focusOnClick, onClickProp],\n )\n\n const onDocumentKeyUp = useCallback(\n (ev: globalThis.KeyboardEvent) => {\n if (pressed && isValidElement(ev)) {\n ev.preventDefault()\n ev.stopPropagation()\n\n setPressed(false)\n\n listeners.remove(document, \"keyup\", onDocumentKeyUp, false)\n }\n },\n [pressed, listeners],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyDownProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(true)\n }\n\n if (clickOnEnter && ev.key === \"Enter\") {\n ev.preventDefault()\n ev.currentTarget.click()\n }\n\n listeners.add(document, \"keyup\", onDocumentKeyUp, false)\n },\n [\n disabled,\n button,\n onKeyDownProp,\n clickOnEnter,\n clickOnSpace,\n listeners,\n onDocumentKeyUp,\n ],\n )\n\n const onKeyUp = useCallback(\n (ev: KeyboardEvent<Y>) => {\n onKeyUpProp?.(ev)\n\n if (disabled || ev.defaultPrevented || ev.metaKey) return\n\n if (!isValidElement(ev.nativeEvent) || button) return\n\n if (clickOnSpace && ev.key === \" \") {\n ev.preventDefault()\n setPressed(false)\n\n ev.currentTarget.click()\n }\n },\n [clickOnSpace, button, disabled, onKeyUpProp],\n )\n\n const onDocumentMouseUp = useCallback(\n (ev: globalThis.MouseEvent) => {\n if (ev.button !== 0) return\n\n setPressed(false)\n\n listeners.remove(document, \"mouseup\", onDocumentMouseUp, false)\n },\n [listeners],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (disabled) {\n ev.stopPropagation()\n ev.preventDefault()\n\n return\n }\n\n if (!button) setPressed(true)\n\n if (focusOnClick) ev.currentTarget.focus({ preventScroll: true })\n\n listeners.add(document, \"mouseup\", onDocumentMouseUp, false)\n\n onMouseDownProp?.(ev)\n },\n [\n disabled,\n button,\n onMouseDownProp,\n listeners,\n onDocumentMouseUp,\n focusOnClick,\n ],\n )\n\n const onMouseUp = useCallback(\n (ev: MouseEvent<Y>) => {\n if (ev.button !== 0) return\n\n if (!button) setPressed(false)\n\n onMouseUpProp?.(ev)\n },\n [onMouseUpProp, button],\n )\n\n const onMouseOver = useCallback(\n (ev: MouseEvent<Y>) => {\n if (disabled) {\n ev.preventDefault()\n\n return\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseOverProp?.(ev)\n },\n [disabled, onMouseOverProp, disableTouchBehavior],\n )\n\n const onMouseLeave = useCallback(\n (ev: MouseEvent<Y>) => {\n if (pressed) {\n ev.preventDefault()\n\n setPressed(false)\n }\n\n if (disableTouchBehavior && isTouchDevice()) return\n\n onMouseLeaveProp?.(ev)\n },\n [pressed, onMouseLeaveProp, disableTouchBehavior],\n )\n\n if (button)\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n type: \"button\" as const,\n \"aria-disabled\": trulyDisabled ? undefined : disabled,\n disabled: trulyDisabled,\n onClick: onClick,\n onKeyDown: onKeyDownProp,\n onKeyUp: onKeyUpProp,\n onMouseDown: onMouseDownProp,\n onMouseLeave: onMouseLeaveProp,\n onMouseOver: onMouseOverProp,\n onMouseUp: onMouseUpProp,\n }\n else\n return {\n ...props,\n ref: mergeRefs(ref, refCb),\n \"aria-disabled\": disabled ? (\"true\" as const) : undefined,\n \"data-active\": dataAttr(pressed),\n role: \"button\",\n tabIndex: trulyDisabled ? undefined : tabIndex,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseLeave,\n onMouseOver,\n onMouseUp,\n }\n}\n\nexport type UseClickableReturn = ReturnType<typeof useClickable>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-clipboard/index.ts"],"sourcesContent":["\"use client\"\n\nimport copy from \"copy-to-clipboard\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isNumber, isString } from \"../../utils\"\n\nexport interface UseClipboardOptions {\n format?: string\n timeout?: number\n}\n\n/**\n * `useClipboard` is a custom hook that performs the operation of copying a value to the clipboard.\n *\n * @see https://yamada-ui.com/docs/hooks/use-clipboard\n */\nexport const useClipboard = (\n defaultValue = \"\",\n timeoutOrOptions: number | UseClipboardOptions = {},\n) => {\n const [copied, setCopied] = useState(false)\n\n const [value, setValue] = useState(defaultValue)\n\n useEffect(() => setValue(defaultValue), [defaultValue])\n\n const { timeout = 1500, ...copyOptions } = isNumber(timeoutOrOptions)\n ? { timeout: timeoutOrOptions }\n : timeoutOrOptions\n\n const onCopy = useCallback(\n (newValue?: any) => {\n if (!isString(newValue))
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-clipboard/index.ts"],"sourcesContent":["\"use client\"\n\nimport copy from \"copy-to-clipboard\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { isNumber, isString } from \"../../utils\"\n\nexport interface UseClipboardOptions {\n format?: string\n timeout?: number\n}\n\n/**\n * `useClipboard` is a custom hook that performs the operation of copying a value to the clipboard.\n *\n * @see https://yamada-ui.com/docs/hooks/use-clipboard\n */\nexport const useClipboard = (\n defaultValue = \"\",\n timeoutOrOptions: number | UseClipboardOptions = {},\n) => {\n const [copied, setCopied] = useState(false)\n\n const [value, setValue] = useState(defaultValue)\n\n useEffect(() => setValue(defaultValue), [defaultValue])\n\n const { timeout = 1500, ...copyOptions } = isNumber(timeoutOrOptions)\n ? { timeout: timeoutOrOptions }\n : timeoutOrOptions\n\n const onCopy = useCallback(\n (newValue?: any) => {\n if (!isString(newValue)) newValue = value\n else setValue(newValue)\n\n const copied = copy(newValue, copyOptions)\n\n setCopied(copied)\n },\n [value, copyOptions],\n )\n\n useEffect(() => {\n let timeoutId: NodeJS.Timeout | null = null\n\n if (copied)\n timeoutId = setTimeout(() => {\n setCopied(false)\n }, timeout)\n\n return () => {\n if (timeoutId) clearTimeout(timeoutId)\n }\n }, [timeout, copied])\n\n return {\n copied,\n setValue,\n value,\n onCopy,\n }\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,gBACX,eAAe,IACf,mBAAiD,CAAC,MAC/C;CACH,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,MAAM,CAAC,OAAO,YAAY,SAAS,YAAY;CAE/C,gBAAgB,SAAS,YAAY,GAAG,CAAC,YAAY,CAAC;CAEtD,MAAM,EAAE,UAAU,MAAM,GAAG,iBAAA,GAAA,cAAA,SAAA,CAAyB,gBAAgB,IAChE,EAAE,SAAS,iBAAiB,IAC5B;CAEJ,MAAM,SAAS,aACZ,aAAmB;EAClB,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,QAAQ,GAAG,WAAW;OAC/B,SAAS,QAAQ;EAItB,UAFe,KAAK,UAAU,WAEf,CAAC;CAClB,GACA,CAAC,OAAO,WAAW,CACrB;CAEA,gBAAgB;EACd,IAAI,YAAmC;EAEvC,IAAI,QACF,YAAY,iBAAiB;GAC3B,UAAU,KAAK;EACjB,GAAG,OAAO;EAEZ,aAAa;GACX,IAAI,WAAW,aAAa,SAAS;EACvC;CACF,GAAG,CAAC,SAAS,MAAM,CAAC;CAEpB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-controllable-state/index.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n Dispatch,\n SetStateAction,\n} from \"react\"\nimport { useState } from \"react\"\nimport {\n isBoolean,\n isNull,\n isUndefined,\n runIfFn,\n useCallbackRef,\n} from \"../../utils\"\n\ninterface UseControllableStateMethods<Y> {\n onChange?: (value: Y) => void\n onUpdate?: (prev: Y, next: Y) => boolean\n}\n\nexport interface UseControllableStateProps<\n Y,\n> extends UseControllableStateMethods<Y> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateProps<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n onUpdate: onUpdateProp = (prev, next) => prev !== next,\n}: UseControllableStateProps<Y>) {\n const onChange = useCallbackRef(onChangeProp)\n const onUpdate = useCallbackRef(onUpdateProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n\n const setValue = useCallbackRef(\n (next: SetStateAction<Y>) => {\n const nextValue = runIfFn(next, currentValue)\n\n if (!onUpdate(currentValue, nextValue)) return\n\n if (!controlled || isUndefined(nextValue) || isNull(nextValue))\n setDefaultValue(nextValue)\n\n onChange(nextValue)\n },\n [controlled, currentValue, onChange, onUpdate],\n )\n\n return [currentValue, setValue]\n}\n\nfunction isHTMLInputElement(el: HTMLElement): el is HTMLInputElement {\n return el instanceof HTMLInputElement\n}\n\ninterface UseControllableEventStateMethods<\n Y extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> {\n onChange?: ChangeEventHandler<Y>\n}\n\nexport interface UseControllableEventStateProps<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> extends UseControllableEventStateMethods<M> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(props: UseControllableEventStateProps<Y, M>): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n}: UseControllableEventStateProps<Y, M>) {\n const onChange = useCallbackRef(onChangeProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n const boolean = isBoolean(currentValue)\n\n const setValue = useCallbackRef(\n (ev: ChangeEvent<M>) => {\n const value =\n boolean && isHTMLInputElement(ev.target)\n ? (ev.target.checked as Y)\n : (ev.target.value as Y)\n\n if (!controlled || isUndefined(value) || isNull(value))
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-controllable-state/index.ts"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n Dispatch,\n SetStateAction,\n} from \"react\"\nimport { useState } from \"react\"\nimport {\n isBoolean,\n isNull,\n isUndefined,\n runIfFn,\n useCallbackRef,\n} from \"../../utils\"\n\ninterface UseControllableStateMethods<Y> {\n onChange?: (value: Y) => void\n onUpdate?: (prev: Y, next: Y) => boolean\n}\n\nexport interface UseControllableStateProps<\n Y,\n> extends UseControllableStateMethods<Y> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateMethods<Y> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>(\n props: UseControllableStateProps<Y>,\n): [Y, Dispatch<SetStateAction<Y>>]\n\nexport function useControllableState<Y>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n onUpdate: onUpdateProp = (prev, next) => prev !== next,\n}: UseControllableStateProps<Y>) {\n const onChange = useCallbackRef(onChangeProp)\n const onUpdate = useCallbackRef(onUpdateProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n\n const setValue = useCallbackRef(\n (next: SetStateAction<Y>) => {\n const nextValue = runIfFn(next, currentValue)\n\n if (!onUpdate(currentValue, nextValue)) return\n\n if (!controlled || isUndefined(nextValue) || isNull(nextValue))\n setDefaultValue(nextValue)\n\n onChange(nextValue)\n },\n [controlled, currentValue, onChange, onUpdate],\n )\n\n return [currentValue, setValue]\n}\n\nfunction isHTMLInputElement(el: HTMLElement): el is HTMLInputElement {\n return el instanceof HTMLInputElement\n}\n\ninterface UseControllableEventStateMethods<\n Y extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> {\n onChange?: ChangeEventHandler<Y>\n}\n\nexport interface UseControllableEventStateProps<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n> extends UseControllableEventStateMethods<M> {\n defaultValue?: (() => Y) | Y\n value?: Y\n}\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n value: Y\n defaultValue?: (() => Y) | Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(\n props: UseControllableEventStateMethods<M> & {\n defaultValue: (() => Y) | Y\n value?: Y\n },\n): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>(props: UseControllableEventStateProps<Y, M>): [Y, ChangeEventHandler<M>]\n\nexport function useControllableEventState<\n Y extends boolean | number | string,\n M extends HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement,\n>({\n defaultValue: defaultValueProp,\n value,\n onChange: onChangeProp,\n}: UseControllableEventStateProps<Y, M>) {\n const onChange = useCallbackRef(onChangeProp)\n const [defaultValue, setDefaultValue] = useState(defaultValueProp)\n const controlled = !isUndefined(value)\n const currentValue = (controlled ? value : defaultValue) as Y\n const boolean = isBoolean(currentValue)\n\n const setValue = useCallbackRef(\n (ev: ChangeEvent<M>) => {\n const value =\n boolean && isHTMLInputElement(ev.target)\n ? (ev.target.checked as Y)\n : (ev.target.value as Y)\n\n if (!controlled || isUndefined(value) || isNull(value))\n setDefaultValue(value)\n\n onChange(ev)\n },\n [controlled, currentValue, onChange],\n )\n\n return [currentValue, setValue]\n}\n"],"mappings":";;;;;AA+CA,SAAgB,qBAAwB,EACtC,cAAc,kBACd,OACA,UAAU,cACV,UAAU,gBAAgB,MAAM,SAAS,SAAS,QACnB;CAC/B,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAgB3C,OAAO,CAAC,cAdS,gBACd,SAA4B;EAC3B,MAAM,aAAA,GAAA,cAAA,QAAA,CAAoB,MAAM,YAAY;EAE5C,IAAI,CAAC,SAAS,cAAc,SAAS,GAAG;EAExC,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,SAAS,MAAA,GAAA,cAAA,OAAA,CAAY,SAAS,GAC3D,gBAAgB,SAAS;EAE3B,SAAS,SAAS;CACpB,GACA;EAAC;EAAY;EAAc;EAAU;CAAQ,CAGlB,CAAC;AAChC;AAEA,SAAS,mBAAmB,IAAyC;CACnE,OAAO,cAAc;AACvB;AAyCA,SAAgB,0BAGd,EACA,cAAc,kBACd,OACA,UAAU,gBAC6B;CACvC,MAAM,WAAW,eAAe,YAAY;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAS,gBAAgB;CACjE,MAAM,aAAa,EAAA,GAAA,cAAA,YAAA,CAAa,KAAK;CACrC,MAAM,eAAgB,aAAa,QAAQ;CAC3C,MAAM,WAAA,GAAA,cAAA,UAAA,CAAoB,YAAY;CAiBtC,OAAO,CAAC,cAfS,gBACd,OAAuB;EACtB,MAAM,QACJ,WAAW,mBAAmB,GAAG,MAAM,IAClC,GAAG,OAAO,UACV,GAAG,OAAO;EAEjB,IAAI,CAAC,eAAA,GAAA,cAAA,YAAA,CAA0B,KAAK,MAAA,GAAA,cAAA,OAAA,CAAY,KAAK,GACnD,gBAAgB,KAAK;EAEvB,SAAS,EAAE;CACb,GACA;EAAC;EAAY;EAAc;CAAQ,CAGR,CAAC;AAChC"}
|