@logicplanes/kaeso-ui 0.4.7 → 0.5.0
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/NOTICE.md +1 -1
- package/ai/component-guides.md +40 -6
- package/ai/component-registry.json +67 -5
- package/ai/component-registry.md +23 -5
- package/ai/icons.md +1 -1
- package/ai/tokens.md +1 -1
- package/dist/blocks/delete-resource.js +1 -1
- package/dist/blocks/pages.js +2 -2
- package/dist/blocks/resource-list.js +3 -3
- package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-B1FXVFYx.js} +5 -5
- package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-B1FXVFYx.js.map} +1 -1
- package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
- package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
- package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
- package/dist/chunks/button-DrmFgdIi.js.map +1 -0
- package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
- package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
- package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
- package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
- package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
- package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
- package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
- package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
- package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
- package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
- package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
- package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
- package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
- package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
- package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
- package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
- package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
- package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
- package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
- package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
- package/dist/chunks/{disclosure-BtYRTDO3.js → disclosure-3CIz2WZa.js} +2 -2
- package/dist/chunks/disclosure-3CIz2WZa.js.map +1 -0
- package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
- package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
- package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
- package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
- package/dist/chunks/identity-BwYixi8Q.js +520 -0
- package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
- package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
- package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
- package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
- package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
- package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
- package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
- package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
- package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
- package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
- package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
- package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
- package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-S7tagFJT.js} +3 -3
- package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-S7tagFJT.js.map} +1 -1
- package/dist/chunks/{page-header-BQijP6Rp.js → page-header-DUaKLpK3.js} +2 -2
- package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-DUaKLpK3.js.map} +1 -1
- package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
- package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
- package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
- package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
- package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
- package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
- package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
- package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
- package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
- package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
- package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-BO1mnjVH.js} +3 -3
- package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-BO1mnjVH.js.map} +1 -1
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
- package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
- package/dist/chunks/styles-8fn_bHRP.js +21 -0
- package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
- package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
- package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
- package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
- package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
- package/dist/components/app-frame.js +2 -2
- package/dist/components/banner.js +1 -1
- package/dist/components/button-group.js +1 -1
- package/dist/components/button.js +1 -1
- package/dist/components/charts/bar.js +2 -2
- package/dist/components/charts/donut.js +1 -1
- package/dist/components/charts/gauge.js +1 -1
- package/dist/components/charts/heatmap.js +1 -1
- package/dist/components/charts/sankey.js +2 -2
- package/dist/components/charts/timeseries.js +1 -1
- package/dist/components/charts.js +2 -2
- package/dist/components/checkbox.js +1 -1
- package/dist/components/code-block.js +2 -2
- package/dist/components/collapsible.js +29 -30
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-list.js +2 -2
- package/dist/components/command-palette.js +1 -1
- package/dist/components/copy-button.js +1 -1
- package/dist/components/data-table.js +1 -1
- package/dist/components/date-picker.js +2 -2
- package/dist/components/dialog.js +2 -2
- package/dist/components/display-options.js +2 -2
- package/dist/components/filter-chip.js +3 -3
- package/dist/components/filter-toggle.js +35 -0
- package/dist/components/filter-toggle.js.map +1 -0
- package/dist/components/icon-button.js +1 -1
- package/dist/components/input.js +3 -3
- package/dist/components/kaeso/conversation.js +2 -2
- package/dist/components/kaeso/identity.js +1 -1
- package/dist/components/kaeso/moments.js +3 -3
- package/dist/components/kaeso/rights.js +1 -1
- package/dist/components/kaeso/usage.js +1 -1
- package/dist/components/kaeso.js +9 -14
- package/dist/components/kaeso.js.map +1 -1
- package/dist/components/key-value.js +1 -1
- package/dist/components/list.js +1 -1
- package/dist/components/markdown.js +1 -1
- package/dist/components/menu.js +2 -2
- package/dist/components/page-header.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/playground.js +9 -9
- package/dist/components/select.js +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/sidebar.js +1 -1
- package/dist/components/tabs.js +4 -4
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/theme-menu.js +2 -2
- package/dist/components/theme-select.js +1 -1
- package/dist/index.js +68 -67
- package/dist/kaeso.css +11 -12
- package/dist/styles.css +1 -1
- package/dist/types/components/combobox/combobox.d.ts +2 -0
- package/dist/types/components/filter-toggle/docs.d.ts +11 -0
- package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
- package/dist/types/components/filter-toggle/index.d.ts +1 -0
- package/dist/types/components/kaeso/docs.d.ts +1 -0
- package/dist/types/components/kaeso/identity.d.ts +1 -0
- package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
- package/dist/types/components/menu/styles.d.ts +1 -1
- package/dist/types/components/tabs/tabs.d.ts +2 -2
- package/dist/types/index.d.ts +1 -0
- package/package.json +5 -5
- package/dist/chunks/button-IblhXUyZ.js.map +0 -1
- package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
- package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
- package/dist/chunks/disclosure-BtYRTDO3.js.map +0 -1
- package/dist/chunks/identity-BQoh-UpW.js +0 -365
- package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
- package/dist/chunks/styles-hkFkoBbi.js +0 -21
- package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-9tbimmF3.js","names":["BaseCheckbox","CheckboxGroup","BaseCheckboxGroup","Checkbox","__exportAll","useField","labelled","checkbox_exports","Checkbox$1","CheckboxBox","CheckboxGroup$1","KAESO_CHECKBOX_DEFAULT_VARIANTS","KAESO_CHECKBOX_GROUP_DEFAULT_VARIANTS","KAESO_CHECKBOX_GROUP_VARIANTS","KAESO_CHECKBOX_VARIANTS","GroupDisabled","ariaLabel","describedBy","labelledBy","force","Checkbox","checked","defaultChecked","onCheckedChange","c","indeterminate","disabled","readOnly","required","name","value","id","parent","invalid","cn","className","Root","own","auto","useId","boxId","field","groupDisabled","useContext","fieldDescribedBy","props","label","named","description","Group","CheckboxGroup","defaultValue","onValueChange","v","allValues"],"sources":["../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { createContext, forwardRef, useContext, useId, type ReactNode } from \"react\";\nimport { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport { CheckboxGroup as BaseCheckboxGroup } from \"@base-ui/react/checkbox-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { labelled } from \"../radio/labelled.js\";\nimport { useField } from \"../field/field.js\";\n\nexport const KAESO_CHECKBOX_VARIANTS = {\n size: {\n md: { classes: \"size-18 rounded-checkbox\" },\n },\n} as const;\nexport const KAESO_CHECKBOX_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface CheckboxProps {\n checked?: boolean | undefined;\n defaultChecked?: boolean | undefined;\n onCheckedChange?: ((checked: boolean) => void) | undefined;\n indeterminate?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n required?: boolean | undefined;\n invalid?: boolean | undefined;\n name?: string | undefined;\n value?: string | undefined;\n label?: ReactNode | undefined;\n description?: ReactNode | undefined;\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst GroupDisabled = /* @__PURE__ */ createContext(false);\n\nexport const CheckboxBox = /* @__PURE__ */ forwardRef<HTMLButtonElement, CheckboxProps & { parent?: boolean | undefined }>(function CheckboxBox(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n indeterminate,\n disabled,\n readOnly,\n required,\n invalid,\n name,\n value,\n id,\n className,\n parent,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n \"aria-labelledby\": labelledBy,\n \"data-force\": force,\n },\n ref,\n) {\n return (\n <BaseCheckbox.Root\n ref={ref}\n {...(checked !== undefined ? { checked } : {})}\n {...(defaultChecked !== undefined ? { defaultChecked } : {})}\n {...(onCheckedChange ? { onCheckedChange: (c: boolean) => onCheckedChange(c) } : {})}\n {...(indeterminate !== undefined ? { indeterminate } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(readOnly !== undefined ? { readOnly } : {})}\n {...(required !== undefined ? { required } : {})}\n {...(name ? { name } : {})}\n {...(value ? { value } : {})}\n {...(id ? { id } : {})}\n {...(parent ? { parent } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(labelledBy ? { \"aria-labelledby\": labelledBy } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n data-choice=\"\"\n className={cn(\n \"group/cb relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox outline-none tap-target disabled:cursor-not-allowed\",\n className,\n )}\n >\n <span aria-hidden className={cn(\"flex items-center justify-center choice-mark\", KAESO_CHECKBOX_VARIANTS.size.md.classes)}>\n <BaseCheckbox.Indicator keepMounted className=\"flex items-center justify-center\">\n <svg viewBox=\"0 0 12 12\" className=\"size-12\" fill=\"none\" aria-hidden>\n <path\n d=\"M2.5 6.25 4.9 8.5 9.5 3.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n pathLength={1}\n className=\"check-draw\"\n />\n <path d=\"M3 6h6\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" className=\"hidden group-data-indeterminate/cb:block\" />\n </svg>\n </BaseCheckbox.Indicator>\n </span>\n </BaseCheckbox.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxBox.displayName = \"Checkbox.Box\";\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLButtonElement, CheckboxProps>(function Checkbox({ label, description, id, className, ...own }, ref) {\n const auto = useId();\n const boxId = id ?? `k-cb-${auto}`;\n const field = useField();\n const groupDisabled = useContext(GroupDisabled);\n const fieldDescribedBy = [own[\"aria-describedby\"], field?.descriptionId, field?.errorId].filter(Boolean).join(\" \");\n const props = {\n ...own,\n ...(field?.invalid && own.invalid === undefined ? { invalid: true } : {}),\n ...((field?.disabled || groupDisabled) && own.disabled === undefined ? { disabled: true } : {}),\n ...(fieldDescribedBy ? { \"aria-describedby\": fieldDescribedBy } : {}),\n };\n if (!label) return <CheckboxBox ref={ref} id={boxId} className={className} {...props} />;\n const named = labelled(boxId, label, description, props);\n return (\n <label\n htmlFor={boxId}\n data-choice-row=\"\"\n className={cn(\n \"inline-flex min-h-32 cursor-pointer items-start gap-10 py-6 select-none coarse:min-h-44 coarse:py-12\",\n props.disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox ref={ref} id={boxId} {...props} {...named.aria} />\n </span>\n <span className=\"flex flex-col\">\n <span id={named.labelId} className={cn(\"text-body text-fg\", props.disabled && \"text-fg-disabled\")}>\n {label}\n </span>\n {description && (\n <span id={named.descriptionId} className={cn(\"text-small text-pretty\", props.disabled ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {description}\n </span>\n )}\n </span>\n </label>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Checkbox\";\n\nexport const KAESO_CHECKBOX_GROUP_VARIANTS = {} as const;\nexport const KAESO_CHECKBOX_GROUP_DEFAULT_VARIANTS = {} as const;\n\nexport interface CheckboxGroupProps {\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n allValues?: string[] | undefined;\n disabled?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\nconst Group = /* @__PURE__ */ forwardRef<HTMLDivElement, CheckboxGroupProps>(function CheckboxGroup(\n { value, defaultValue, onValueChange, allValues, disabled, className, children, ...props },\n ref,\n) {\n return (\n <GroupDisabled.Provider value={!!disabled}>\n <BaseCheckboxGroup\n ref={ref}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange: (v: string[]) => onValueChange(v) } : {})}\n {...(allValues ? { allValues } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {children}\n </BaseCheckboxGroup>\n </GroupDisabled.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Group.displayName = \"CheckboxGroup\";\n\nexport const Checkbox = /* @__PURE__ */ Object.assign(Root, { Box: CheckboxBox, Group });\nexport const CheckboxGroup = Group;\n"],"mappings":";;;;;;;;;;;;;;;;;;A,IAOac,IAA0B,EACrC,MAAM,EACJ,IAAI,EAAE,SAAS,2BAA2B,EAC5C,EACF,GACaH,IAAkC,EAAE,MAAM,KAAK,GAuBtDI,IAAgC,kBAAc,EAAK,GAE5CN,IAA8B,kBAAgF,SACzH,EACE,YACA,mBACA,oBACA,kBACA,aACA,aACA,aACA,YACA,SACA,UACA,OACA,cACA,WACA,cAAcO,GACd,oBAAoBC,GACpB,mBAAmBC,GACnB,cAAcC,KAEhB,GACA;CACA,OACE,kBAACnB,EAAa,MAAd;EACO;EACL,GAAKqB,MAAY,KAAA,IAA0B,CAAC,IAAf,EAAE,WAAQ;EACvC,GAAKC,MAAmB,KAAA,IAAiC,CAAC,IAAtB,EAAE,kBAAe;EACrD,GAAKC,IAAkB,EAAE,kBAAkB,MAAeA,EAAgBC,CAAC,EAAE,IAAI,CAAC;EAClF,GAAKC,MAAkB,KAAA,IAAgC,CAAC,IAArB,EAAE,iBAAc;EACnD,GAAKC,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,GAAKC,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,GAAKC,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;EACzC,GAAKC,IAAO,EAAE,QAAK,IAAI,CAAC;EACxB,GAAKC,IAAQ,EAAE,SAAM,IAAI,CAAC;EAC1B,GAAKC,IAAK,EAAE,MAAG,IAAI,CAAC;EACpB,GAAKC,IAAS,EAAE,UAAO,IAAI,CAAC;EAC5B,GAAKhB,IAAY,EAAE,cAAcA,EAAU,IAAI,CAAC;EAChD,GAAKC,IAAc,EAAE,oBAAoBA,EAAY,IAAI,CAAC;EAC1D,GAAKC,IAAa,EAAE,mBAAmBA,EAAW,IAAI,CAAC;EACvD,GAAKe,IAAU,EAAE,gBAAgB,GAAK,IAAI,CAAC;EAC3C,GAAKd,IAAQ,EAAE,cAAcA,EAAM,IAAI,CAAC;EACxC,eAAY;EACZ,WAAWe,EACT,uKACAC,CACF;EAEA,UAAA,kBAAC,QAAD;GAAM,eAAA;GAAY,WAAWD,EAAG,gDAAgDpB,EAAwB,KAAK,GAAG,OAAO;GACrH,UAAA,kBAACd,EAAa,WAAd;IAAwB,aAAA;IAAY,WAAU;IAC5C,UAAA,kBAAC,OAAD;KAAK,SAAQ;KAAY,WAAU;KAAU,MAAK;KAAO,eAAA;KAAzD,UAAA,CACE,kBAAC,QAAD;MACE,GAAE;MACF,QAAO;MACP,aAAY;MACZ,eAAc;MACd,gBAAe;MACf,YAAY;MACZ,WAAU;KACX,CAAA,GACD,kBAAC,QAAD;MAAM,GAAE;MAAS,QAAO;MAAe,aAAY;MAAO,eAAc;MAAQ,WAAU;KAA4C,CAAA,CACnI;;GACiB,CAAA;EACpB,CAAA;CACW,CAAA;AAEvB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAY,cAAc;AAErE,IAAMoC,IAAuB,kBAA6C,SAAkB,EAAE,UAAO,gBAAa,OAAI,cAAW,GAAGC,KAAO,GAAK;CAC9I,IAAMC,IAAOC,EAAM,GACbC,IAAQT,KAAM,QAAQO,KACtBG,IAAQpC,EAAS,GACjBqC,IAAgBC,EAAW5B,CAAa,GACxC6B,IAAmB;EAACP,EAAI;EAAqBI,GAAO;EAAeA,GAAO;CAAO,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAC3GI,IAAQ;EACZ,GAAGR;EACH,GAAII,GAAO,WAAWJ,EAAI,YAAY,KAAA,IAAY,EAAE,SAAS,GAAK,IAAI,CAAC;EACvE,IAAKI,GAAO,YAAYC,MAAkBL,EAAI,aAAa,KAAA,IAAY,EAAE,UAAU,GAAK,IAAI,CAAC;EAC7F,GAAIO,IAAmB,EAAE,oBAAoBA,EAAiB,IAAI,CAAC;CACrE;CACA,IAAI,CAACE,GAAO,OAAO,kBAACrC,GAAD;EAAkB;EAAK,IAAI+B;EAAkB;EAAW,GAAIK;CAAQ,CAAA;CACvF,IAAME,IAAQzC,EAASkC,GAAOM,GAAOE,GAAaH,CAAK;CACvD,OACE,kBAAC,SAAD;EACE,SAASL;EACT,mBAAgB;EAChB,WAAWN,EACT,wGACAW,EAAM,YAAY,sBAClBV,CACF;EAPF,UAAA,CASE,kBAAC,QAAD;GAAM,WAAU;GACd,UAAA,kBAAC1B,GAAD;IAAkB;IAAK,IAAI+B;IAAO,GAAIK;IAAO,GAAIE,EAAM;GAAO,CAAA;EAC1D,CAAA,GACN,kBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACE,kBAAC,QAAD;IAAM,IAAIA,EAAM;IAAS,WAAWb,EAAG,qBAAqBW,EAAM,YAAY,kBAAkB;IAC7F,UAAAC;GACG,CAAA,GACLE,KACC,kBAAC,QAAD;IAAM,IAAID,EAAM;IAAe,WAAWb,EAAG,0BAA0BW,EAAM,WAAW,qBAAqB,mBAAmB;IAC7H,UAAAG;GACG,CAAA,CAEJ;EACD,CAAA,CAAA;;AAEX,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAK,cAAc;AAE9D,IAAanC,IAAgC,CAAC,GACjCD,IAAwC,CAAC,GAchDqC,IAAwB,kBAA+C,SAC3E,EAAE,UAAO,iBAAc,kBAAe,cAAW,aAAU,cAAW,aAAU,GAAGJ,KACnF,GACA;CACA,OACE,kBAAC9B,EAAc,UAAf;EAAwB,OAAO,CAAC,CAACW;EAC/B,UAAA,kBAACxB,GAAD;GACO;GACL,GAAK4B,MAAU,KAAA,IAAwB,CAAC,IAAb,EAAE,SAAM;GACnC,GAAKqB,MAAiB,KAAA,IAA+B,CAAC,IAApB,EAAE,gBAAa;GACjD,GAAKC,IAAgB,EAAE,gBAAgB,MAAgBA,EAAcC,CAAC,EAAE,IAAI,CAAC;GAC7E,GAAKC,IAAY,EAAE,aAAU,IAAI,CAAC;GAClC,GAAK5B,MAAa,KAAA,IAA2B,CAAC,IAAhB,EAAE,YAAS;GACzC,WAAWQ,EAAG,iBAAiBC,CAAS;GACxC,GAAIU;GAEH;EACgB,CAAA;CACG,CAAA;AAE5B,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAM,cAAc;AAE/D,IAAa1C,IAA2B,uBAAO,OAAOiC,GAAM;CAAE,KAAK3B;CAAa;AAAM,CAAC,GAC1ER,IAAgBgD"}
|
|
1
|
+
{"version":3,"file":"checkbox-ahl1SOqU.js","names":["BaseCheckbox","CheckboxGroup","BaseCheckboxGroup","Checkbox","__exportAll","useField","labelled","checkbox_exports","Checkbox$1","CheckboxBox","CheckboxGroup$1","KAESO_CHECKBOX_DEFAULT_VARIANTS","KAESO_CHECKBOX_GROUP_DEFAULT_VARIANTS","KAESO_CHECKBOX_GROUP_VARIANTS","KAESO_CHECKBOX_VARIANTS","GroupDisabled","ariaLabel","describedBy","labelledBy","force","Checkbox","checked","defaultChecked","onCheckedChange","c","indeterminate","disabled","readOnly","required","name","value","id","parent","invalid","cn","className","Root","own","auto","useId","boxId","field","groupDisabled","useContext","fieldDescribedBy","props","label","named","description","Group","CheckboxGroup","defaultValue","onValueChange","v","allValues"],"sources":["../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { createContext, forwardRef, useContext, useId, type ReactNode } from \"react\";\nimport { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport { CheckboxGroup as BaseCheckboxGroup } from \"@base-ui/react/checkbox-group\";\nimport { cn } from \"../../utils/cn.js\";\nimport { labelled } from \"../radio/labelled.js\";\nimport { useField } from \"../field/field.js\";\n\nexport const KAESO_CHECKBOX_VARIANTS = {\n size: {\n md: { classes: \"size-18 rounded-checkbox\" },\n },\n} as const;\nexport const KAESO_CHECKBOX_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface CheckboxProps {\n checked?: boolean | undefined;\n defaultChecked?: boolean | undefined;\n onCheckedChange?: ((checked: boolean) => void) | undefined;\n indeterminate?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n required?: boolean | undefined;\n invalid?: boolean | undefined;\n name?: string | undefined;\n value?: string | undefined;\n label?: ReactNode | undefined;\n description?: ReactNode | undefined;\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst GroupDisabled = /* @__PURE__ */ createContext(false);\n\nexport const CheckboxBox = /* @__PURE__ */ forwardRef<HTMLButtonElement, CheckboxProps & { parent?: boolean | undefined }>(function CheckboxBox(\n {\n checked,\n defaultChecked,\n onCheckedChange,\n indeterminate,\n disabled,\n readOnly,\n required,\n invalid,\n name,\n value,\n id,\n className,\n parent,\n \"aria-label\": ariaLabel,\n \"aria-describedby\": describedBy,\n \"aria-labelledby\": labelledBy,\n \"data-force\": force,\n },\n ref,\n) {\n return (\n <BaseCheckbox.Root\n ref={ref}\n {...(checked !== undefined ? { checked } : {})}\n {...(defaultChecked !== undefined ? { defaultChecked } : {})}\n {...(onCheckedChange ? { onCheckedChange: (c: boolean) => onCheckedChange(c) } : {})}\n {...(indeterminate !== undefined ? { indeterminate } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n {...(readOnly !== undefined ? { readOnly } : {})}\n {...(required !== undefined ? { required } : {})}\n {...(name ? { name } : {})}\n {...(value ? { value } : {})}\n {...(id ? { id } : {})}\n {...(parent ? { parent } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(describedBy ? { \"aria-describedby\": describedBy } : {})}\n {...(labelledBy ? { \"aria-labelledby\": labelledBy } : {})}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(force ? { \"data-force\": force } : {})}\n data-choice=\"\"\n className={cn(\n \"group/cb relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox outline-none tap-target disabled:cursor-not-allowed\",\n className,\n )}\n >\n <span aria-hidden className={cn(\"flex items-center justify-center choice-mark\", KAESO_CHECKBOX_VARIANTS.size.md.classes)}>\n <BaseCheckbox.Indicator keepMounted className=\"flex items-center justify-center\">\n <svg viewBox=\"0 0 12 12\" className=\"size-12\" fill=\"none\" aria-hidden>\n <path\n d=\"M2.5 6.25 4.9 8.5 9.5 3.75\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n pathLength={1}\n className=\"check-draw\"\n />\n <path d=\"M3 6h6\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" className=\"hidden group-data-indeterminate/cb:block\" />\n </svg>\n </BaseCheckbox.Indicator>\n </span>\n </BaseCheckbox.Root>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CheckboxBox.displayName = \"Checkbox.Box\";\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLButtonElement, CheckboxProps>(function Checkbox({ label, description, id, className, ...own }, ref) {\n const auto = useId();\n const boxId = id ?? `k-cb-${auto}`;\n const field = useField();\n const groupDisabled = useContext(GroupDisabled);\n const fieldDescribedBy = [own[\"aria-describedby\"], field?.descriptionId, field?.errorId].filter(Boolean).join(\" \");\n const props = {\n ...own,\n ...(field?.invalid && own.invalid === undefined ? { invalid: true } : {}),\n ...((field?.disabled || groupDisabled) && own.disabled === undefined ? { disabled: true } : {}),\n ...(fieldDescribedBy ? { \"aria-describedby\": fieldDescribedBy } : {}),\n };\n if (!label) return <CheckboxBox ref={ref} id={boxId} className={className} {...props} />;\n const named = labelled(boxId, label, description, props);\n return (\n <label\n htmlFor={boxId}\n data-choice-row=\"\"\n className={cn(\n \"inline-flex min-h-32 cursor-pointer items-start gap-10 py-6 select-none coarse:min-h-44 coarse:py-12\",\n props.disabled && \"cursor-not-allowed\",\n className,\n )}\n >\n <span className=\"flex h-20 items-center\">\n <CheckboxBox ref={ref} id={boxId} {...props} {...named.aria} />\n </span>\n <span className=\"flex flex-col\">\n <span id={named.labelId} className={cn(\"text-body text-fg\", props.disabled && \"text-fg-disabled\")}>\n {label}\n </span>\n {description && (\n <span id={named.descriptionId} className={cn(\"text-small text-pretty\", props.disabled ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {description}\n </span>\n )}\n </span>\n </label>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"Checkbox\";\n\nexport const KAESO_CHECKBOX_GROUP_VARIANTS = {} as const;\nexport const KAESO_CHECKBOX_GROUP_DEFAULT_VARIANTS = {} as const;\n\nexport interface CheckboxGroupProps {\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n allValues?: string[] | undefined;\n disabled?: boolean | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}\n\nconst Group = /* @__PURE__ */ forwardRef<HTMLDivElement, CheckboxGroupProps>(function CheckboxGroup(\n { value, defaultValue, onValueChange, allValues, disabled, className, children, ...props },\n ref,\n) {\n return (\n <GroupDisabled.Provider value={!!disabled}>\n <BaseCheckboxGroup\n ref={ref}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange ? { onValueChange: (v: string[]) => onValueChange(v) } : {})}\n {...(allValues ? { allValues } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n className={cn(\"flex flex-col\", className)}\n {...props}\n >\n {children}\n </BaseCheckboxGroup>\n </GroupDisabled.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Group.displayName = \"CheckboxGroup\";\n\nexport const Checkbox = /* @__PURE__ */ Object.assign(Root, { Box: CheckboxBox, Group });\nexport const CheckboxGroup = Group;\n"],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { t as e } from "./cn-BjnOAUrA.js";
|
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { t as n } from "./icon-CBzOwqrX.js";
|
|
5
5
|
import { r } from "./text-DkKdTVUf.js";
|
|
6
|
-
import { n as i } from "./copy-button-
|
|
7
|
-
import { a, c as o, o as s } from "./code-block-
|
|
6
|
+
import { n as i } from "./copy-button-DBPAA1g0.js";
|
|
7
|
+
import { a, c as o, o as s } from "./code-block-O_EPmMIQ.js";
|
|
8
8
|
import { t as c } from "./use-scroll-fade-uc8mWSDX.js";
|
|
9
9
|
import { forwardRef as l, useEffect as u, useMemo as d, useRef as f, useState as p } from "react";
|
|
10
10
|
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
@@ -349,4 +349,4 @@ process.env.NODE_ENV !== "production" && (R.displayName = "DiffView");
|
|
|
349
349
|
//#endregion
|
|
350
350
|
export { A as n, k as r, R as t };
|
|
351
351
|
|
|
352
|
-
//# sourceMappingURL=code-block-
|
|
352
|
+
//# sourceMappingURL=code-block-CE3H3nMu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-block-KIvuE8jg.js","names":["WORD","_Fragment","__icon_UnfoldMoreIcon","cn","useUiText","Icon","CopyButton","highlight","INDENT","useScrollFadeX","Fragment$1","MAX_CELLS","MAX_WORD_TOKENS","WORD$1","lcsPairs","a","b","width","table","j","pairs","i","wordChanges","before","after","keptText","longest","ranges","line","tokens","out","at","end","token","keptAt","k","last","markWords","removed","added","r","words","diffLines","head","tail","anchors","ai","bj","diffStats","lines","l","largestLineNumber","largest","unifiedDiff","foldUnchanged","near","d","context","rows","open","m","KAESO_DIFF_VIEW_VARIANTS","KAESO_DIFF_VIEW_DEFAULT_VARIANTS","NONE_OPEN","LINE","WORD","MARK","segments","source","text","start","pos","inside","changes","s","e","next","cut","dropChars","left","n","parts","p","Code","groups","part","spans","group","kind","g","DiffView","t","useMemo","stats","setTokens","useState","alive","lang","o","current","setOpen","opened","unchanged","scroller","useRef","lineNumbers","numberWidth","lineTokens","surface","className","title","Text","copy","wrap","row","count","UnfoldMoreIcon","mark","indent"],"sources":["../../src/components/code-block/diff.ts","../../src/components/code-block/diff-view.tsx"],"sourcesContent":["export type DiffKind = \"same\" | \"removed\" | \"added\";\n\nexport interface DiffLine {\n kind: DiffKind;\n text: string;\n oldNumber?: number | undefined;\n newNumber?: number | undefined;\n changes?: [number, number][] | undefined;\n}\n\nexport interface DiffStats {\n added: number;\n removed: number;\n}\n\n// Past this many cells the quadratic table costs more memory than a readable diff is worth.\nconst MAX_CELLS = 4_000_000;\nconst MAX_WORD_TOKENS = 400;\nconst WORD = /\\w+|\\s+|[^\\w\\s]/g;\n\nfunction lcsPairs<T>(a: readonly T[], b: readonly T[]): [number, number][] | null {\n if (a.length * b.length > MAX_CELLS) return null;\n const width = b.length + 1;\n const table = new Uint32Array((a.length + 1) * width);\n for (let i = a.length - 1; i >= 0; i--)\n for (let j = b.length - 1; j >= 0; j--)\n table[i * width + j] =\n a[i] === b[j] ? (table[(i + 1) * width + j + 1] ?? 0) + 1 : Math.max(table[(i + 1) * width + j] ?? 0, table[i * width + j + 1] ?? 0);\n const pairs: [number, number][] = [];\n let i = 0;\n let j = 0;\n while (i < a.length && j < b.length) {\n if (a[i] === b[j]) {\n pairs.push([i, j]);\n i++;\n j++;\n } else if ((table[(i + 1) * width + j] ?? 0) >= (table[i * width + j + 1] ?? 0)) i++;\n else j++;\n }\n return pairs;\n}\n\nfunction wordChanges(before: string, after: string): [[number, number][], [number, number][]] | null {\n const a = before.match(WORD) ?? [];\n const b = after.match(WORD) ?? [];\n if (a.length > MAX_WORD_TOKENS || b.length > MAX_WORD_TOKENS) return null;\n const pairs = lcsPairs(a, b) ?? [];\n const keptText = pairs.map(([i]) => a[i] ?? \"\").join(\"\");\n const longest = Math.max(before.replace(/\\s/g, \"\").length, after.replace(/\\s/g, \"\").length);\n if (longest === 0 || (!/\\w/.test(keptText) && keptText.replace(/\\s/g, \"\").length / longest < 0.4)) return null;\n const ranges = (tokens: string[], keptAt: Set<number>) => {\n const line = tokens.join(\"\");\n const out: [number, number][] = [];\n let at = 0;\n tokens.forEach((token, k) => {\n const end = at + token.length;\n if (!keptAt.has(k) && token.trim()) {\n const last = out[out.length - 1];\n if (last && !line.slice(last[1], at).trim()) last[1] = end;\n else out.push([at, end]);\n }\n at = end;\n });\n return out;\n };\n return [ranges(a, new Set(pairs.map(([i]) => i))), ranges(b, new Set(pairs.map(([, j]) => j)))];\n}\n\nfunction markWords(removed: DiffLine[], added: DiffLine[]) {\n const n = Math.min(removed.length, added.length);\n for (let k = 0; k < n; k++) {\n const r = removed[k] as DiffLine;\n const a = added[k] as DiffLine;\n const words = wordChanges(r.text, a.text);\n if (!words) continue;\n r.changes = words[0];\n a.changes = words[1];\n }\n}\n\nexport function diffLines(before: string, after: string): DiffLine[] {\n const a = before === \"\" ? [] : before.replace(/\\n$/, \"\").split(\"\\n\");\n const b = after === \"\" ? [] : after.replace(/\\n$/, \"\").split(\"\\n\");\n let head = 0;\n while (head < a.length && head < b.length && a[head] === b[head]) head++;\n let tail = 0;\n while (tail < a.length - head && tail < b.length - head && a[a.length - 1 - tail] === b[b.length - 1 - tail]) tail++;\n const midA = a.slice(head, a.length - tail);\n const midB = b.slice(head, b.length - tail);\n const pairs = (lcsPairs(midA, midB) ?? []).map(([i, j]): [number, number] => [i + head, j + head]);\n const anchors: [number, number][] = [\n ...Array.from({ length: head }, (_, k): [number, number] => [k, k]),\n ...pairs,\n ...Array.from({ length: tail }, (_, k): [number, number] => [a.length - tail + k, b.length - tail + k]),\n [a.length, b.length],\n ];\n const out: DiffLine[] = [];\n let i = 0;\n let j = 0;\n for (const [ai, bj] of anchors) {\n const removed = a.slice(i, ai).map((text, k): DiffLine => ({ kind: \"removed\", text, oldNumber: i + k + 1 }));\n const added = b.slice(j, bj).map((text, k): DiffLine => ({ kind: \"added\", text, newNumber: j + k + 1 }));\n markWords(removed, added);\n out.push(...removed, ...added);\n if (ai < a.length) out.push({ kind: \"same\", text: a[ai] as string, oldNumber: ai + 1, newNumber: bj + 1 });\n i = ai + 1;\n j = bj + 1;\n }\n return out;\n}\n\nexport function diffStats(lines: readonly DiffLine[]): DiffStats {\n return {\n added: lines.filter((l) => l.kind === \"added\").length,\n removed: lines.filter((l) => l.kind === \"removed\").length,\n };\n}\n\nexport function largestLineNumber(lines: readonly DiffLine[]): number {\n let largest = 1;\n for (const l of lines) largest = Math.max(largest, l.oldNumber ?? 0, l.newNumber ?? 0);\n return largest;\n}\n\nexport function unifiedDiff(lines: readonly DiffLine[]): string {\n return lines.map((l) => `${l.kind === \"added\" ? \"+\" : l.kind === \"removed\" ? \"-\" : \" \"} ${l.text}`).join(\"\\n\");\n}\n\nexport type DiffRow = { type: \"line\"; line: DiffLine; index: number } | { type: \"fold\"; from: number; to: number };\n\nexport function foldUnchanged(lines: readonly DiffLine[], context: number, open: ReadonlySet<number>): DiffRow[] {\n const near = Array.from({ length: lines.length }, () => false);\n lines.forEach((l, k) => {\n if (l.kind === \"same\") return;\n for (let d = Math.max(0, k - context); d <= Math.min(lines.length - 1, k + context); d++) near[d] = true;\n });\n const rows: DiffRow[] = [];\n let k = 0;\n while (k < lines.length) {\n if (near[k] || lines[k]?.kind !== \"same\") {\n rows.push({ type: \"line\", line: lines[k] as DiffLine, index: k });\n k++;\n continue;\n }\n let end = k;\n while (end < lines.length && !near[end]) end++;\n if (end - k < 2 || open.has(k)) for (let m = k; m < end; m++) rows.push({ type: \"line\", line: lines[m] as DiffLine, index: m });\n else rows.push({ type: \"fold\", from: k, to: end });\n k = end;\n }\n return rows;\n}\n","import { forwardRef, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { UnfoldMoreIcon as __icon_UnfoldMoreIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\nimport { Text } from \"../text/text.js\";\nimport { highlight, type CodeLang, type CodeToken } from \"./highlighter.js\";\nimport { INDENT } from \"./indent.js\";\nimport { numberWidth } from \"./numbers.js\";\nimport { diffLines, diffStats, foldUnchanged, largestLineNumber, unifiedDiff, type DiffKind, type DiffLine } from \"./diff.js\";\n\nexport const KAESO_DIFF_VIEW_VARIANTS = {\n surface: {\n well: { classes: \"rounded-well bg-fill-1\" },\n plain: { classes: \"bg-transparent\" },\n },\n} as const;\nexport const KAESO_DIFF_VIEW_DEFAULT_VARIANTS = { surface: \"well\" } as const;\n\nconst NONE_OPEN: ReadonlySet<number> = new Set();\nconst LINE: Record<DiffKind, string> = { same: \"\", removed: \"bg-diff-removed\", added: \"bg-diff-added\" };\nconst WORD: Record<DiffKind, string> = { same: \"\", removed: \"bg-diff-removed-word\", added: \"bg-diff-added-word\" };\nconst MARK: Record<DiffKind, { sign: string; className: string }> = {\n same: { sign: \" \", className: \"\" },\n removed: { sign: \"−\", className: \"text-danger-text\" },\n added: { sign: \"+\", className: \"text-success-text\" },\n};\n\nexport interface DiffViewProps {\n before: string;\n after: string;\n lang?: CodeLang | undefined;\n title?: ReactNode | undefined;\n context?: number | undefined;\n lineNumbers?: boolean | undefined;\n surface?: keyof typeof KAESO_DIFF_VIEW_VARIANTS.surface | undefined;\n copy?: boolean | undefined;\n wrap?: boolean | undefined;\n className?: string | undefined;\n}\n\ninterface Segment {\n text: string;\n className: string;\n changed: boolean;\n}\n\nfunction segments(text: string, tokens: CodeToken[] | undefined, changes: readonly [number, number][] = []): Segment[] {\n const source = tokens?.length ? tokens : [{ content: text, className: \"\" }];\n const out: Segment[] = [];\n let at = 0;\n for (const token of source) {\n let start = 0;\n while (start < token.content.length) {\n const pos = at + start;\n const inside = changes.find(([s, e]) => pos >= s && pos < e);\n const next = inside ? inside[1] : Math.min(Infinity, ...changes.map(([s]) => s).filter((s) => s > pos));\n const cut = Math.min(token.content.length, next - at);\n out.push({ text: token.content.slice(start, cut), className: token.className, changed: !!inside });\n start = cut;\n }\n at += token.content.length;\n }\n return out;\n}\n\nfunction dropChars(parts: Segment[], n: number): Segment[] {\n let left = n;\n return parts.flatMap((p) => {\n if (left === 0) return [p];\n const cut = Math.min(left, p.text.length);\n left -= cut;\n return cut === p.text.length ? [] : [{ ...p, text: p.text.slice(cut) }];\n });\n}\n\nfunction Code({ parts, kind }: { parts: Segment[]; kind: DiffKind }) {\n const groups: Segment[][] = [];\n for (const part of parts) {\n const last = groups[groups.length - 1];\n if (last && last[0]?.changed === part.changed) last.push(part);\n else groups.push([part]);\n }\n return (\n <>\n {groups.map((group, g) => {\n const spans = group.map((p, k) => (\n <span key={k} className={(group[0]?.changed ? p.className.replace(/text-fg-(tertiary|secondary)/, \"text-fg\") : p.className) || undefined}>\n {p.text}\n </span>\n ));\n return group[0]?.changed ? (\n <span key={g} data-diff-change=\"\" className={cn(\"rounded-cell forced-colors:underline\", WORD[kind])}>\n {spans}\n </span>\n ) : (\n spans\n );\n })}\n </>\n );\n}\n\nexport const DiffView = /* @__PURE__ */ forwardRef<HTMLDivElement, DiffViewProps>(function DiffView(\n { before, after, lang = \"text\", title, context = 3, lineNumbers, surface = \"well\", copy = true, wrap = false, className },\n ref,\n) {\n const t = useUiText();\n const lines = useMemo(() => diffLines(before, after), [before, after]);\n const stats = useMemo(() => diffStats(lines), [lines]);\n const [tokens, setTokens] = useState<{ before: string; after: string; lang: CodeLang; old: CodeToken[][] | null; new: CodeToken[][] | null } | null>(null);\n useEffect(() => {\n let alive = true;\n Promise.all([highlight(before.replace(/\\n$/, \"\"), lang), highlight(after.replace(/\\n$/, \"\"), lang)])\n .then(([o, n]) => alive && setTokens({ before, after, lang, old: o, new: n }))\n .catch(() => undefined);\n return () => {\n alive = false;\n };\n }, [before, after, lang]);\n const current = tokens && tokens.before === before && tokens.after === after && tokens.lang === lang ? tokens : null;\n const [open, setOpen] = useState<{ lines: DiffLine[]; at: ReadonlySet<number> }>({ lines, at: new Set() });\n const opened = open.lines === lines ? open.at : NONE_OPEN;\n const unchanged = stats.added === 0 && stats.removed === 0;\n const rows = useMemo(\n () => (unchanged ? lines.map((line, index) => ({ type: \"line\" as const, line, index })) : foldUnchanged(lines, context, opened)),\n [lines, context, opened, unchanged],\n );\n const scroller = useRef<HTMLDivElement | null>(null);\n useScrollFadeX(scroller, \"code\");\n const width = lineNumbers ? numberWidth(largestLineNumber(lines)) : \"\";\n\n const lineTokens = (line: DiffLine) => (line.kind === \"added\" ? current?.new?.[(line.newNumber ?? 0) - 1] : current?.old?.[(line.oldNumber ?? 0) - 1]);\n\n return (\n <div ref={ref} className={cn(\"relative min-w-0\", KAESO_DIFF_VIEW_VARIANTS.surface[surface].classes, className)}>\n <div className=\"flex h-44 items-center gap-4 px-8 hairline-b\">\n {title && (\n <Text as=\"span\" variant=\"small\" tone=\"secondary\" mono truncate className=\"px-8\">\n {title}\n </Text>\n )}\n <span className=\"ml-auto flex shrink-0 items-center gap-8 px-8 mono text-small tabular\">\n {unchanged ? (\n <span className=\"text-fg-secondary\">{t(\"diffView.noChanges\", \"No changes\")}</span>\n ) : (\n <>\n {stats.added > 0 && (\n <span aria-hidden=\"true\" className=\"text-success-text\">\n +{stats.added}\n </span>\n )}\n {stats.removed > 0 && (\n <span aria-hidden=\"true\" className=\"text-danger-text\">\n −{stats.removed}\n </span>\n )}\n <span className=\"sr-only\">\n {t(\"diffView.summary\", \"{added, plural, one {# line added} other {# lines added}}, {removed, plural, one {# removed} other {# removed}}\", {\n added: stats.added,\n removed: stats.removed,\n })}\n </span>\n </>\n )}\n </span>\n {copy && !unchanged && <CopyButton value={unifiedDiff(lines)} label={t(\"diffView.copy\", \"Copy diff\")} />}\n </div>\n <div\n ref={scroller}\n tabIndex={0}\n role=\"group\"\n aria-label={typeof title === \"string\" ? title : t(\"diffView.label\", \"Changes\")}\n className=\"relative overflow-x-auto py-8 scrollbar-quiet scroll-fade-x focus-ring-inset\"\n >\n <pre className=\"mono text-small text-fg\">\n <code className={cn(\"grid\", !wrap && \"min-w-max\")}>\n {rows.map((row) => {\n if (row.type === \"fold\") {\n const count = row.to - row.from;\n return (\n <button\n key={`fold-${row.from}`}\n type=\"button\"\n onClick={() => {\n scroller.current?.focus({ preventScroll: true });\n setOpen({ lines, at: new Set([...opened, row.from]) });\n }}\n className=\"flex h-32 cursor-pointer items-center bg-fill-2 font-sans text-small text-fg-secondary transition-control hover:bg-fill-3 hover:text-fg focus-ring-inset\"\n >\n <span className=\"sticky left-0 flex items-center gap-8 px-16\">\n <Icon icon={__icon_UnfoldMoreIcon} size=\"xs\" />\n {t(\"diffView.showUnchanged\", \"{count, plural, one {Show # unchanged line} other {Show # unchanged lines}}\", { count })}\n </span>\n </button>\n );\n }\n const { line } = row;\n const mark = MARK[line.kind];\n const indent = wrap ? (INDENT.exec(line.text)?.[0] ?? \"\") : \"\";\n const parts = dropChars(segments(line.text, lineTokens(line), line.changes), indent.length);\n return (\n <span key={row.index} data-diff={line.kind} className={cn(\"flex leading-code\", LINE[line.kind])}>\n {lineNumbers && (\n <>\n <span aria-hidden=\"true\" className={cn(\"ml-8 shrink-0 text-right text-fg-tertiary select-none tabular\", width)}>\n {line.oldNumber && line.kind !== \"added\" ? line.oldNumber : \"\"}\n </span>\n <span aria-hidden=\"true\" className={cn(\"ml-8 shrink-0 text-right text-fg-tertiary select-none tabular\", width)}>\n {line.newNumber && line.kind !== \"removed\" ? line.newNumber : \"\"}\n </span>\n </>\n )}\n <span aria-hidden=\"true\" className={cn(\"w-32 shrink-0 text-center select-none\", mark.className)}>\n {mark.sign}\n </span>\n {line.kind !== \"same\" && (\n <span className=\"sr-only\">{line.kind === \"added\" ? t(\"diffView.added\", \"Added\") : t(\"diffView.removed\", \"Removed\")} </span>\n )}\n {indent && <span className=\"shrink-0 whitespace-pre\">{indent}</span>}\n <span className={cn(\"min-w-0 pr-16\", wrap && \"pl-16 -indent-16 whitespace-pre-wrap wrap-anywhere\")}>\n {parts.length ? <Code parts={parts} kind={line.kind} /> : \" \"}\n </span>\n </span>\n );\n })}\n </code>\n </pre>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") DiffView.displayName = \"DiffView\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"code-block-CE3H3nMu.js","names":["WORD","_Fragment","__icon_UnfoldMoreIcon","cn","useUiText","Icon","CopyButton","highlight","INDENT","useScrollFadeX","Fragment$1","MAX_CELLS","MAX_WORD_TOKENS","WORD$1","lcsPairs","a","b","width","table","j","pairs","i","wordChanges","before","after","keptText","longest","ranges","line","tokens","out","at","end","token","keptAt","k","last","markWords","removed","added","r","words","diffLines","head","tail","anchors","ai","bj","diffStats","lines","l","largestLineNumber","largest","unifiedDiff","foldUnchanged","near","d","context","rows","open","m","KAESO_DIFF_VIEW_VARIANTS","KAESO_DIFF_VIEW_DEFAULT_VARIANTS","NONE_OPEN","LINE","WORD","MARK","segments","source","text","start","pos","inside","changes","s","e","next","cut","dropChars","left","n","parts","p","Code","groups","part","spans","group","kind","g","DiffView","t","useMemo","stats","setTokens","useState","alive","lang","o","current","setOpen","opened","unchanged","scroller","useRef","lineNumbers","numberWidth","lineTokens","surface","className","title","Text","copy","wrap","row","count","UnfoldMoreIcon","mark","indent"],"sources":["../../src/components/code-block/diff.ts","../../src/components/code-block/diff-view.tsx"],"sourcesContent":["export type DiffKind = \"same\" | \"removed\" | \"added\";\n\nexport interface DiffLine {\n kind: DiffKind;\n text: string;\n oldNumber?: number | undefined;\n newNumber?: number | undefined;\n changes?: [number, number][] | undefined;\n}\n\nexport interface DiffStats {\n added: number;\n removed: number;\n}\n\n// Past this many cells the quadratic table costs more memory than a readable diff is worth.\nconst MAX_CELLS = 4_000_000;\nconst MAX_WORD_TOKENS = 400;\nconst WORD = /\\w+|\\s+|[^\\w\\s]/g;\n\nfunction lcsPairs<T>(a: readonly T[], b: readonly T[]): [number, number][] | null {\n if (a.length * b.length > MAX_CELLS) return null;\n const width = b.length + 1;\n const table = new Uint32Array((a.length + 1) * width);\n for (let i = a.length - 1; i >= 0; i--)\n for (let j = b.length - 1; j >= 0; j--)\n table[i * width + j] =\n a[i] === b[j] ? (table[(i + 1) * width + j + 1] ?? 0) + 1 : Math.max(table[(i + 1) * width + j] ?? 0, table[i * width + j + 1] ?? 0);\n const pairs: [number, number][] = [];\n let i = 0;\n let j = 0;\n while (i < a.length && j < b.length) {\n if (a[i] === b[j]) {\n pairs.push([i, j]);\n i++;\n j++;\n } else if ((table[(i + 1) * width + j] ?? 0) >= (table[i * width + j + 1] ?? 0)) i++;\n else j++;\n }\n return pairs;\n}\n\nfunction wordChanges(before: string, after: string): [[number, number][], [number, number][]] | null {\n const a = before.match(WORD) ?? [];\n const b = after.match(WORD) ?? [];\n if (a.length > MAX_WORD_TOKENS || b.length > MAX_WORD_TOKENS) return null;\n const pairs = lcsPairs(a, b) ?? [];\n const keptText = pairs.map(([i]) => a[i] ?? \"\").join(\"\");\n const longest = Math.max(before.replace(/\\s/g, \"\").length, after.replace(/\\s/g, \"\").length);\n if (longest === 0 || (!/\\w/.test(keptText) && keptText.replace(/\\s/g, \"\").length / longest < 0.4)) return null;\n const ranges = (tokens: string[], keptAt: Set<number>) => {\n const line = tokens.join(\"\");\n const out: [number, number][] = [];\n let at = 0;\n tokens.forEach((token, k) => {\n const end = at + token.length;\n if (!keptAt.has(k) && token.trim()) {\n const last = out[out.length - 1];\n if (last && !line.slice(last[1], at).trim()) last[1] = end;\n else out.push([at, end]);\n }\n at = end;\n });\n return out;\n };\n return [ranges(a, new Set(pairs.map(([i]) => i))), ranges(b, new Set(pairs.map(([, j]) => j)))];\n}\n\nfunction markWords(removed: DiffLine[], added: DiffLine[]) {\n const n = Math.min(removed.length, added.length);\n for (let k = 0; k < n; k++) {\n const r = removed[k] as DiffLine;\n const a = added[k] as DiffLine;\n const words = wordChanges(r.text, a.text);\n if (!words) continue;\n r.changes = words[0];\n a.changes = words[1];\n }\n}\n\nexport function diffLines(before: string, after: string): DiffLine[] {\n const a = before === \"\" ? [] : before.replace(/\\n$/, \"\").split(\"\\n\");\n const b = after === \"\" ? [] : after.replace(/\\n$/, \"\").split(\"\\n\");\n let head = 0;\n while (head < a.length && head < b.length && a[head] === b[head]) head++;\n let tail = 0;\n while (tail < a.length - head && tail < b.length - head && a[a.length - 1 - tail] === b[b.length - 1 - tail]) tail++;\n const midA = a.slice(head, a.length - tail);\n const midB = b.slice(head, b.length - tail);\n const pairs = (lcsPairs(midA, midB) ?? []).map(([i, j]): [number, number] => [i + head, j + head]);\n const anchors: [number, number][] = [\n ...Array.from({ length: head }, (_, k): [number, number] => [k, k]),\n ...pairs,\n ...Array.from({ length: tail }, (_, k): [number, number] => [a.length - tail + k, b.length - tail + k]),\n [a.length, b.length],\n ];\n const out: DiffLine[] = [];\n let i = 0;\n let j = 0;\n for (const [ai, bj] of anchors) {\n const removed = a.slice(i, ai).map((text, k): DiffLine => ({ kind: \"removed\", text, oldNumber: i + k + 1 }));\n const added = b.slice(j, bj).map((text, k): DiffLine => ({ kind: \"added\", text, newNumber: j + k + 1 }));\n markWords(removed, added);\n out.push(...removed, ...added);\n if (ai < a.length) out.push({ kind: \"same\", text: a[ai] as string, oldNumber: ai + 1, newNumber: bj + 1 });\n i = ai + 1;\n j = bj + 1;\n }\n return out;\n}\n\nexport function diffStats(lines: readonly DiffLine[]): DiffStats {\n return {\n added: lines.filter((l) => l.kind === \"added\").length,\n removed: lines.filter((l) => l.kind === \"removed\").length,\n };\n}\n\nexport function largestLineNumber(lines: readonly DiffLine[]): number {\n let largest = 1;\n for (const l of lines) largest = Math.max(largest, l.oldNumber ?? 0, l.newNumber ?? 0);\n return largest;\n}\n\nexport function unifiedDiff(lines: readonly DiffLine[]): string {\n return lines.map((l) => `${l.kind === \"added\" ? \"+\" : l.kind === \"removed\" ? \"-\" : \" \"} ${l.text}`).join(\"\\n\");\n}\n\nexport type DiffRow = { type: \"line\"; line: DiffLine; index: number } | { type: \"fold\"; from: number; to: number };\n\nexport function foldUnchanged(lines: readonly DiffLine[], context: number, open: ReadonlySet<number>): DiffRow[] {\n const near = Array.from({ length: lines.length }, () => false);\n lines.forEach((l, k) => {\n if (l.kind === \"same\") return;\n for (let d = Math.max(0, k - context); d <= Math.min(lines.length - 1, k + context); d++) near[d] = true;\n });\n const rows: DiffRow[] = [];\n let k = 0;\n while (k < lines.length) {\n if (near[k] || lines[k]?.kind !== \"same\") {\n rows.push({ type: \"line\", line: lines[k] as DiffLine, index: k });\n k++;\n continue;\n }\n let end = k;\n while (end < lines.length && !near[end]) end++;\n if (end - k < 2 || open.has(k)) for (let m = k; m < end; m++) rows.push({ type: \"line\", line: lines[m] as DiffLine, index: m });\n else rows.push({ type: \"fold\", from: k, to: end });\n k = end;\n }\n return rows;\n}\n","import { forwardRef, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { UnfoldMoreIcon as __icon_UnfoldMoreIcon } from \"@hugeicons/core-free-icons\";\nimport { Icon } from \"../icon/icon.js\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\nimport { Text } from \"../text/text.js\";\nimport { highlight, type CodeLang, type CodeToken } from \"./highlighter.js\";\nimport { INDENT } from \"./indent.js\";\nimport { numberWidth } from \"./numbers.js\";\nimport { diffLines, diffStats, foldUnchanged, largestLineNumber, unifiedDiff, type DiffKind, type DiffLine } from \"./diff.js\";\n\nexport const KAESO_DIFF_VIEW_VARIANTS = {\n surface: {\n well: { classes: \"rounded-well bg-fill-1\" },\n plain: { classes: \"bg-transparent\" },\n },\n} as const;\nexport const KAESO_DIFF_VIEW_DEFAULT_VARIANTS = { surface: \"well\" } as const;\n\nconst NONE_OPEN: ReadonlySet<number> = new Set();\nconst LINE: Record<DiffKind, string> = { same: \"\", removed: \"bg-diff-removed\", added: \"bg-diff-added\" };\nconst WORD: Record<DiffKind, string> = { same: \"\", removed: \"bg-diff-removed-word\", added: \"bg-diff-added-word\" };\nconst MARK: Record<DiffKind, { sign: string; className: string }> = {\n same: { sign: \" \", className: \"\" },\n removed: { sign: \"−\", className: \"text-danger-text\" },\n added: { sign: \"+\", className: \"text-success-text\" },\n};\n\nexport interface DiffViewProps {\n before: string;\n after: string;\n lang?: CodeLang | undefined;\n title?: ReactNode | undefined;\n context?: number | undefined;\n lineNumbers?: boolean | undefined;\n surface?: keyof typeof KAESO_DIFF_VIEW_VARIANTS.surface | undefined;\n copy?: boolean | undefined;\n wrap?: boolean | undefined;\n className?: string | undefined;\n}\n\ninterface Segment {\n text: string;\n className: string;\n changed: boolean;\n}\n\nfunction segments(text: string, tokens: CodeToken[] | undefined, changes: readonly [number, number][] = []): Segment[] {\n const source = tokens?.length ? tokens : [{ content: text, className: \"\" }];\n const out: Segment[] = [];\n let at = 0;\n for (const token of source) {\n let start = 0;\n while (start < token.content.length) {\n const pos = at + start;\n const inside = changes.find(([s, e]) => pos >= s && pos < e);\n const next = inside ? inside[1] : Math.min(Infinity, ...changes.map(([s]) => s).filter((s) => s > pos));\n const cut = Math.min(token.content.length, next - at);\n out.push({ text: token.content.slice(start, cut), className: token.className, changed: !!inside });\n start = cut;\n }\n at += token.content.length;\n }\n return out;\n}\n\nfunction dropChars(parts: Segment[], n: number): Segment[] {\n let left = n;\n return parts.flatMap((p) => {\n if (left === 0) return [p];\n const cut = Math.min(left, p.text.length);\n left -= cut;\n return cut === p.text.length ? [] : [{ ...p, text: p.text.slice(cut) }];\n });\n}\n\nfunction Code({ parts, kind }: { parts: Segment[]; kind: DiffKind }) {\n const groups: Segment[][] = [];\n for (const part of parts) {\n const last = groups[groups.length - 1];\n if (last && last[0]?.changed === part.changed) last.push(part);\n else groups.push([part]);\n }\n return (\n <>\n {groups.map((group, g) => {\n const spans = group.map((p, k) => (\n <span key={k} className={(group[0]?.changed ? p.className.replace(/text-fg-(tertiary|secondary)/, \"text-fg\") : p.className) || undefined}>\n {p.text}\n </span>\n ));\n return group[0]?.changed ? (\n <span key={g} data-diff-change=\"\" className={cn(\"rounded-cell forced-colors:underline\", WORD[kind])}>\n {spans}\n </span>\n ) : (\n spans\n );\n })}\n </>\n );\n}\n\nexport const DiffView = /* @__PURE__ */ forwardRef<HTMLDivElement, DiffViewProps>(function DiffView(\n { before, after, lang = \"text\", title, context = 3, lineNumbers, surface = \"well\", copy = true, wrap = false, className },\n ref,\n) {\n const t = useUiText();\n const lines = useMemo(() => diffLines(before, after), [before, after]);\n const stats = useMemo(() => diffStats(lines), [lines]);\n const [tokens, setTokens] = useState<{ before: string; after: string; lang: CodeLang; old: CodeToken[][] | null; new: CodeToken[][] | null } | null>(null);\n useEffect(() => {\n let alive = true;\n Promise.all([highlight(before.replace(/\\n$/, \"\"), lang), highlight(after.replace(/\\n$/, \"\"), lang)])\n .then(([o, n]) => alive && setTokens({ before, after, lang, old: o, new: n }))\n .catch(() => undefined);\n return () => {\n alive = false;\n };\n }, [before, after, lang]);\n const current = tokens && tokens.before === before && tokens.after === after && tokens.lang === lang ? tokens : null;\n const [open, setOpen] = useState<{ lines: DiffLine[]; at: ReadonlySet<number> }>({ lines, at: new Set() });\n const opened = open.lines === lines ? open.at : NONE_OPEN;\n const unchanged = stats.added === 0 && stats.removed === 0;\n const rows = useMemo(\n () => (unchanged ? lines.map((line, index) => ({ type: \"line\" as const, line, index })) : foldUnchanged(lines, context, opened)),\n [lines, context, opened, unchanged],\n );\n const scroller = useRef<HTMLDivElement | null>(null);\n useScrollFadeX(scroller, \"code\");\n const width = lineNumbers ? numberWidth(largestLineNumber(lines)) : \"\";\n\n const lineTokens = (line: DiffLine) => (line.kind === \"added\" ? current?.new?.[(line.newNumber ?? 0) - 1] : current?.old?.[(line.oldNumber ?? 0) - 1]);\n\n return (\n <div ref={ref} className={cn(\"relative min-w-0\", KAESO_DIFF_VIEW_VARIANTS.surface[surface].classes, className)}>\n <div className=\"flex h-44 items-center gap-4 px-8 hairline-b\">\n {title && (\n <Text as=\"span\" variant=\"small\" tone=\"secondary\" mono truncate className=\"px-8\">\n {title}\n </Text>\n )}\n <span className=\"ml-auto flex shrink-0 items-center gap-8 px-8 mono text-small tabular\">\n {unchanged ? (\n <span className=\"text-fg-secondary\">{t(\"diffView.noChanges\", \"No changes\")}</span>\n ) : (\n <>\n {stats.added > 0 && (\n <span aria-hidden=\"true\" className=\"text-success-text\">\n +{stats.added}\n </span>\n )}\n {stats.removed > 0 && (\n <span aria-hidden=\"true\" className=\"text-danger-text\">\n −{stats.removed}\n </span>\n )}\n <span className=\"sr-only\">\n {t(\"diffView.summary\", \"{added, plural, one {# line added} other {# lines added}}, {removed, plural, one {# removed} other {# removed}}\", {\n added: stats.added,\n removed: stats.removed,\n })}\n </span>\n </>\n )}\n </span>\n {copy && !unchanged && <CopyButton value={unifiedDiff(lines)} label={t(\"diffView.copy\", \"Copy diff\")} />}\n </div>\n <div\n ref={scroller}\n tabIndex={0}\n role=\"group\"\n aria-label={typeof title === \"string\" ? title : t(\"diffView.label\", \"Changes\")}\n className=\"relative overflow-x-auto py-8 scrollbar-quiet scroll-fade-x focus-ring-inset\"\n >\n <pre className=\"mono text-small text-fg\">\n <code className={cn(\"grid\", !wrap && \"min-w-max\")}>\n {rows.map((row) => {\n if (row.type === \"fold\") {\n const count = row.to - row.from;\n return (\n <button\n key={`fold-${row.from}`}\n type=\"button\"\n onClick={() => {\n scroller.current?.focus({ preventScroll: true });\n setOpen({ lines, at: new Set([...opened, row.from]) });\n }}\n className=\"flex h-32 cursor-pointer items-center bg-fill-2 font-sans text-small text-fg-secondary transition-control hover:bg-fill-3 hover:text-fg focus-ring-inset\"\n >\n <span className=\"sticky left-0 flex items-center gap-8 px-16\">\n <Icon icon={__icon_UnfoldMoreIcon} size=\"xs\" />\n {t(\"diffView.showUnchanged\", \"{count, plural, one {Show # unchanged line} other {Show # unchanged lines}}\", { count })}\n </span>\n </button>\n );\n }\n const { line } = row;\n const mark = MARK[line.kind];\n const indent = wrap ? (INDENT.exec(line.text)?.[0] ?? \"\") : \"\";\n const parts = dropChars(segments(line.text, lineTokens(line), line.changes), indent.length);\n return (\n <span key={row.index} data-diff={line.kind} className={cn(\"flex leading-code\", LINE[line.kind])}>\n {lineNumbers && (\n <>\n <span aria-hidden=\"true\" className={cn(\"ml-8 shrink-0 text-right text-fg-tertiary select-none tabular\", width)}>\n {line.oldNumber && line.kind !== \"added\" ? line.oldNumber : \"\"}\n </span>\n <span aria-hidden=\"true\" className={cn(\"ml-8 shrink-0 text-right text-fg-tertiary select-none tabular\", width)}>\n {line.newNumber && line.kind !== \"removed\" ? line.newNumber : \"\"}\n </span>\n </>\n )}\n <span aria-hidden=\"true\" className={cn(\"w-32 shrink-0 text-center select-none\", mark.className)}>\n {mark.sign}\n </span>\n {line.kind !== \"same\" && (\n <span className=\"sr-only\">{line.kind === \"added\" ? t(\"diffView.added\", \"Added\") : t(\"diffView.removed\", \"Removed\")} </span>\n )}\n {indent && <span className=\"shrink-0 whitespace-pre\">{indent}</span>}\n <span className={cn(\"min-w-0 pr-16\", wrap && \"pl-16 -indent-16 whitespace-pre-wrap wrap-anywhere\")}>\n {parts.length ? <Code parts={parts} kind={line.kind} /> : \" \"}\n </span>\n </span>\n );\n })}\n </code>\n </pre>\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") DiffView.displayName = \"DiffView\";\n"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { t as e } from "./cn-BjnOAUrA.js";
|
|
|
3
3
|
import { i as t } from "./context-BELWW79w.js";
|
|
4
4
|
import { r as n } from "./text-DkKdTVUf.js";
|
|
5
5
|
import { r } from "./swap-text-SlUjrTlG.js";
|
|
6
|
-
import { n as i } from "./copy-button-
|
|
6
|
+
import { n as i } from "./copy-button-DBPAA1g0.js";
|
|
7
7
|
import { t as a } from "./use-scroll-fade-uc8mWSDX.js";
|
|
8
8
|
import { forwardRef as o, useEffect as s, useMemo as c, useRef as l, useState as u } from "react";
|
|
9
9
|
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
@@ -343,4 +343,4 @@ var M = j;
|
|
|
343
343
|
//#endregion
|
|
344
344
|
export { D as a, w as c, O as i, v as l, M as n, T as o, k as r, x as s, j as t };
|
|
345
345
|
|
|
346
|
-
//# sourceMappingURL=code-block-
|
|
346
|
+
//# sourceMappingURL=code-block-O_EPmMIQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-block-64e-Cy1S.js","names":["BaseTabs","cn","useUiText","Text","CopyButton","useScrollFadeX","TONES","ITALIC","BOLD","codeTokenClass","style","fontStyle","tone","color","kaesoShikiTheme","instance","HIGHLIGHT_MAX_LINE","CODE_LANGS","getHighlighter","createHighlighterCore","createJavaScriptRegexEngine","error","LOADERS","highlight","lang","code","h","loader","line","token","INDENT","dropIndent","left","n","tokens","t","cut","numberWidth","digits","count","KAESO_CODE_BLOCK_VARIANTS","KAESO_CODE_BLOCK_DEFAULT_VARIANTS","diffLineClass","CodeBlock","chosen","own","setOwn","useState","match","tabs","item","tab","choose","i","label","onTabChange","current","text","lines","useMemo","highlighted","setHighlighted","expanded","setExpanded","alive","tokenLines","collapsed","collapseAfter","visible","scroller","useRef","header","title","codeClass","copy","source","wrap","lit","highlightLines","lineNumbers","j","surface","className","Tabs","v","SwapText","CodeHighlighted"],"sources":["../../src/components/code-block/kaeso-theme.ts","../../src/components/code-block/highlighter.ts","../../src/components/code-block/indent.ts","../../src/components/code-block/numbers.ts","../../src/components/code-block/code-block.tsx"],"sourcesContent":["const TONES = {\n text: { color: \"var(--k-text)\", className: \"\" },\n quiet: { color: \"var(--k-text-tertiary)\", className: \"text-fg-tertiary\" },\n secondary: { color: \"var(--k-text-secondary)\", className: \"text-fg-secondary\" },\n string: { color: \"var(--k-info-text)\", className: \"text-info-text\" },\n constant: { color: \"var(--k-warning-text)\", className: \"text-warning-text\" },\n} as const;\n\nconst ITALIC = 1;\nconst BOLD = 2;\n\nexport function codeTokenClass(color: string | undefined, fontStyle: number | undefined): string {\n const style = fontStyle ?? 0;\n return [\n Object.values(TONES).find((tone) => tone.color === color?.toLowerCase())?.className ?? \"\",\n style & ITALIC ? \"italic\" : \"\",\n style & BOLD ? \"font-semibold\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nexport const kaesoShikiTheme = {\n name: \"kaeso\",\n type: \"light\" as const,\n colors: { \"editor.background\": \"transparent\", \"editor.foreground\": TONES.text.color },\n settings: [\n { settings: { foreground: TONES.text.color, background: \"transparent\" } },\n { scope: [\"comment\", \"punctuation.definition.comment\"], settings: { foreground: TONES.quiet.color, fontStyle: \"italic\" } },\n {\n scope: [\"string\", \"string.quoted\", \"string.template\", \"punctuation.definition.string\", \"markup.inline.raw\"],\n settings: { foreground: TONES.string.color },\n },\n { scope: [\"constant.numeric\"], settings: { foreground: TONES.constant.color } },\n { scope: [\"constant.language.boolean\", \"constant.language.null\", \"constant.language\"], settings: { foreground: TONES.text.color, fontStyle: \"bold\" } },\n {\n scope: [\"keyword\", \"storage\", \"storage.type\", \"storage.modifier\", \"keyword.control\", \"keyword.operator.new\", \"variable.language\"],\n settings: { foreground: TONES.text.color, fontStyle: \"bold\" },\n },\n {\n scope: [\"punctuation\", \"meta.brace\", \"punctuation.separator\", \"punctuation.terminator\", \"keyword.operator\", \"meta.tag punctuation\"],\n settings: { foreground: TONES.quiet.color },\n },\n { scope: [\"entity.name.function\", \"support.function\", \"entity.name.tag\", \"support.class.component\"], settings: { foreground: TONES.text.color } },\n {\n scope: [\"support.type.property-name\", \"meta.object-literal.key\", \"entity.other.attribute-name\", \"variable.other.property\"],\n settings: { foreground: TONES.text.color },\n },\n { scope: [\"entity.name.type\", \"support.type\", \"entity.other.inherited-class\"], settings: { foreground: TONES.secondary.color } },\n ],\n};\n","import { codeTokenClass, kaesoShikiTheme } from \"./kaeso-theme.js\";\n\ntype Highlighter = {\n codeToTokens: (\n code: string,\n o: { lang: string; theme: string; tokenizeMaxLineLength?: number | undefined },\n ) => { tokens: { content: string; color?: string | undefined; fontStyle?: number | undefined }[][] };\n getLoadedLanguages: () => string[];\n loadLanguage: (...l: unknown[]) => Promise<void>;\n};\nlet instance: Promise<Highlighter> | null = null;\n\nexport const HIGHLIGHT_MAX_CHARS = 200_000;\n\nconst HIGHLIGHT_MAX_LINE = 2_000;\n\nexport const CODE_LANGS = [\"ts\", \"tsx\", \"js\", \"json\", \"bash\", \"python\", \"yaml\", \"diff\"] as const;\nexport type CodeLang = (typeof CODE_LANGS)[number] | \"text\";\n\nexport function getHighlighter(): Promise<Highlighter> {\n instance ??= (async () => {\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] = await Promise.all([import(\"shiki/core\"), import(\"shiki/engine/javascript\")]);\n return (await createHighlighterCore({ themes: [kaesoShikiTheme as never], langs: [], engine: createJavaScriptRegexEngine() })) as unknown as Highlighter;\n })().catch((error: unknown) => {\n instance = null;\n throw error;\n });\n return instance;\n}\n\nconst LOADERS: Record<Exclude<CodeLang, \"text\">, () => Promise<{ default: unknown }>> = {\n ts: () => import(\"shiki/dist/langs/typescript.mjs\"),\n tsx: () => import(\"shiki/dist/langs/tsx.mjs\"),\n js: () => import(\"shiki/dist/langs/javascript.mjs\"),\n json: () => import(\"shiki/dist/langs/json.mjs\"),\n bash: () => import(\"shiki/dist/langs/bash.mjs\"),\n python: () => import(\"shiki/dist/langs/python.mjs\"),\n yaml: () => import(\"shiki/dist/langs/yaml.mjs\"),\n diff: () => import(\"shiki/dist/langs/diff.mjs\"),\n};\n\nexport interface CodeToken {\n content: string;\n className: string;\n}\n\nexport async function highlight(code: string, lang: CodeLang): Promise<CodeToken[][] | null> {\n if (lang === \"text\" || code.length > HIGHLIGHT_MAX_CHARS) return null;\n const h = await getHighlighter();\n if (!h.getLoadedLanguages().includes(lang)) {\n const loader = LOADERS[lang];\n if (!loader) return null;\n await h.loadLanguage((await loader()).default);\n }\n return h\n .codeToTokens(code, { lang, theme: \"kaeso\", tokenizeMaxLineLength: HIGHLIGHT_MAX_LINE })\n .tokens.map((line) => line.map((token) => ({ content: token.content, className: codeTokenClass(token.color, token.fontStyle) })));\n}\n","import type { CodeToken } from \"./highlighter.js\";\n\nexport const INDENT = /^[ \\t]+/;\n\nexport function dropIndent(tokens: CodeToken[], n: number): CodeToken[] {\n let left = n;\n return tokens.flatMap((t) => {\n if (left === 0) return [t];\n const cut = Math.min(left, t.content.length);\n left -= cut;\n return cut === t.content.length ? [] : [{ ...t, content: t.content.slice(cut) }];\n });\n}\n","export function numberWidth(count: number): string {\n const digits = String(count).length;\n return digits <= 2 ? \"w-16\" : digits === 3 ? \"w-24\" : digits === 4 ? \"w-32\" : \"w-40\";\n}\n","import { forwardRef, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { cn } from \"../../utils/cn.js\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\nimport { highlight, type CodeLang, type CodeToken } from \"./highlighter.js\";\nimport { INDENT, dropIndent } from \"./indent.js\";\nimport { numberWidth } from \"./numbers.js\";\nimport { Text } from \"../text/text.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\n\nexport const KAESO_CODE_BLOCK_VARIANTS = {\n surface: {\n well: { classes: \"rounded-well bg-fill-1\" },\n plain: { classes: \"bg-transparent\" },\n },\n} as const;\nexport const KAESO_CODE_BLOCK_DEFAULT_VARIANTS = { surface: \"well\" } as const;\n\nfunction diffLineClass(line: string): string | false {\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) return \"bg-diff-added\";\n if (line.startsWith(\"-\") && !line.startsWith(\"---\")) return \"bg-diff-removed\";\n return false;\n}\n\nexport interface CodeTab {\n label: string;\n code: string;\n lang?: CodeLang | undefined;\n}\n\nexport interface CodeBlockProps {\n code?: string | undefined;\n lang?: CodeLang | undefined;\n tabs?: CodeTab[] | undefined;\n tab?: string | undefined;\n onTabChange?: ((label: string) => void) | undefined;\n title?: ReactNode | undefined;\n lineNumbers?: boolean | undefined;\n highlightLines?: number[] | undefined;\n collapseAfter?: number | undefined;\n surface?: keyof typeof KAESO_CODE_BLOCK_VARIANTS.surface | undefined;\n copy?: boolean | undefined;\n wrap?: boolean | \"phone\" | undefined;\n className?: string | undefined;\n}\n\nexport const CodeBlock = /* @__PURE__ */ forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code = \"\",\n lang = \"ts\",\n tabs,\n tab: chosen,\n onTabChange,\n title,\n lineNumbers,\n highlightLines = [],\n collapseAfter = 24,\n surface = \"well\",\n copy = true,\n wrap = false,\n className,\n },\n ref,\n) {\n const [own, setOwn] = useState(0);\n const match = chosen === undefined ? -1 : (tabs?.findIndex((item) => item.label === chosen) ?? -1);\n const tab = match >= 0 ? match : own;\n const choose = (i: number) => {\n setOwn(i);\n const label = tabs?.[i]?.label;\n if (label !== undefined) onTabChange?.(label);\n };\n const t = useUiText();\n const current = tabs?.[tab] ?? { label: \"\", code, lang };\n const text = current.code.replace(/\\n$/, \"\");\n const lines = useMemo(() => text.split(\"\\n\"), [text]);\n const [highlighted, setHighlighted] = useState<{ text: string; lang: CodeLang; tokens: CodeToken[][] | null } | null>(null);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n let alive = true;\n const lang = current.lang ?? \"ts\";\n highlight(text, lang)\n .then((tokens) => alive && setHighlighted({ text, lang, tokens }))\n .catch(() => undefined);\n return () => {\n alive = false;\n };\n }, [text, current.lang]);\n const tokenLines = highlighted && highlighted.lang === (current.lang ?? \"ts\") && highlighted.text === text ? highlighted.tokens : null;\n const collapsed = collapseAfter > 0 && lines.length > collapseAfter && !expanded;\n const visible = collapsed ? collapseAfter : lines.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n useScrollFadeX(scroller, \"code\", !!tabs);\n const header = !!(title || tabs);\n const digits = numberWidth(lines.length);\n const codeClass = cn(\n \"relative overflow-x-auto py-16 scrollbar-quiet scroll-fade-x focus-ring-inset\",\n collapsed && \"overflow-y-hidden\",\n copy && !header && \"coarse:mr-40\",\n );\n const source = (\n <pre\n className={cn(\"mono text-small text-fg\", collapsed && \"scroll-fade-y\")}\n style={collapsed ? { [\"--scroll-area-overflow-y-end\" as string]: \"40px\" } : undefined}\n >\n <code className={cn(\"grid\", !wrap && \"min-w-max\", wrap === \"phone\" && \"sm:min-w-max\")}>\n {lines.slice(0, visible).map((line, i) => {\n const lit = highlightLines.includes(i + 1);\n return (\n <span\n key={i}\n className={cn(\n \"flex px-16 leading-code\",\n wrap === true && \"whitespace-pre-wrap wrap-anywhere\",\n wrap === \"phone\" && \"max-sm:whitespace-pre-wrap max-sm:wrap-anywhere\",\n current.lang === \"diff\" && diffLineClass(line),\n lit && \"bg-fill-2\",\n i === 0 && copy && !header && \"pr-48 coarse:pr-16\",\n )}\n >\n {lineNumbers && (\n <span className={cn(\"mr-16 inline-block shrink-0 text-right select-none tabular\", digits, lit ? \"text-fg-secondary\" : \"text-fg-tertiary\")}>\n {i + 1}\n </span>\n )}\n {wrap && INDENT.test(line) && <span className=\"shrink-0 whitespace-pre\">{INDENT.exec(line)?.[0]}</span>}\n <span className={cn(\"min-w-0\", wrap === true && \"pl-16 -indent-16\", wrap === \"phone\" && \"max-sm:pl-16 max-sm:-indent-16\")}>\n {tokenLines?.[i]?.length\n ? dropIndent(tokenLines[i], wrap ? (INDENT.exec(line)?.[0].length ?? 0) : 0).map((token, j) => (\n <span key={j} className={(lit ? token.className.replace(\"text-fg-tertiary\", \"text-fg-secondary\") : token.className) || undefined}>\n {token.content}\n </span>\n ))\n : (wrap ? line.replace(INDENT, \"\") : line) || \" \"}\n </span>\n </span>\n );\n })}\n </code>\n </pre>\n );\n\n return (\n <div ref={ref} className={cn(\"group/code relative min-w-0\", KAESO_CODE_BLOCK_VARIANTS.surface[surface].classes, className)}>\n <BaseTabs.Root value={tab} onValueChange={(v: unknown) => choose(Number(v))}>\n {header && (\n <div className=\"flex h-44 items-center gap-4 px-8 hairline-b\">\n {title && (\n <Text as=\"span\" variant=\"small\" tone=\"secondary\" mono truncate className=\"px-8\">\n {title}\n </Text>\n )}\n {tabs && (\n <BaseTabs.List aria-label={t(\"codeBlock.language\", \"Language\")} className=\"flex items-center gap-2\">\n {tabs.map((item, i) => (\n <BaseTabs.Tab\n key={item.label}\n value={i}\n className={cn(\n \"relative inline-flex h-28 cursor-pointer items-center rounded-pill px-10 text-small font-medium transition-control tap-target focus-ring\",\n i === tab ? \"bg-fill-3 text-fg\" : \"text-fg-secondary hover:bg-fill-2 hover:text-fg\",\n )}\n >\n {item.label}\n </BaseTabs.Tab>\n ))}\n </BaseTabs.List>\n )}\n {copy && (\n <span className=\"ml-auto shrink-0\">\n <CopyButton value={text} label={t(\"codeBlock.copy\", \"Copy code\")} />\n </span>\n )}\n </div>\n )}\n {tabs ? (\n <BaseTabs.Panel ref={scroller} value={tab} className={codeClass}>\n {source}\n </BaseTabs.Panel>\n ) : (\n <div\n ref={scroller}\n tabIndex={0}\n role=\"group\"\n aria-label={typeof title === \"string\" ? t(\"codeBlock.titledCode\", \"{title} code\", { title }) : t(\"codeBlock.code\", \"Code\")}\n className={codeClass}\n >\n {source}\n </div>\n )}\n </BaseTabs.Root>\n {collapseAfter > 0 && lines.length > collapseAfter && (\n <div className=\"flex justify-center pb-12\">\n <button\n type=\"button\"\n onClick={() => setExpanded((e) => !e)}\n className=\"relative inline-flex h-28 cursor-pointer items-center rounded-pill px-12 text-small font-medium text-fg-secondary transition-control tap-target hover:bg-fill-2 hover:text-fg focus-ring\"\n >\n <SwapText reserve={[t(\"codeBlock.showLess\", \"Show less\"), t(\"codeBlock.showAllLines\", \"Show all {count} lines\", { count: String(lines.length) })]}>\n {expanded ? t(\"codeBlock.showLess\", \"Show less\") : t(\"codeBlock.showAllLines\", \"Show all {count} lines\", { count: String(lines.length) })}\n </SwapText>\n </button>\n </div>\n )}\n {copy && !header && (\n <div className=\"absolute top-8 right-8 opacity-0 transition-control group-hover/code:opacity-100 coarse:opacity-100 focus-within:opacity-100\">\n <CopyButton value={text} label={t(\"codeBlock.copy\", \"Copy code\")} />\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CodeBlock.displayName = \"CodeBlock\";\n\nexport const CodeHighlighted = CodeBlock;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"code-block-O_EPmMIQ.js","names":["BaseTabs","cn","useUiText","Text","CopyButton","useScrollFadeX","TONES","ITALIC","BOLD","codeTokenClass","style","fontStyle","tone","color","kaesoShikiTheme","instance","HIGHLIGHT_MAX_LINE","CODE_LANGS","getHighlighter","createHighlighterCore","createJavaScriptRegexEngine","error","LOADERS","highlight","lang","code","h","loader","line","token","INDENT","dropIndent","left","n","tokens","t","cut","numberWidth","digits","count","KAESO_CODE_BLOCK_VARIANTS","KAESO_CODE_BLOCK_DEFAULT_VARIANTS","diffLineClass","CodeBlock","chosen","own","setOwn","useState","match","tabs","item","tab","choose","i","label","onTabChange","current","text","lines","useMemo","highlighted","setHighlighted","expanded","setExpanded","alive","tokenLines","collapsed","collapseAfter","visible","scroller","useRef","header","title","codeClass","copy","source","wrap","lit","highlightLines","lineNumbers","j","surface","className","Tabs","v","SwapText","CodeHighlighted"],"sources":["../../src/components/code-block/kaeso-theme.ts","../../src/components/code-block/highlighter.ts","../../src/components/code-block/indent.ts","../../src/components/code-block/numbers.ts","../../src/components/code-block/code-block.tsx"],"sourcesContent":["const TONES = {\n text: { color: \"var(--k-text)\", className: \"\" },\n quiet: { color: \"var(--k-text-tertiary)\", className: \"text-fg-tertiary\" },\n secondary: { color: \"var(--k-text-secondary)\", className: \"text-fg-secondary\" },\n string: { color: \"var(--k-info-text)\", className: \"text-info-text\" },\n constant: { color: \"var(--k-warning-text)\", className: \"text-warning-text\" },\n} as const;\n\nconst ITALIC = 1;\nconst BOLD = 2;\n\nexport function codeTokenClass(color: string | undefined, fontStyle: number | undefined): string {\n const style = fontStyle ?? 0;\n return [\n Object.values(TONES).find((tone) => tone.color === color?.toLowerCase())?.className ?? \"\",\n style & ITALIC ? \"italic\" : \"\",\n style & BOLD ? \"font-semibold\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nexport const kaesoShikiTheme = {\n name: \"kaeso\",\n type: \"light\" as const,\n colors: { \"editor.background\": \"transparent\", \"editor.foreground\": TONES.text.color },\n settings: [\n { settings: { foreground: TONES.text.color, background: \"transparent\" } },\n { scope: [\"comment\", \"punctuation.definition.comment\"], settings: { foreground: TONES.quiet.color, fontStyle: \"italic\" } },\n {\n scope: [\"string\", \"string.quoted\", \"string.template\", \"punctuation.definition.string\", \"markup.inline.raw\"],\n settings: { foreground: TONES.string.color },\n },\n { scope: [\"constant.numeric\"], settings: { foreground: TONES.constant.color } },\n { scope: [\"constant.language.boolean\", \"constant.language.null\", \"constant.language\"], settings: { foreground: TONES.text.color, fontStyle: \"bold\" } },\n {\n scope: [\"keyword\", \"storage\", \"storage.type\", \"storage.modifier\", \"keyword.control\", \"keyword.operator.new\", \"variable.language\"],\n settings: { foreground: TONES.text.color, fontStyle: \"bold\" },\n },\n {\n scope: [\"punctuation\", \"meta.brace\", \"punctuation.separator\", \"punctuation.terminator\", \"keyword.operator\", \"meta.tag punctuation\"],\n settings: { foreground: TONES.quiet.color },\n },\n { scope: [\"entity.name.function\", \"support.function\", \"entity.name.tag\", \"support.class.component\"], settings: { foreground: TONES.text.color } },\n {\n scope: [\"support.type.property-name\", \"meta.object-literal.key\", \"entity.other.attribute-name\", \"variable.other.property\"],\n settings: { foreground: TONES.text.color },\n },\n { scope: [\"entity.name.type\", \"support.type\", \"entity.other.inherited-class\"], settings: { foreground: TONES.secondary.color } },\n ],\n};\n","import { codeTokenClass, kaesoShikiTheme } from \"./kaeso-theme.js\";\n\ntype Highlighter = {\n codeToTokens: (\n code: string,\n o: { lang: string; theme: string; tokenizeMaxLineLength?: number | undefined },\n ) => { tokens: { content: string; color?: string | undefined; fontStyle?: number | undefined }[][] };\n getLoadedLanguages: () => string[];\n loadLanguage: (...l: unknown[]) => Promise<void>;\n};\nlet instance: Promise<Highlighter> | null = null;\n\nexport const HIGHLIGHT_MAX_CHARS = 200_000;\n\nconst HIGHLIGHT_MAX_LINE = 2_000;\n\nexport const CODE_LANGS = [\"ts\", \"tsx\", \"js\", \"json\", \"bash\", \"python\", \"yaml\", \"diff\"] as const;\nexport type CodeLang = (typeof CODE_LANGS)[number] | \"text\";\n\nexport function getHighlighter(): Promise<Highlighter> {\n instance ??= (async () => {\n const [{ createHighlighterCore }, { createJavaScriptRegexEngine }] = await Promise.all([import(\"shiki/core\"), import(\"shiki/engine/javascript\")]);\n return (await createHighlighterCore({ themes: [kaesoShikiTheme as never], langs: [], engine: createJavaScriptRegexEngine() })) as unknown as Highlighter;\n })().catch((error: unknown) => {\n instance = null;\n throw error;\n });\n return instance;\n}\n\nconst LOADERS: Record<Exclude<CodeLang, \"text\">, () => Promise<{ default: unknown }>> = {\n ts: () => import(\"shiki/dist/langs/typescript.mjs\"),\n tsx: () => import(\"shiki/dist/langs/tsx.mjs\"),\n js: () => import(\"shiki/dist/langs/javascript.mjs\"),\n json: () => import(\"shiki/dist/langs/json.mjs\"),\n bash: () => import(\"shiki/dist/langs/bash.mjs\"),\n python: () => import(\"shiki/dist/langs/python.mjs\"),\n yaml: () => import(\"shiki/dist/langs/yaml.mjs\"),\n diff: () => import(\"shiki/dist/langs/diff.mjs\"),\n};\n\nexport interface CodeToken {\n content: string;\n className: string;\n}\n\nexport async function highlight(code: string, lang: CodeLang): Promise<CodeToken[][] | null> {\n if (lang === \"text\" || code.length > HIGHLIGHT_MAX_CHARS) return null;\n const h = await getHighlighter();\n if (!h.getLoadedLanguages().includes(lang)) {\n const loader = LOADERS[lang];\n if (!loader) return null;\n await h.loadLanguage((await loader()).default);\n }\n return h\n .codeToTokens(code, { lang, theme: \"kaeso\", tokenizeMaxLineLength: HIGHLIGHT_MAX_LINE })\n .tokens.map((line) => line.map((token) => ({ content: token.content, className: codeTokenClass(token.color, token.fontStyle) })));\n}\n","import type { CodeToken } from \"./highlighter.js\";\n\nexport const INDENT = /^[ \\t]+/;\n\nexport function dropIndent(tokens: CodeToken[], n: number): CodeToken[] {\n let left = n;\n return tokens.flatMap((t) => {\n if (left === 0) return [t];\n const cut = Math.min(left, t.content.length);\n left -= cut;\n return cut === t.content.length ? [] : [{ ...t, content: t.content.slice(cut) }];\n });\n}\n","export function numberWidth(count: number): string {\n const digits = String(count).length;\n return digits <= 2 ? \"w-16\" : digits === 3 ? \"w-24\" : digits === 4 ? \"w-32\" : \"w-40\";\n}\n","import { forwardRef, useEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { cn } from \"../../utils/cn.js\";\nimport { CopyButton } from \"../copy-button/copy-button.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\nimport { highlight, type CodeLang, type CodeToken } from \"./highlighter.js\";\nimport { INDENT, dropIndent } from \"./indent.js\";\nimport { numberWidth } from \"./numbers.js\";\nimport { Text } from \"../text/text.js\";\nimport { useUiText } from \"../../i18n/context.js\";\nimport { useScrollFadeX } from \"../../hooks/use-scroll-fade.js\";\n\nexport const KAESO_CODE_BLOCK_VARIANTS = {\n surface: {\n well: { classes: \"rounded-well bg-fill-1\" },\n plain: { classes: \"bg-transparent\" },\n },\n} as const;\nexport const KAESO_CODE_BLOCK_DEFAULT_VARIANTS = { surface: \"well\" } as const;\n\nfunction diffLineClass(line: string): string | false {\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) return \"bg-diff-added\";\n if (line.startsWith(\"-\") && !line.startsWith(\"---\")) return \"bg-diff-removed\";\n return false;\n}\n\nexport interface CodeTab {\n label: string;\n code: string;\n lang?: CodeLang | undefined;\n}\n\nexport interface CodeBlockProps {\n code?: string | undefined;\n lang?: CodeLang | undefined;\n tabs?: CodeTab[] | undefined;\n tab?: string | undefined;\n onTabChange?: ((label: string) => void) | undefined;\n title?: ReactNode | undefined;\n lineNumbers?: boolean | undefined;\n highlightLines?: number[] | undefined;\n collapseAfter?: number | undefined;\n surface?: keyof typeof KAESO_CODE_BLOCK_VARIANTS.surface | undefined;\n copy?: boolean | undefined;\n wrap?: boolean | \"phone\" | undefined;\n className?: string | undefined;\n}\n\nexport const CodeBlock = /* @__PURE__ */ forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code = \"\",\n lang = \"ts\",\n tabs,\n tab: chosen,\n onTabChange,\n title,\n lineNumbers,\n highlightLines = [],\n collapseAfter = 24,\n surface = \"well\",\n copy = true,\n wrap = false,\n className,\n },\n ref,\n) {\n const [own, setOwn] = useState(0);\n const match = chosen === undefined ? -1 : (tabs?.findIndex((item) => item.label === chosen) ?? -1);\n const tab = match >= 0 ? match : own;\n const choose = (i: number) => {\n setOwn(i);\n const label = tabs?.[i]?.label;\n if (label !== undefined) onTabChange?.(label);\n };\n const t = useUiText();\n const current = tabs?.[tab] ?? { label: \"\", code, lang };\n const text = current.code.replace(/\\n$/, \"\");\n const lines = useMemo(() => text.split(\"\\n\"), [text]);\n const [highlighted, setHighlighted] = useState<{ text: string; lang: CodeLang; tokens: CodeToken[][] | null } | null>(null);\n const [expanded, setExpanded] = useState(false);\n useEffect(() => {\n let alive = true;\n const lang = current.lang ?? \"ts\";\n highlight(text, lang)\n .then((tokens) => alive && setHighlighted({ text, lang, tokens }))\n .catch(() => undefined);\n return () => {\n alive = false;\n };\n }, [text, current.lang]);\n const tokenLines = highlighted && highlighted.lang === (current.lang ?? \"ts\") && highlighted.text === text ? highlighted.tokens : null;\n const collapsed = collapseAfter > 0 && lines.length > collapseAfter && !expanded;\n const visible = collapsed ? collapseAfter : lines.length;\n const scroller = useRef<HTMLDivElement | null>(null);\n useScrollFadeX(scroller, \"code\", !!tabs);\n const header = !!(title || tabs);\n const digits = numberWidth(lines.length);\n const codeClass = cn(\n \"relative overflow-x-auto py-16 scrollbar-quiet scroll-fade-x focus-ring-inset\",\n collapsed && \"overflow-y-hidden\",\n copy && !header && \"coarse:mr-40\",\n );\n const source = (\n <pre\n className={cn(\"mono text-small text-fg\", collapsed && \"scroll-fade-y\")}\n style={collapsed ? { [\"--scroll-area-overflow-y-end\" as string]: \"40px\" } : undefined}\n >\n <code className={cn(\"grid\", !wrap && \"min-w-max\", wrap === \"phone\" && \"sm:min-w-max\")}>\n {lines.slice(0, visible).map((line, i) => {\n const lit = highlightLines.includes(i + 1);\n return (\n <span\n key={i}\n className={cn(\n \"flex px-16 leading-code\",\n wrap === true && \"whitespace-pre-wrap wrap-anywhere\",\n wrap === \"phone\" && \"max-sm:whitespace-pre-wrap max-sm:wrap-anywhere\",\n current.lang === \"diff\" && diffLineClass(line),\n lit && \"bg-fill-2\",\n i === 0 && copy && !header && \"pr-48 coarse:pr-16\",\n )}\n >\n {lineNumbers && (\n <span className={cn(\"mr-16 inline-block shrink-0 text-right select-none tabular\", digits, lit ? \"text-fg-secondary\" : \"text-fg-tertiary\")}>\n {i + 1}\n </span>\n )}\n {wrap && INDENT.test(line) && <span className=\"shrink-0 whitespace-pre\">{INDENT.exec(line)?.[0]}</span>}\n <span className={cn(\"min-w-0\", wrap === true && \"pl-16 -indent-16\", wrap === \"phone\" && \"max-sm:pl-16 max-sm:-indent-16\")}>\n {tokenLines?.[i]?.length\n ? dropIndent(tokenLines[i], wrap ? (INDENT.exec(line)?.[0].length ?? 0) : 0).map((token, j) => (\n <span key={j} className={(lit ? token.className.replace(\"text-fg-tertiary\", \"text-fg-secondary\") : token.className) || undefined}>\n {token.content}\n </span>\n ))\n : (wrap ? line.replace(INDENT, \"\") : line) || \" \"}\n </span>\n </span>\n );\n })}\n </code>\n </pre>\n );\n\n return (\n <div ref={ref} className={cn(\"group/code relative min-w-0\", KAESO_CODE_BLOCK_VARIANTS.surface[surface].classes, className)}>\n <BaseTabs.Root value={tab} onValueChange={(v: unknown) => choose(Number(v))}>\n {header && (\n <div className=\"flex h-44 items-center gap-4 px-8 hairline-b\">\n {title && (\n <Text as=\"span\" variant=\"small\" tone=\"secondary\" mono truncate className=\"px-8\">\n {title}\n </Text>\n )}\n {tabs && (\n <BaseTabs.List aria-label={t(\"codeBlock.language\", \"Language\")} className=\"flex items-center gap-2\">\n {tabs.map((item, i) => (\n <BaseTabs.Tab\n key={item.label}\n value={i}\n className={cn(\n \"relative inline-flex h-28 cursor-pointer items-center rounded-pill px-10 text-small font-medium transition-control tap-target focus-ring\",\n i === tab ? \"bg-fill-3 text-fg\" : \"text-fg-secondary hover:bg-fill-2 hover:text-fg\",\n )}\n >\n {item.label}\n </BaseTabs.Tab>\n ))}\n </BaseTabs.List>\n )}\n {copy && (\n <span className=\"ml-auto shrink-0\">\n <CopyButton value={text} label={t(\"codeBlock.copy\", \"Copy code\")} />\n </span>\n )}\n </div>\n )}\n {tabs ? (\n <BaseTabs.Panel ref={scroller} value={tab} className={codeClass}>\n {source}\n </BaseTabs.Panel>\n ) : (\n <div\n ref={scroller}\n tabIndex={0}\n role=\"group\"\n aria-label={typeof title === \"string\" ? t(\"codeBlock.titledCode\", \"{title} code\", { title }) : t(\"codeBlock.code\", \"Code\")}\n className={codeClass}\n >\n {source}\n </div>\n )}\n </BaseTabs.Root>\n {collapseAfter > 0 && lines.length > collapseAfter && (\n <div className=\"flex justify-center pb-12\">\n <button\n type=\"button\"\n onClick={() => setExpanded((e) => !e)}\n className=\"relative inline-flex h-28 cursor-pointer items-center rounded-pill px-12 text-small font-medium text-fg-secondary transition-control tap-target hover:bg-fill-2 hover:text-fg focus-ring\"\n >\n <SwapText reserve={[t(\"codeBlock.showLess\", \"Show less\"), t(\"codeBlock.showAllLines\", \"Show all {count} lines\", { count: String(lines.length) })]}>\n {expanded ? t(\"codeBlock.showLess\", \"Show less\") : t(\"codeBlock.showAllLines\", \"Show all {count} lines\", { count: String(lines.length) })}\n </SwapText>\n </button>\n </div>\n )}\n {copy && !header && (\n <div className=\"absolute top-8 right-8 opacity-0 transition-control group-hover/code:opacity-100 coarse:opacity-100 focus-within:opacity-100\">\n <CopyButton value={text} label={t(\"codeBlock.copy\", \"Copy code\")} />\n </div>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") CodeBlock.displayName = \"CodeBlock\";\n\nexport const CodeHighlighted = CodeBlock;\n"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { i as e, o as t, r as n } from "./styles-
|
|
2
|
+
import { i as e, o as t, r as n } from "./styles-8fn_bHRP.js";
|
|
3
3
|
import { t as r } from "./cn-BjnOAUrA.js";
|
|
4
4
|
import { i } from "./dev-CR1p7gCm.js";
|
|
5
5
|
import { n as ee, r as te } from "./portal-context-CTatR2Z8.js";
|
|
6
6
|
import { i as a } from "./context-BELWW79w.js";
|
|
7
7
|
import { t as o } from "./icon-CBzOwqrX.js";
|
|
8
8
|
import { a as ne, o as re, s as ie } from "./field-D7m-yl-D.js";
|
|
9
|
-
import { a as s, i as c } from "./input-group-
|
|
9
|
+
import { a as s, i as c } from "./input-group-BbxwEAUP.js";
|
|
10
10
|
import { a as l } from "./tag-BGr6lTSV.js";
|
|
11
11
|
import { n as u, t as ae } from "./use-layout-width-CbSDbRb0.js";
|
|
12
12
|
import { forwardRef as d, useEffect as oe, useMemo as f, useRef as p, useState as m } from "react";
|
|
@@ -242,6 +242,10 @@ var A = /* @__PURE__ */ d(function(s, c) {
|
|
|
242
242
|
children: t.description
|
|
243
243
|
})]
|
|
244
244
|
}),
|
|
245
|
+
t.meta && /* @__PURE__ */ g("span", {
|
|
246
|
+
className: "shrink-0 text-small font-regular text-fg-tertiary tabular",
|
|
247
|
+
children: t.meta
|
|
248
|
+
}),
|
|
245
249
|
/* @__PURE__ */ g(S.ItemIndicator, {
|
|
246
250
|
keepMounted: !0,
|
|
247
251
|
className: "flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-selected:opacity-100",
|
|
@@ -349,4 +353,4 @@ process.env.NODE_ENV !== "production" && (N.displayName = "Autocomplete");
|
|
|
349
353
|
//#endregion
|
|
350
354
|
export { j as a, M as i, A as n, T as o, E as r, w as s, N as t };
|
|
351
355
|
|
|
352
|
-
//# sourceMappingURL=combobox-
|
|
356
|
+
//# sourceMappingURL=combobox-DghYPLVQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox-DghYPLVQ.js","names":["Combobox","BaseCombobox","_Fragment","__icon_Cancel01Icon","__icon_ArrowDown01Icon","__icon_Add01Icon","__icon_Tick02Icon","Autocomplete","BaseAutocomplete","MENU_ITEM","MENU_POPUP","MENU_ICON","cn","pageBoundary","usePortalContainer","useUiText","Icon","useField","useFieldControl","withField","LEADING","KAESO_INPUT_GROUP_VARIANTS","Tag","useLayoutWidth","anchorWidthStyle","Fragment$1","KAESO_COMBOBOX_VARIANTS","KAESO_COMBOBOX_DEFAULT_VARIANTS","Highlight","q","query","text","CHIPS","CHEVRON","keepValueOnEscape","Combobox$1","ariaLabel","force","props","className","t","field","fc","setQuery","useState","fieldRef","useRef","fieldWidth","inner","setInner","multiple","current","chosenKey","seen","byValue","useMemo","chosen","next","v","o","options","matched","list","onCreate","report","onInputValueChange","pending","timer","reportInput","searchDelay","rootValue","handleChange","arr","created","x","inputEl","Combobox","id","invalid","error","control","filtered","a","b","disabled","name","size","label","description","value","Cancel01Icon","ArrowDown01Icon","loading","emptyText","Add01Icon","createLabel","Tick02Icon","hidden","KAESO_AUTOCOMPLETE_VARIANTS","KAESO_AUTOCOMPLETE_DEFAULT_VARIANTS","Autocomplete$1","defaultValue","Autocomplete","suggestions","onValueChange","leadingIcon","s"],"sources":["../../src/components/combobox/combobox.tsx"],"sourcesContent":["import { pageBoundary, usePortalContainer } from \"../../utils/portal-context.js\";\nimport { forwardRef, useEffect, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from \"react\";\nimport { Combobox as BaseCombobox } from \"@base-ui/react/combobox\";\nimport { Autocomplete as BaseAutocomplete } from \"@base-ui/react/autocomplete\";\nimport { cn } from \"../../utils/cn.js\";\nimport { warnStylingClassName } from \"../../utils/dev.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { Cancel01Icon as __icon_Cancel01Icon, ArrowDown01Icon as __icon_ArrowDown01Icon, Add01Icon as __icon_Add01Icon, Tick02Icon as __icon_Tick02Icon } from \"@hugeicons/core-free-icons\";\nimport { KAESO_INPUT_GROUP_VARIANTS, LEADING, type InputSize } from \"../input/input-group.js\";\nimport { Tag } from \"../tag/tag.js\";\nimport { MENU_ICON, MENU_ITEM, MENU_POPUP } from \"../menu/styles.js\";\n\nimport { anchorWidthStyle, useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_COMBOBOX_VARIANTS = {\n size: {\n sm: {\n classes: KAESO_INPUT_GROUP_VARIANTS.size.sm.classes,\n },\n md: {\n classes: KAESO_INPUT_GROUP_VARIANTS.size.md.classes,\n },\n lg: {\n classes: KAESO_INPUT_GROUP_VARIANTS.size.lg.classes,\n },\n xl: {\n classes: KAESO_INPUT_GROUP_VARIANTS.size.xl.classes,\n },\n },\n} as const;\nexport const KAESO_COMBOBOX_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n description?: ReactNode | undefined;\n /** A short value on the row's end, such as a time zone's offset. */\n meta?: ReactNode | undefined;\n icon?: IconData | undefined;\n leading?: ReactNode | undefined;\n disabled?: boolean | undefined;\n}\n\ninterface CreateItem extends ComboboxOption {\n __create: true;\n}\n\nexport interface HighlightProps {\n text: string;\n query: string;\n}\n\nexport const Highlight = /* @__PURE__ */ forwardRef<HTMLSpanElement, HighlightProps>(function Highlight({ text, query }, ref) {\n const q = query.trim().toLowerCase();\n if (!q) return <span ref={ref}>{text}</span>;\n const i = text.toLowerCase().indexOf(q);\n if (i < 0)\n return (\n <span ref={ref} className=\"text-fg-secondary group-data-disabled/item:text-fg-disabled\">\n {text}\n </span>\n );\n return (\n <span ref={ref} className=\"text-fg-secondary group-data-disabled/item:text-fg-disabled\">\n {text.slice(0, i)}\n <span className=\"text-fg group-data-disabled/item:text-fg-disabled\">{text.slice(i, i + q.length)}</span>\n {text.slice(i + q.length)}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Highlight.displayName = \"Highlight\";\n\ninterface BaseProps extends FieldWrapProps {\n options: ComboboxOption[];\n placeholder?: string | undefined;\n size?: InputSize | undefined;\n emptyText?: ReactNode | undefined;\n loading?: boolean | undefined;\n onInputValueChange?: ((value: string) => void) | undefined;\n searchDelay?: number | undefined;\n onCreate?: ((label: string) => void) | undefined;\n createLabel?: ((label: string) => string) | undefined;\n disabled?: boolean | undefined;\n invalid?: boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\nexport interface SingleComboboxProps extends BaseProps {\n multiple?: false | undefined;\n value?: string | null | undefined;\n defaultValue?: string | null | undefined;\n onValueChange?: ((value: string | null) => void) | undefined;\n}\nexport interface MultiComboboxProps extends BaseProps {\n multiple: true;\n value?: string[] | undefined;\n defaultValue?: string[] | undefined;\n onValueChange?: ((value: string[]) => void) | undefined;\n}\nexport type ComboboxProps = SingleComboboxProps | MultiComboboxProps;\n\nconst CHIPS: Record<InputSize, { field: string; row: string; chevron: string }> = {\n sm: { field: \"min-h-32 p-4 pe-32\", row: \"h-24\", chevron: \"end-2 top-2\" },\n md: { field: \"min-h-36 p-4 pe-36\", row: \"h-28\", chevron: \"end-4 top-4\" },\n lg: { field: \"min-h-40 p-6 pe-36\", row: \"h-28\", chevron: \"end-6 top-6\" },\n xl: { field: \"min-h-48 p-8 pe-40 text-body-lg\", row: \"h-32\", chevron: \"end-10 top-10\" },\n};\n\nconst CHEVRON = \"inline-flex size-28 shrink-0 items-center justify-center rounded-pill text-fg-tertiary transition-control hover:bg-raised-hover hover:text-fg\";\n\nfunction keepValueOnEscape(e: KeyboardEvent<HTMLInputElement> & { preventBaseUIHandler?: (() => void) | undefined }) {\n if (e.key === \"Escape\" && e.currentTarget.getAttribute(\"aria-expanded\") !== \"true\") e.preventBaseUIHandler?.();\n}\n\nexport const Combobox = /* @__PURE__ */ forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(props, ref) {\n const {\n options,\n placeholder,\n size = \"md\",\n emptyText,\n loading,\n onInputValueChange,\n searchDelay = 0,\n onCreate,\n createLabel,\n disabled,\n invalid,\n id,\n name,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n multiple,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n warnStylingClassName(\"Combobox\", className);\n const t = useUiText();\n const field = useField();\n const fc = useFieldControl(props);\n const [query, setQuery] = useState(\"\");\n const fieldRef = useRef<HTMLDivElement | null>(null);\n const fieldWidth = useLayoutWidth(fieldRef);\n const [inner, setInner] = useState<string | null | string[]>(() => props.defaultValue ?? (multiple ? [] : null));\n const current = props.value !== undefined ? props.value : inner;\n const chosenKey = (Array.isArray(current) ? current : current == null ? [] : [current]).join(\"\\u0000\");\n const seen = useRef(new Map<string, ComboboxOption>());\n const byValue = useMemo(() => {\n const chosen = new Set(chosenKey ? chosenKey.split(\"\\u0000\") : []);\n const next = new Map<string, ComboboxOption>();\n for (const [v, o] of seen.current) if (chosen.has(v)) next.set(v, o);\n for (const o of options) next.set(o.value, o);\n seen.current = next;\n return next;\n }, [options, chosenKey]);\n const { filtered, hidden } = useMemo(() => {\n const SHOWN_AT_MOST = 100;\n const q = query.trim().toLowerCase();\n const matched = q ? options.filter((o) => o.label.toLowerCase().includes(q) || o.value.toLowerCase().includes(q)) : options;\n const list: (ComboboxOption | CreateItem)[] = matched.slice(0, SHOWN_AT_MOST);\n if (onCreate && q && !options.some((o) => o.label.toLowerCase() === q))\n list.push({\n value: `__create__${query}`,\n label: query.trim(),\n __create: true,\n });\n return { filtered: list, hidden: Math.max(0, matched.length - SHOWN_AT_MOST) };\n }, [options, query, onCreate]);\n const report = useRef(onInputValueChange);\n report.current = onInputValueChange;\n const pending = useRef<ReturnType<typeof setTimeout> | null>(null);\n useEffect(() => {\n const timer = pending;\n return () => {\n if (timer.current) clearTimeout(timer.current);\n };\n }, []);\n const reportInput = (v: string) => {\n if (searchDelay <= 0) return report.current?.(v);\n if (pending.current) clearTimeout(pending.current);\n pending.current = setTimeout(() => {\n pending.current = null;\n report.current?.(v);\n }, searchDelay);\n };\n const rootValue = Array.isArray(current) ? current.flatMap((v) => byValue.get(v) ?? []) : current == null ? null : (byValue.get(current) ?? null);\n\n const handleChange = (v: unknown) => {\n const arr = Array.isArray(v) ? (v as (ComboboxOption | CreateItem)[]) : null;\n const created = (arr ?? [v as ComboboxOption | CreateItem | null]).find((x) => x && \"__create\" in x) as CreateItem | undefined;\n if (created) {\n onCreate?.(created.label);\n return;\n }\n const next = multiple ? (arr ?? []).map((x) => x.value) : ((v as ComboboxOption | null)?.value ?? null);\n if (props.value === undefined) setInner(next);\n if (multiple) (props.onValueChange as ((x: string[]) => void) | undefined)?.(next as string[]);\n else (props.onValueChange as ((x: string | null) => void) | undefined)?.(next as string | null);\n };\n\n const inputEl = (\n <BaseCombobox.Input\n ref={ref}\n placeholder={placeholder}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n {...(invalid || error ? { \"aria-invalid\": true } : {})}\n onKeyDown={keepValueOnEscape}\n className=\"min-w-0 flex-1 bg-transparent text-fg outline-none placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled\"\n />\n );\n\n const control = (\n <BaseCombobox.Root\n items={filtered}\n filteredItems={filtered}\n value={rootValue}\n onValueChange={handleChange}\n onInputValueChange={(v: string) => {\n setQuery(v);\n reportInput(v);\n }}\n autoHighlight\n itemToStringLabel={(o: ComboboxOption) => o?.label ?? \"\"}\n isItemEqualToValue={(a: ComboboxOption, b: ComboboxOption) => a?.value === b?.value}\n multiple={multiple === true}\n {...(disabled ? { disabled } : {})}\n {...(name ? { name } : {})}\n >\n {multiple ? (\n <BaseCombobox.Chips\n ref={fieldRef}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative flex w-full flex-wrap items-center gap-4 rounded-field material-field transition-control cursor-text\",\n CHIPS[size].field,\n !(label || description || error) && className,\n )}\n >\n <BaseCombobox.Value>\n {(value: ComboboxOption[]) => (\n <>\n {value.map((o) => (\n <BaseCombobox.Chip key={o.value} aria-label={o.label} className=\"outline-none\">\n <Tag className=\"pe-2\">\n {o.label}\n <BaseCombobox.ChipRemove\n aria-label={t(\"combobox.remove\", \"Remove {label}\", { label: o.label })}\n className=\"ms-2 inline-flex size-24 items-center justify-center rounded-pill text-fg-tertiary transition-control hover:bg-fill-2 hover:text-fg\"\n >\n <Icon icon={__icon_Cancel01Icon} size=\"xs\" />\n </BaseCombobox.ChipRemove>\n </Tag>\n </BaseCombobox.Chip>\n ))}\n <span className={cn(\"flex min-w-64 flex-1 basis-64 items-center\", CHIPS[size].row, value.length === 0 ? \"px-12\" : \"px-8\")}>{inputEl}</span>\n <BaseCombobox.Trigger aria-label={t(\"combobox.showOptions\", \"Show options\")} className={cn(CHEVRON, \"absolute\", CHIPS[size].chevron)}>\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </BaseCombobox.Trigger>\n </>\n )}\n </BaseCombobox.Value>\n </BaseCombobox.Chips>\n ) : (\n <BaseCombobox.InputGroup\n ref={fieldRef}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative flex w-full min-w-0 items-center rounded-pill material-field transition-control cursor-text\",\n KAESO_COMBOBOX_VARIANTS.size[size].classes,\n \"pe-4\",\n !(label || description || error) && className,\n )}\n >\n {inputEl}\n <BaseCombobox.Trigger aria-label={t(\"combobox.showOptions\", \"Show options\")} className={CHEVRON}>\n <Icon icon={__icon_ArrowDown01Icon} size=\"sm\" />\n </BaseCombobox.Trigger>\n </BaseCombobox.InputGroup>\n )}\n <BaseCombobox.Portal container={usePortalContainer()}>\n <BaseCombobox.Positioner\n anchor={fieldRef}\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n align=\"start\"\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseCombobox.Popup className={cn(MENU_POPUP, \"relative min-w-anchor overflow-hidden\")} style={anchorWidthStyle(fieldWidth)}>\n {loading && (\n <span aria-hidden className=\"absolute inset-x-16 top-0 h-2 overflow-hidden rounded-pill show-after-delay reduced:hidden\">\n <span className=\"block h-full w-1/3 animate-indeterminate rounded-pill bg-fg-tertiary\" />\n </span>\n )}\n <BaseCombobox.Status className=\"sr-only\">{loading ? t(\"combobox.loadingResults\", \"Loading results\") : \"\"}</BaseCombobox.Status>\n <BaseCombobox.Empty className=\"flex h-34 items-center px-10 text-body text-fg-secondary empty:hidden\">\n {loading\n ? t(\"combobox.loading\", \"Loading…\")\n : (emptyText ??\n (query.trim() ? t(\"combobox.noMatch\", \"No matches for “{query}”\", { query: query.trim() }) : t(\"combobox.noResults\", \"No results\")))}\n </BaseCombobox.Empty>\n <BaseCombobox.List className=\"-m-6 flex min-h-0 flex-col overflow-y-auto overscroll-contain p-6 outline-none scrollbar-quiet\">\n {(o: ComboboxOption | CreateItem) => (\n <BaseCombobox.Item key={o.value} value={o} {...(o.disabled ? { disabled: true } : {})} className={MENU_ITEM}>\n {\"__create\" in o ? (\n <>\n <Icon icon={__icon_Add01Icon} size=\"sm\" className={MENU_ICON} />\n <span className=\"min-w-0 flex-1 truncate\">\n {createLabel ? createLabel(o.label) : t(\"combobox.add\", \"Add “{label}”\", { label: o.label })}\n </span>\n </>\n ) : (\n <>\n {o.leading}\n {o.icon && <Icon icon={o.icon} size=\"sm\" className={MENU_ICON} />}\n <span className={cn(\"flex min-w-0 flex-1 flex-col\", o.description && \"gap-2 py-8\")}>\n <span className=\"truncate\">\n <Highlight text={o.label} query={query} />\n </span>\n {o.description && <span className=\"text-small font-regular text-fg-secondary\">{o.description}</span>}\n </span>\n {o.meta && <span className=\"shrink-0 text-small font-regular text-fg-tertiary tabular\">{o.meta}</span>}\n <BaseCombobox.ItemIndicator\n keepMounted\n className=\"flex size-16 shrink-0 items-center justify-center text-fg opacity-0 data-selected:opacity-100\"\n >\n <Icon icon={__icon_Tick02Icon} size=\"sm\" />\n </BaseCombobox.ItemIndicator>\n </>\n )}\n </BaseCombobox.Item>\n )}\n </BaseCombobox.List>\n {hidden > 0 && (\n <div className=\"flex h-28 shrink-0 items-center px-10 text-caption font-medium text-fg-tertiary\">\n {t(\"combobox.more\", \"{count, plural, one {# more; type to narrow it down} other {# more; type to narrow them down}}\", { count: hidden })}\n </div>\n )}\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n </BaseCombobox.Root>\n );\n if (field) return control;\n return withField(\n {\n label,\n description,\n error,\n optional,\n required,\n layout,\n id: fc.wrapId ?? id,\n disabled,\n className,\n },\n control,\n );\n});\nif (process.env.NODE_ENV !== \"production\") Combobox.displayName = \"Combobox\";\n\nexport const KAESO_AUTOCOMPLETE_VARIANTS = { size: KAESO_COMBOBOX_VARIANTS.size } as const;\nexport const KAESO_AUTOCOMPLETE_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface AutocompleteProps extends FieldWrapProps {\n suggestions: string[];\n value?: string | undefined;\n defaultValue?: string | undefined;\n onValueChange?: ((value: string) => void) | undefined;\n placeholder?: string | undefined;\n size?: InputSize | undefined;\n disabled?: boolean | undefined;\n id?: string | undefined;\n name?: string | undefined;\n leadingIcon?: IconData | undefined;\n \"aria-label\"?: string | undefined;\n className?: string | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const Autocomplete = /* @__PURE__ */ forwardRef<HTMLInputElement, AutocompleteProps>(function Autocomplete(props, ref) {\n const {\n suggestions,\n value,\n defaultValue,\n onValueChange,\n placeholder,\n size = \"md\",\n disabled,\n id,\n name,\n leadingIcon,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n \"aria-label\": ariaLabel,\n \"data-force\": force,\n } = props;\n const field = useField();\n const fc = useFieldControl(props);\n const [query, setQuery] = useState(defaultValue ?? \"\");\n const fieldRef = useRef<HTMLDivElement | null>(null);\n const fieldWidth = useLayoutWidth(fieldRef);\n const current = value ?? query;\n const control = (\n <BaseAutocomplete.Root\n items={suggestions}\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n onValueChange={(v: string) => {\n setQuery(v);\n onValueChange?.(v);\n }}\n {...(disabled ? { disabled } : {})}\n {...(name ? { name } : {})}\n >\n <BaseAutocomplete.InputGroup\n ref={fieldRef}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"relative flex w-full min-w-0 items-center rounded-pill material-field transition-control cursor-text\",\n KAESO_AUTOCOMPLETE_VARIANTS.size[size].classes,\n leadingIcon && LEADING[size],\n !(label || description || error) && className,\n )}\n >\n {leadingIcon && <Icon icon={leadingIcon} size=\"sm\" className=\"text-fg-tertiary\" />}\n <BaseAutocomplete.Input\n ref={ref}\n placeholder={placeholder}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n onKeyDown={keepValueOnEscape}\n className=\"min-w-0 flex-1 bg-transparent text-fg outline-none placeholder:text-fg-tertiary disabled:text-fg-disabled\"\n />\n </BaseAutocomplete.InputGroup>\n <BaseAutocomplete.Portal container={usePortalContainer()}>\n <BaseAutocomplete.Positioner\n anchor={fieldRef}\n positionMethod=\"fixed\"\n collisionBoundary={pageBoundary()}\n align=\"start\"\n sideOffset={6}\n collisionPadding={8}\n className=\"z-50 outline-none\"\n >\n <BaseAutocomplete.Popup className={cn(MENU_POPUP, \"min-w-anchor overflow-hidden data-empty:hidden\")} style={anchorWidthStyle(fieldWidth)}>\n <BaseAutocomplete.List className=\"-m-6 flex min-h-0 flex-col overflow-y-auto overscroll-contain p-6 outline-none scrollbar-quiet\">\n {(s: string) => (\n <BaseAutocomplete.Item key={s} value={s} className={MENU_ITEM}>\n <span className=\"truncate\">\n <Highlight text={s} query={current} />\n </span>\n </BaseAutocomplete.Item>\n )}\n </BaseAutocomplete.List>\n </BaseAutocomplete.Popup>\n </BaseAutocomplete.Positioner>\n </BaseAutocomplete.Portal>\n </BaseAutocomplete.Root>\n );\n if (field) return control;\n return withField(\n {\n label,\n description,\n error,\n optional,\n required,\n layout,\n id: fc.wrapId ?? id,\n disabled,\n className,\n },\n control,\n );\n});\nif (process.env.NODE_ENV !== \"production\") Autocomplete.displayName = \"Autocomplete\";\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { a as e, i as t } from "./styles-
|
|
2
|
+
import { a as e, i as t } from "./styles-8fn_bHRP.js";
|
|
3
3
|
import { t as n } from "./cn-BjnOAUrA.js";
|
|
4
4
|
import { i as r } from "./context-BELWW79w.js";
|
|
5
5
|
import { t as i } from "./icon-CBzOwqrX.js";
|
|
6
6
|
import { t as a } from "./option-checkbox-Df7WhGn4.js";
|
|
7
|
-
import { r as o } from "./combobox-
|
|
7
|
+
import { r as o } from "./combobox-DghYPLVQ.js";
|
|
8
8
|
import { createContext as s, forwardRef as c, useCallback as l, useContext as ee, useEffect as te, useId as ne, useLayoutEffect as u, useMemo as d, useRef as f, useState as p, useSyncExternalStore as re } from "react";
|
|
9
9
|
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
10
10
|
import { Search01Icon as ie, Tick02Icon as ae } from "@hugeicons/core-free-icons";
|
|
@@ -453,4 +453,4 @@ process.env.NODE_ENV !== "production" && (T.displayName = "CommandList");
|
|
|
453
453
|
//#endregion
|
|
454
454
|
export { y as a, le as i, ye as n, ue as r, T as t };
|
|
455
455
|
|
|
456
|
-
//# sourceMappingURL=command-list-
|
|
456
|
+
//# sourceMappingURL=command-list-BUmEaaBi.js.map
|