@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.
Files changed (150) hide show
  1. package/NOTICE.md +1 -1
  2. package/ai/component-guides.md +40 -6
  3. package/ai/component-registry.json +67 -5
  4. package/ai/component-registry.md +23 -5
  5. package/ai/icons.md +1 -1
  6. package/ai/tokens.md +1 -1
  7. package/dist/blocks/delete-resource.js +1 -1
  8. package/dist/blocks/pages.js +2 -2
  9. package/dist/blocks/resource-list.js +3 -3
  10. package/dist/chunks/{app-frame-CfJ7s3Q0.js → app-frame-B1FXVFYx.js} +5 -5
  11. package/dist/chunks/{app-frame-CfJ7s3Q0.js.map → app-frame-B1FXVFYx.js.map} +1 -1
  12. package/dist/chunks/{banner-B3DGLTBu.js → banner-BinTH032.js} +2 -2
  13. package/dist/chunks/{banner-B3DGLTBu.js.map → banner-BinTH032.js.map} +1 -1
  14. package/dist/chunks/{button-IblhXUyZ.js → button-DrmFgdIi.js} +2 -2
  15. package/dist/chunks/button-DrmFgdIi.js.map +1 -0
  16. package/dist/chunks/{checkbox-9tbimmF3.js → checkbox-ahl1SOqU.js} +2 -2
  17. package/dist/chunks/{checkbox-9tbimmF3.js.map → checkbox-ahl1SOqU.js.map} +1 -1
  18. package/dist/chunks/{code-block-KIvuE8jg.js → code-block-CE3H3nMu.js} +3 -3
  19. package/dist/chunks/{code-block-KIvuE8jg.js.map → code-block-CE3H3nMu.js.map} +1 -1
  20. package/dist/chunks/{code-block-64e-Cy1S.js → code-block-O_EPmMIQ.js} +2 -2
  21. package/dist/chunks/{code-block-64e-Cy1S.js.map → code-block-O_EPmMIQ.js.map} +1 -1
  22. package/dist/chunks/{combobox-DkcjkWc6.js → combobox-DghYPLVQ.js} +7 -3
  23. package/dist/chunks/combobox-DghYPLVQ.js.map +1 -0
  24. package/dist/chunks/{command-list-CypqsC4T.js → command-list-BUmEaaBi.js} +3 -3
  25. package/dist/chunks/{command-list-CypqsC4T.js.map → command-list-BUmEaaBi.js.map} +1 -1
  26. package/dist/chunks/{copy-button-CwU8t_9_.js → copy-button-DBPAA1g0.js} +2 -2
  27. package/dist/chunks/{copy-button-CwU8t_9_.js.map → copy-button-DBPAA1g0.js.map} +1 -1
  28. package/dist/chunks/{core-B0bULn-t.js → core-Cw3pNRp3.js} +2 -2
  29. package/dist/chunks/{core-B0bULn-t.js.map → core-Cw3pNRp3.js.map} +1 -1
  30. package/dist/chunks/{data-table-z7z6DqMJ.js → data-table-CGecI-FI.js} +6 -6
  31. package/dist/chunks/data-table-CGecI-FI.js.map +1 -0
  32. package/dist/chunks/{date-popup-DAnjptFt.js → date-popup-C6vVOOWF.js} +2 -2
  33. package/dist/chunks/{date-popup-DAnjptFt.js.map → date-popup-C6vVOOWF.js.map} +1 -1
  34. package/dist/chunks/{dialog-2zb6ClNR.js → dialog-s3_LUPBi.js} +4 -4
  35. package/dist/chunks/{dialog-2zb6ClNR.js.map → dialog-s3_LUPBi.js.map} +1 -1
  36. package/dist/chunks/{disclosure-BtYRTDO3.js → disclosure-3CIz2WZa.js} +2 -2
  37. package/dist/chunks/disclosure-3CIz2WZa.js.map +1 -0
  38. package/dist/chunks/{domain-BsM9UmAg.js → domain-CrQX3p6E.js} +2 -2
  39. package/dist/chunks/{domain-BsM9UmAg.js.map → domain-CrQX3p6E.js.map} +1 -1
  40. package/dist/chunks/{icon-button-Dfwpvmav.js → icon-button-6kOn2zrP.js} +2 -2
  41. package/dist/chunks/{icon-button-Dfwpvmav.js.map → icon-button-6kOn2zrP.js.map} +1 -1
  42. package/dist/chunks/identity-BwYixi8Q.js +520 -0
  43. package/dist/chunks/identity-BwYixi8Q.js.map +1 -0
  44. package/dist/chunks/{input-Bo5-UZg2.js → input-D1SeLe3X.js} +2 -2
  45. package/dist/chunks/{input-Bo5-UZg2.js.map → input-D1SeLe3X.js.map} +1 -1
  46. package/dist/chunks/{input-group-jPcK9T_a.js → input-group-BbxwEAUP.js} +2 -2
  47. package/dist/chunks/{input-group-jPcK9T_a.js.map → input-group-BbxwEAUP.js.map} +1 -1
  48. package/dist/chunks/{iso-field-DoqHBg8n.js → iso-field-BVOKAY4H.js} +2 -2
  49. package/dist/chunks/{iso-field-DoqHBg8n.js.map → iso-field-BVOKAY4H.js.map} +1 -1
  50. package/dist/chunks/{list-CU_AoVY3.js → list-o8wcuBOz.js} +3 -3
  51. package/dist/chunks/{list-CU_AoVY3.js.map → list-o8wcuBOz.js.map} +1 -1
  52. package/dist/chunks/{markdown-C565aBR7.js → markdown-BZKZi9d8.js} +4 -4
  53. package/dist/chunks/{markdown-C565aBR7.js.map → markdown-BZKZi9d8.js.map} +1 -1
  54. package/dist/chunks/{menu-Clvv6ftq.js → menu-BDce2kiw.js} +2 -2
  55. package/dist/chunks/{menu-Clvv6ftq.js.map → menu-BDce2kiw.js.map} +1 -1
  56. package/dist/chunks/{nav-sheet-Dt6JSvzX.js → nav-sheet-S7tagFJT.js} +3 -3
  57. package/dist/chunks/{nav-sheet-Dt6JSvzX.js.map → nav-sheet-S7tagFJT.js.map} +1 -1
  58. package/dist/chunks/{page-header-BQijP6Rp.js → page-header-DUaKLpK3.js} +2 -2
  59. package/dist/chunks/{page-header-BQijP6Rp.js.map → page-header-DUaKLpK3.js.map} +1 -1
  60. package/dist/chunks/{pagination-D7fAm8qg.js → pagination-D9hM6W2z.js} +3 -3
  61. package/dist/chunks/{pagination-D7fAm8qg.js.map → pagination-D9hM6W2z.js.map} +1 -1
  62. package/dist/chunks/{picker-popover-1FHb1LQG.js → picker-popover-PzVOo62-.js} +4 -4
  63. package/dist/chunks/{picker-popover-1FHb1LQG.js.map → picker-popover-PzVOo62-.js.map} +1 -1
  64. package/dist/chunks/{range-popup-lGiZsG3s.js → range-popup-Dt6Q0Ryw.js} +3 -3
  65. package/dist/chunks/{range-popup-lGiZsG3s.js.map → range-popup-Dt6Q0Ryw.js.map} +1 -1
  66. package/dist/chunks/{rights-B68ocZuq.js → rights-DAHTG_kH.js} +4 -4
  67. package/dist/chunks/{rights-B68ocZuq.js.map → rights-DAHTG_kH.js.map} +1 -1
  68. package/dist/chunks/{select-BqjmQOqx.js → select-UTdHKubp.js} +2 -2
  69. package/dist/chunks/{select-BqjmQOqx.js.map → select-UTdHKubp.js.map} +1 -1
  70. package/dist/chunks/{sidebar-Dq7oGOje.js → sidebar-BO1mnjVH.js} +3 -3
  71. package/dist/chunks/{sidebar-Dq7oGOje.js.map → sidebar-BO1mnjVH.js.map} +1 -1
  72. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js → sidebar-menu-C0qJsQF5.js} +2 -2
  73. package/dist/chunks/{sidebar-menu-QSSNu1jJ.js.map → sidebar-menu-C0qJsQF5.js.map} +1 -1
  74. package/dist/chunks/styles-8fn_bHRP.js +21 -0
  75. package/dist/chunks/styles-8fn_bHRP.js.map +1 -0
  76. package/dist/chunks/{textarea-CO0HP6fK.js → textarea-CRmvC4jd.js} +3 -3
  77. package/dist/chunks/{textarea-CO0HP6fK.js.map → textarea-CRmvC4jd.js.map} +1 -1
  78. package/dist/chunks/{timeseries-nDviPxvQ.js → timeseries-CK86u7M0.js} +3 -3
  79. package/dist/chunks/{timeseries-nDviPxvQ.js.map → timeseries-CK86u7M0.js.map} +1 -1
  80. package/dist/components/app-frame.js +2 -2
  81. package/dist/components/banner.js +1 -1
  82. package/dist/components/button-group.js +1 -1
  83. package/dist/components/button.js +1 -1
  84. package/dist/components/charts/bar.js +2 -2
  85. package/dist/components/charts/donut.js +1 -1
  86. package/dist/components/charts/gauge.js +1 -1
  87. package/dist/components/charts/heatmap.js +1 -1
  88. package/dist/components/charts/sankey.js +2 -2
  89. package/dist/components/charts/timeseries.js +1 -1
  90. package/dist/components/charts.js +2 -2
  91. package/dist/components/checkbox.js +1 -1
  92. package/dist/components/code-block.js +2 -2
  93. package/dist/components/collapsible.js +29 -30
  94. package/dist/components/collapsible.js.map +1 -1
  95. package/dist/components/combobox.js +1 -1
  96. package/dist/components/command-list.js +2 -2
  97. package/dist/components/command-palette.js +1 -1
  98. package/dist/components/copy-button.js +1 -1
  99. package/dist/components/data-table.js +1 -1
  100. package/dist/components/date-picker.js +2 -2
  101. package/dist/components/dialog.js +2 -2
  102. package/dist/components/display-options.js +2 -2
  103. package/dist/components/filter-chip.js +3 -3
  104. package/dist/components/filter-toggle.js +35 -0
  105. package/dist/components/filter-toggle.js.map +1 -0
  106. package/dist/components/icon-button.js +1 -1
  107. package/dist/components/input.js +3 -3
  108. package/dist/components/kaeso/conversation.js +2 -2
  109. package/dist/components/kaeso/identity.js +1 -1
  110. package/dist/components/kaeso/moments.js +3 -3
  111. package/dist/components/kaeso/rights.js +1 -1
  112. package/dist/components/kaeso/usage.js +1 -1
  113. package/dist/components/kaeso.js +9 -14
  114. package/dist/components/kaeso.js.map +1 -1
  115. package/dist/components/key-value.js +1 -1
  116. package/dist/components/list.js +1 -1
  117. package/dist/components/markdown.js +1 -1
  118. package/dist/components/menu.js +2 -2
  119. package/dist/components/page-header.js +1 -1
  120. package/dist/components/pagination.js +1 -1
  121. package/dist/components/playground.js +9 -9
  122. package/dist/components/select.js +1 -1
  123. package/dist/components/sheet.js +1 -1
  124. package/dist/components/sidebar.js +1 -1
  125. package/dist/components/tabs.js +4 -4
  126. package/dist/components/tabs.js.map +1 -1
  127. package/dist/components/theme-menu.js +2 -2
  128. package/dist/components/theme-select.js +1 -1
  129. package/dist/index.js +68 -67
  130. package/dist/kaeso.css +11 -12
  131. package/dist/styles.css +1 -1
  132. package/dist/types/components/combobox/combobox.d.ts +2 -0
  133. package/dist/types/components/filter-toggle/docs.d.ts +11 -0
  134. package/dist/types/components/filter-toggle/filter-toggle.d.ts +23 -0
  135. package/dist/types/components/filter-toggle/index.d.ts +1 -0
  136. package/dist/types/components/kaeso/docs.d.ts +1 -0
  137. package/dist/types/components/kaeso/identity.d.ts +1 -0
  138. package/dist/types/components/kaeso/provider-marks.d.ts +27 -2
  139. package/dist/types/components/menu/styles.d.ts +1 -1
  140. package/dist/types/components/tabs/tabs.d.ts +2 -2
  141. package/dist/types/index.d.ts +1 -0
  142. package/package.json +5 -5
  143. package/dist/chunks/button-IblhXUyZ.js.map +0 -1
  144. package/dist/chunks/combobox-DkcjkWc6.js.map +0 -1
  145. package/dist/chunks/data-table-z7z6DqMJ.js.map +0 -1
  146. package/dist/chunks/disclosure-BtYRTDO3.js.map +0 -1
  147. package/dist/chunks/identity-BQoh-UpW.js +0 -365
  148. package/dist/chunks/identity-BQoh-UpW.js.map +0 -1
  149. package/dist/chunks/styles-hkFkoBbi.js +0 -21
  150. package/dist/chunks/styles-hkFkoBbi.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"input-Bo5-UZg2.js","names":["__icon_Search01Icon","__icon_Cancel01Icon","warnStylingClassName","useUiText","Icon","KbdSequence","useField","useFieldControl","withField","InputGroup","INPUT_ICON_SIZE","KAESO_INPUT_VARIANTS","KAESO_INPUT_DEFAULT_VARIANTS","Input","force","rest","props","className","field","fc","inner","InputGroupFromField","invalid","error","label","description","align","id","leadingIcon","trailing","size","prefix","children","suffix","KAESO_SEARCH_INPUT_VARIANTS","KAESO_SEARCH_INPUT_DEFAULT_VARIANTS","SearchInput","t","setInner","useState","defaultValue","controlled","value","current","input","useRef","clear","el","onClear","ref","Search01Icon","placeholder","onChange","onKeyDown","Cancel01Icon","shortcut"],"sources":["../../src/components/input/input.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, type InputHTMLAttributes, type KeyboardEvent, type ReactNode } from \"react\";\nimport { warnStylingClassName } from \"../../utils/dev.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, INPUT_ICON_SIZE, type InputSize } from \"./input-group.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { Search01Icon as __icon_Search01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_INPUT_VARIANTS = {\n size: {\n sm: { classes: \"h-32\" },\n md: { classes: \"h-36\" },\n lg: { classes: \"h-40\" },\n xl: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"prefix\">, FieldWrapProps {\n size?: InputSize | undefined;\n leadingIcon?: IconData | undefined;\n prefix?: ReactNode | undefined;\n suffix?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n invalid?: boolean | undefined;\n align?: \"start\" | \"end\" | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputProps>(function Input(props, ref) {\n const {\n size = \"md\",\n leadingIcon,\n prefix,\n suffix,\n trailing,\n invalid,\n align,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n disabled,\n readOnly,\n id,\n \"data-force\": force,\n ...rest\n } = props;\n warnStylingClassName(\"Input\", className);\n const field = useField();\n const fc = useFieldControl(props);\n const inner = (\n <InputGroupFromField\n size={size}\n leadingIcon={leadingIcon}\n prefix={prefix}\n suffix={suffix}\n trailing={trailing}\n invalid={invalid || !!error}\n disabled={disabled}\n readOnly={readOnly}\n force={force}\n className={label || description || error ? undefined : className}\n >\n <InputGroup.Input\n ref={ref}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n className={align === \"end\" ? \"text-end tabular\" : undefined}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(invalid || error ? { \"aria-invalid\": true } : {})}\n {...rest}\n />\n </InputGroupFromField>\n );\n if (field) return inner;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, inner);\n});\nif (process.env.NODE_ENV !== \"production\") Input.displayName = \"Input\";\n\nfunction InputGroupFromField({\n size,\n leadingIcon,\n prefix,\n suffix,\n trailing,\n invalid,\n disabled,\n readOnly,\n force,\n className,\n children,\n}: {\n size: InputSize;\n leadingIcon?: IconData | undefined;\n prefix?: ReactNode | undefined;\n suffix?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n invalid?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n force?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <InputGroup\n size={size}\n leadingIcon={!!leadingIcon}\n trailingButton={!!trailing}\n invalid={invalid}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n {...(force ? { \"data-force\": force } : {})}\n >\n {leadingIcon && <Icon icon={leadingIcon} size={INPUT_ICON_SIZE[size]} className=\"text-fg-tertiary\" />}\n {prefix && <InputGroup.Addon data-join>{prefix}</InputGroup.Addon>}\n {children}\n {suffix && <InputGroup.Addon>{suffix}</InputGroup.Addon>}\n {trailing}\n </InputGroup>\n );\n}\n\nexport const KAESO_SEARCH_INPUT_VARIANTS = {\n size: {\n sm: { classes: KAESO_INPUT_VARIANTS.size.sm.classes },\n md: { classes: KAESO_INPUT_VARIANTS.size.md.classes },\n lg: { classes: KAESO_INPUT_VARIANTS.size.lg.classes },\n xl: { classes: KAESO_INPUT_VARIANTS.size.xl.classes },\n },\n} as const;\nexport const KAESO_SEARCH_INPUT_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface SearchInputProps extends Omit<InputProps, \"leadingIcon\" | \"type\" | \"prefix\" | \"suffix\"> {\n shortcut?: string[] | undefined;\n onClear?: (() => void) | undefined;\n placeholder?: string | undefined;\n}\n\nexport const SearchInput = /* @__PURE__ */ forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n { shortcut, onClear, value, defaultValue, onChange, onKeyDown, placeholder, size = \"sm\", ...props },\n ref,\n) {\n const t = useUiText();\n const [inner, setInner] = useState(String(defaultValue ?? \"\"));\n const controlled = value !== undefined;\n const current = controlled ? String(value) : inner;\n const input = useRef<HTMLInputElement | null>(null);\n const clear = () => {\n const el = input.current;\n if (!controlled) setInner(\"\");\n else if (el && !onClear) {\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \"value\")?.set?.call(el, \"\");\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n }\n onClear?.();\n el?.focus();\n };\n return (\n <Input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n type=\"search\"\n size={size}\n leadingIcon={__icon_Search01Icon}\n placeholder={placeholder ?? t(\"searchInput.placeholder\", \"Search\")}\n autoComplete=\"off\"\n spellCheck={false}\n value={current}\n onChange={(e) => {\n if (!controlled) setInner(e.target.value);\n onChange?.(e);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\" && current) {\n e.stopPropagation();\n clear();\n }\n onKeyDown?.(e);\n }}\n trailing={\n current && !props.readOnly && !props.disabled ? (\n <InputGroup.Button icon={__icon_Cancel01Icon} aria-label={t(\"searchInput.clear\", \"Clear search\")} onClick={clear} />\n ) : undefined\n }\n suffix={\n !current && shortcut ? (\n <KbdSequence keys={shortcut} className={props[\"data-force\"]?.includes(\"focus\") ? \"invisible\" : \"group-focus-within/field:invisible\"} />\n ) : undefined\n }\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") SearchInput.displayName = \"SearchInput\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"input-D1SeLe3X.js","names":["__icon_Search01Icon","__icon_Cancel01Icon","warnStylingClassName","useUiText","Icon","KbdSequence","useField","useFieldControl","withField","InputGroup","INPUT_ICON_SIZE","KAESO_INPUT_VARIANTS","KAESO_INPUT_DEFAULT_VARIANTS","Input","force","rest","props","className","field","fc","inner","InputGroupFromField","invalid","error","label","description","align","id","leadingIcon","trailing","size","prefix","children","suffix","KAESO_SEARCH_INPUT_VARIANTS","KAESO_SEARCH_INPUT_DEFAULT_VARIANTS","SearchInput","t","setInner","useState","defaultValue","controlled","value","current","input","useRef","clear","el","onClear","ref","Search01Icon","placeholder","onChange","onKeyDown","Cancel01Icon","shortcut"],"sources":["../../src/components/input/input.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, type InputHTMLAttributes, type KeyboardEvent, type ReactNode } from \"react\";\nimport { warnStylingClassName } from \"../../utils/dev.js\";\nimport { useField, useFieldControl, withField, type FieldWrapProps } from \"../field/field.js\";\nimport { InputGroup, INPUT_ICON_SIZE, type InputSize } from \"./input-group.js\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { KbdSequence } from \"../kbd/kbd.js\";\nimport { Search01Icon as __icon_Search01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_INPUT_VARIANTS = {\n size: {\n sm: { classes: \"h-32\" },\n md: { classes: \"h-36\" },\n lg: { classes: \"h-40\" },\n xl: { classes: \"h-48\" },\n },\n} as const;\nexport const KAESO_INPUT_DEFAULT_VARIANTS = { size: \"md\" } as const;\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"prefix\">, FieldWrapProps {\n size?: InputSize | undefined;\n leadingIcon?: IconData | undefined;\n prefix?: ReactNode | undefined;\n suffix?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n invalid?: boolean | undefined;\n align?: \"start\" | \"end\" | undefined;\n \"data-force\"?: string | undefined;\n className?: string | undefined;\n}\n\nexport const Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputProps>(function Input(props, ref) {\n const {\n size = \"md\",\n leadingIcon,\n prefix,\n suffix,\n trailing,\n invalid,\n align,\n label,\n description,\n error,\n optional,\n required,\n layout,\n className,\n disabled,\n readOnly,\n id,\n \"data-force\": force,\n ...rest\n } = props;\n warnStylingClassName(\"Input\", className);\n const field = useField();\n const fc = useFieldControl(props);\n const inner = (\n <InputGroupFromField\n size={size}\n leadingIcon={leadingIcon}\n prefix={prefix}\n suffix={suffix}\n trailing={trailing}\n invalid={invalid || !!error}\n disabled={disabled}\n readOnly={readOnly}\n force={force}\n className={label || description || error ? undefined : className}\n >\n <InputGroup.Input\n ref={ref}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n className={align === \"end\" ? \"text-end tabular\" : undefined}\n {...(id ? { id } : {})}\n {...fc.controlProps}\n {...(invalid || error ? { \"aria-invalid\": true } : {})}\n {...rest}\n />\n </InputGroupFromField>\n );\n if (field) return inner;\n return withField({ label, description, error, optional, required, layout, id: fc.wrapId ?? id, disabled, className }, inner);\n});\nif (process.env.NODE_ENV !== \"production\") Input.displayName = \"Input\";\n\nfunction InputGroupFromField({\n size,\n leadingIcon,\n prefix,\n suffix,\n trailing,\n invalid,\n disabled,\n readOnly,\n force,\n className,\n children,\n}: {\n size: InputSize;\n leadingIcon?: IconData | undefined;\n prefix?: ReactNode | undefined;\n suffix?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n invalid?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n force?: string | undefined;\n className?: string | undefined;\n children: ReactNode;\n}) {\n return (\n <InputGroup\n size={size}\n leadingIcon={!!leadingIcon}\n trailingButton={!!trailing}\n invalid={invalid}\n disabled={disabled}\n readOnly={readOnly}\n className={className}\n {...(force ? { \"data-force\": force } : {})}\n >\n {leadingIcon && <Icon icon={leadingIcon} size={INPUT_ICON_SIZE[size]} className=\"text-fg-tertiary\" />}\n {prefix && <InputGroup.Addon data-join>{prefix}</InputGroup.Addon>}\n {children}\n {suffix && <InputGroup.Addon>{suffix}</InputGroup.Addon>}\n {trailing}\n </InputGroup>\n );\n}\n\nexport const KAESO_SEARCH_INPUT_VARIANTS = {\n size: {\n sm: { classes: KAESO_INPUT_VARIANTS.size.sm.classes },\n md: { classes: KAESO_INPUT_VARIANTS.size.md.classes },\n lg: { classes: KAESO_INPUT_VARIANTS.size.lg.classes },\n xl: { classes: KAESO_INPUT_VARIANTS.size.xl.classes },\n },\n} as const;\nexport const KAESO_SEARCH_INPUT_DEFAULT_VARIANTS = { size: \"sm\" } as const;\n\nexport interface SearchInputProps extends Omit<InputProps, \"leadingIcon\" | \"type\" | \"prefix\" | \"suffix\"> {\n shortcut?: string[] | undefined;\n onClear?: (() => void) | undefined;\n placeholder?: string | undefined;\n}\n\nexport const SearchInput = /* @__PURE__ */ forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n { shortcut, onClear, value, defaultValue, onChange, onKeyDown, placeholder, size = \"sm\", ...props },\n ref,\n) {\n const t = useUiText();\n const [inner, setInner] = useState(String(defaultValue ?? \"\"));\n const controlled = value !== undefined;\n const current = controlled ? String(value) : inner;\n const input = useRef<HTMLInputElement | null>(null);\n const clear = () => {\n const el = input.current;\n if (!controlled) setInner(\"\");\n else if (el && !onClear) {\n Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, \"value\")?.set?.call(el, \"\");\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n }\n onClear?.();\n el?.focus();\n };\n return (\n <Input\n ref={(el) => {\n input.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n }}\n type=\"search\"\n size={size}\n leadingIcon={__icon_Search01Icon}\n placeholder={placeholder ?? t(\"searchInput.placeholder\", \"Search\")}\n autoComplete=\"off\"\n spellCheck={false}\n value={current}\n onChange={(e) => {\n if (!controlled) setInner(e.target.value);\n onChange?.(e);\n }}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\" && current) {\n e.stopPropagation();\n clear();\n }\n onKeyDown?.(e);\n }}\n trailing={\n current && !props.readOnly && !props.disabled ? (\n <InputGroup.Button icon={__icon_Cancel01Icon} aria-label={t(\"searchInput.clear\", \"Clear search\")} onClick={clear} />\n ) : undefined\n }\n suffix={\n !current && shortcut ? (\n <KbdSequence keys={shortcut} className={props[\"data-force\"]?.includes(\"focus\") ? \"invisible\" : \"group-focus-within/field:invisible\"} />\n ) : undefined\n }\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") SearchInput.displayName = \"SearchInput\";\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { t as e } from "./cn-BjnOAUrA.js";
3
3
  import { t } from "./icon-CBzOwqrX.js";
4
- import { n } from "./button-IblhXUyZ.js";
4
+ import { n } from "./button-DrmFgdIi.js";
5
5
  import { createContext as r, forwardRef as i, useContext as a } from "react";
6
6
  import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
7
  //#region src/utils/field-press.ts
@@ -103,4 +103,4 @@ var b = /* @__PURE__ */ Object.assign(g, {
103
103
  //#endregion
104
104
  export { d as a, l as i, b as n, x as o, u as r, p as t };
105
105
 
106
- //# sourceMappingURL=input-group-jPcK9T_a.js.map
106
+ //# sourceMappingURL=input-group-BbxwEAUP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"input-group-jPcK9T_a.js","names":["cn","focusInputOnPress","input","KAESO_INPUT_GROUP_VARIANTS","KAESO_INPUT_GROUP_DEFAULT_VARIANTS","LEADING","TRAILING_BUTTON","INPUT_ICON_SIZE","PREFIX_JOIN","Ctx","Root","props","size","leadingIcon","trailingButton","disabled","className","invalid","readOnly","Input","useContext","Addon","join","icon","Icon","children","GroupButton","Button","InputGroup","useInputGroupSize"],"sources":["../../src/utils/field-press.ts","../../src/components/input/input-group.tsx"],"sourcesContent":["import type { MouseEvent } from \"react\";\n\nexport function focusInputOnPress(e: MouseEvent<HTMLElement>) {\n if (e.target !== e.currentTarget) return;\n const input = e.currentTarget.querySelector(\"input:not([type=hidden])\") as HTMLInputElement | null;\n if (!input || input.disabled) return;\n e.preventDefault();\n input.focus();\n}\n","import type * as React from \"react\";\nimport { createContext, forwardRef, useContext, type HTMLAttributes, type InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { focusInputOnPress } from \"../../utils/field-press.js\";\nimport { Icon, type IconData, type IconSize } from \"../icon/icon.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_INPUT_GROUP_VARIANTS = {\n size: {\n sm: { classes: \"h-32 px-12 gap-6 text-body\" },\n md: { classes: \"h-36 px-16 gap-8 text-body\" },\n lg: { classes: \"h-40 px-18 gap-8 text-body\" },\n xl: { classes: \"h-48 px-22 gap-8 text-body-lg\" },\n },\n} as const;\nexport const KAESO_INPUT_GROUP_DEFAULT_VARIANTS = { size: \"md\" } as const;\nexport type InputSize = keyof typeof KAESO_INPUT_GROUP_VARIANTS.size;\n\nexport const LEADING: Record<InputSize, string> = { sm: \"pl-10\", md: \"pl-14\", lg: \"pl-16\", xl: \"pl-20\" };\nconst TRAILING_BUTTON: Record<InputSize, string> = { sm: \"pr-4\", md: \"pr-2\", lg: \"pr-4\", xl: \"pr-6\" };\nexport const INPUT_ICON_SIZE: Record<InputSize, IconSize> = { sm: \"sm\", md: \"sm\", lg: \"md\", xl: \"lg\" };\n\nconst PREFIX_JOIN: Record<InputSize, string> = { sm: \"-me-6\", md: \"-me-8\", lg: \"-me-8\", xl: \"-me-8\" };\n\nconst Ctx = /* @__PURE__ */ createContext<{ size: InputSize; invalid?: boolean | undefined; disabled?: boolean | undefined }>({ size: \"md\" });\n\nexport interface InputGroupProps extends HTMLAttributes<HTMLDivElement> {\n size?: InputSize | undefined;\n leadingIcon?: boolean | undefined;\n trailingButton?: boolean | undefined;\n invalid?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, InputGroupProps>(function InputGroup(\n { size = \"md\", leadingIcon, trailingButton, invalid, disabled, readOnly, className, children, ...props },\n ref,\n) {\n return (\n <Ctx.Provider value={{ size, invalid, disabled }}>\n <div\n ref={ref}\n className={cn(\n \"group/field relative flex w-full min-w-0 items-center rounded-pill material-field transition-control cursor-text\",\n KAESO_INPUT_GROUP_VARIANTS.size[size].classes,\n leadingIcon && LEADING[size],\n trailingButton && TRAILING_BUTTON[size],\n disabled && \"cursor-not-allowed\",\n className,\n )}\n {...(invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(readOnly ? { \"data-readonly\": \"\" } : {})}\n onMouseDown={focusInputOnPress}\n {...props}\n >\n {children}\n </div>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"InputGroup\";\n\nexport interface InputGroupInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {}\n\nconst Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputGroupInputProps>(function InputGroupInput({ className, ...props }, ref) {\n const { invalid, disabled } = useContext(Ctx);\n return (\n <input\n ref={ref}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(disabled ? { disabled: true } : {})}\n className={cn(\n \"min-w-0 flex-1 bg-transparent bidi-plaintext text-inherit text-fg outline-none placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled read-only:cursor-text data-mono:mono data-mono:text-small\",\n className,\n )}\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") Input.displayName = \"InputGroup.Input\";\n\nexport interface InputGroupAddonProps extends HTMLAttributes<HTMLSpanElement> {\n icon?: IconData | undefined;\n \"data-join\"?: boolean | undefined;\n}\n\nconst Addon = /* @__PURE__ */ forwardRef<HTMLSpanElement, InputGroupAddonProps>(function InputGroupAddon({ icon, className, children, \"data-join\": join, ...props }, ref) {\n const { size } = useContext(Ctx);\n return (\n <span\n ref={ref}\n className={cn(\"inline-flex shrink-0 items-center gap-4 bidi-plaintext text-fg-secondary select-none\", join && PREFIX_JOIN[size], className)}\n {...props}\n >\n {icon && <Icon icon={icon} size={INPUT_ICON_SIZE[size]} />}\n {children}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Addon.displayName = \"InputGroup.Addon\";\n\nexport interface InputGroupButtonProps {\n icon: IconData;\n \"aria-label\": string;\n onClick?: (() => void) | undefined;\n disabled?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst GroupButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, InputGroupButtonProps>(function InputGroupButton({ icon, className, ...props }, ref) {\n const { size, disabled } = useContext(Ctx);\n return (\n <Button\n {...(disabled ? { disabled: true } : {})}\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n variant=\"quiet\"\n size={size === \"xl\" ? \"md\" : size === \"lg\" ? \"sm\" : size === \"md\" ? \"sm\" : \"xs\"}\n icon={icon}\n className={className}\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupButton.displayName = \"InputGroup.Button\";\n\nexport const InputGroup = /* @__PURE__ */ Object.assign(Root, { Input, Addon, Button: GroupButton });\nexport const useInputGroupSize = () => useContext(Ctx).size;\n"],"mappings":"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"}
1
+ {"version":3,"file":"input-group-BbxwEAUP.js","names":["cn","focusInputOnPress","input","KAESO_INPUT_GROUP_VARIANTS","KAESO_INPUT_GROUP_DEFAULT_VARIANTS","LEADING","TRAILING_BUTTON","INPUT_ICON_SIZE","PREFIX_JOIN","Ctx","Root","props","size","leadingIcon","trailingButton","disabled","className","invalid","readOnly","Input","useContext","Addon","join","icon","Icon","children","GroupButton","Button","InputGroup","useInputGroupSize"],"sources":["../../src/utils/field-press.ts","../../src/components/input/input-group.tsx"],"sourcesContent":["import type { MouseEvent } from \"react\";\n\nexport function focusInputOnPress(e: MouseEvent<HTMLElement>) {\n if (e.target !== e.currentTarget) return;\n const input = e.currentTarget.querySelector(\"input:not([type=hidden])\") as HTMLInputElement | null;\n if (!input || input.disabled) return;\n e.preventDefault();\n input.focus();\n}\n","import type * as React from \"react\";\nimport { createContext, forwardRef, useContext, type HTMLAttributes, type InputHTMLAttributes } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { focusInputOnPress } from \"../../utils/field-press.js\";\nimport { Icon, type IconData, type IconSize } from \"../icon/icon.js\";\nimport { Button } from \"../button/button.js\";\n\nexport const KAESO_INPUT_GROUP_VARIANTS = {\n size: {\n sm: { classes: \"h-32 px-12 gap-6 text-body\" },\n md: { classes: \"h-36 px-16 gap-8 text-body\" },\n lg: { classes: \"h-40 px-18 gap-8 text-body\" },\n xl: { classes: \"h-48 px-22 gap-8 text-body-lg\" },\n },\n} as const;\nexport const KAESO_INPUT_GROUP_DEFAULT_VARIANTS = { size: \"md\" } as const;\nexport type InputSize = keyof typeof KAESO_INPUT_GROUP_VARIANTS.size;\n\nexport const LEADING: Record<InputSize, string> = { sm: \"pl-10\", md: \"pl-14\", lg: \"pl-16\", xl: \"pl-20\" };\nconst TRAILING_BUTTON: Record<InputSize, string> = { sm: \"pr-4\", md: \"pr-2\", lg: \"pr-4\", xl: \"pr-6\" };\nexport const INPUT_ICON_SIZE: Record<InputSize, IconSize> = { sm: \"sm\", md: \"sm\", lg: \"md\", xl: \"lg\" };\n\nconst PREFIX_JOIN: Record<InputSize, string> = { sm: \"-me-6\", md: \"-me-8\", lg: \"-me-8\", xl: \"-me-8\" };\n\nconst Ctx = /* @__PURE__ */ createContext<{ size: InputSize; invalid?: boolean | undefined; disabled?: boolean | undefined }>({ size: \"md\" });\n\nexport interface InputGroupProps extends HTMLAttributes<HTMLDivElement> {\n size?: InputSize | undefined;\n leadingIcon?: boolean | undefined;\n trailingButton?: boolean | undefined;\n invalid?: boolean | undefined;\n disabled?: boolean | undefined;\n readOnly?: boolean | undefined;\n \"data-force\"?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, InputGroupProps>(function InputGroup(\n { size = \"md\", leadingIcon, trailingButton, invalid, disabled, readOnly, className, children, ...props },\n ref,\n) {\n return (\n <Ctx.Provider value={{ size, invalid, disabled }}>\n <div\n ref={ref}\n className={cn(\n \"group/field relative flex w-full min-w-0 items-center rounded-pill material-field transition-control cursor-text\",\n KAESO_INPUT_GROUP_VARIANTS.size[size].classes,\n leadingIcon && LEADING[size],\n trailingButton && TRAILING_BUTTON[size],\n disabled && \"cursor-not-allowed\",\n className,\n )}\n {...(invalid ? { \"data-invalid\": \"\" } : {})}\n {...(disabled ? { \"data-disabled\": \"\" } : {})}\n {...(readOnly ? { \"data-readonly\": \"\" } : {})}\n onMouseDown={focusInputOnPress}\n {...props}\n >\n {children}\n </div>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"InputGroup\";\n\nexport interface InputGroupInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {}\n\nconst Input = /* @__PURE__ */ forwardRef<HTMLInputElement, InputGroupInputProps>(function InputGroupInput({ className, ...props }, ref) {\n const { invalid, disabled } = useContext(Ctx);\n return (\n <input\n ref={ref}\n {...(invalid ? { \"aria-invalid\": true } : {})}\n {...(disabled ? { disabled: true } : {})}\n className={cn(\n \"min-w-0 flex-1 bg-transparent bidi-plaintext text-inherit text-fg outline-none placeholder:text-fg-tertiary disabled:cursor-not-allowed disabled:text-fg-disabled read-only:cursor-text data-mono:mono data-mono:text-small\",\n className,\n )}\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") Input.displayName = \"InputGroup.Input\";\n\nexport interface InputGroupAddonProps extends HTMLAttributes<HTMLSpanElement> {\n icon?: IconData | undefined;\n \"data-join\"?: boolean | undefined;\n}\n\nconst Addon = /* @__PURE__ */ forwardRef<HTMLSpanElement, InputGroupAddonProps>(function InputGroupAddon({ icon, className, children, \"data-join\": join, ...props }, ref) {\n const { size } = useContext(Ctx);\n return (\n <span\n ref={ref}\n className={cn(\"inline-flex shrink-0 items-center gap-4 bidi-plaintext text-fg-secondary select-none\", join && PREFIX_JOIN[size], className)}\n {...props}\n >\n {icon && <Icon icon={icon} size={INPUT_ICON_SIZE[size]} />}\n {children}\n </span>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Addon.displayName = \"InputGroup.Addon\";\n\nexport interface InputGroupButtonProps {\n icon: IconData;\n \"aria-label\": string;\n onClick?: (() => void) | undefined;\n disabled?: boolean | undefined;\n className?: string | undefined;\n}\n\nconst GroupButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, InputGroupButtonProps>(function InputGroupButton({ icon, className, ...props }, ref) {\n const { size, disabled } = useContext(Ctx);\n return (\n <Button\n {...(disabled ? { disabled: true } : {})}\n ref={ref as React.Ref<HTMLButtonElement & HTMLAnchorElement>}\n shape=\"circle\"\n variant=\"quiet\"\n size={size === \"xl\" ? \"md\" : size === \"lg\" ? \"sm\" : size === \"md\" ? \"sm\" : \"xs\"}\n icon={icon}\n className={className}\n {...props}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupButton.displayName = \"InputGroup.Button\";\n\nexport const InputGroup = /* @__PURE__ */ Object.assign(Root, { Input, Addon, Button: GroupButton });\nexport const useInputGroupSize = () => useContext(Ctx).size;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { i as e } from "./context-BELWW79w.js";
3
3
  import { formatISODate as t, parseISODate as n } from "../format.js";
4
- import { n as r } from "./input-group-jPcK9T_a.js";
4
+ import { n as r } from "./input-group-BbxwEAUP.js";
5
5
  import { useState as i } from "react";
6
6
  import { jsx as a } from "react/jsx-runtime";
7
7
  //#region src/components/date-picker/iso-field.tsx
@@ -49,4 +49,4 @@ function c(e, t) {
49
49
  //#endregion
50
50
  export { o as n, c as r, s as t };
51
51
 
52
- //# sourceMappingURL=iso-field-DoqHBg8n.js.map
52
+ //# sourceMappingURL=iso-field-BVOKAY4H.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"iso-field-DoqHBg8n.js","names":["useUiText","InputGroup","IsoField","t","text","setText","useState","value","formatISODate","shown","setShown","commit","typed","onProblem","d","parseISODate","onCommit","label","invalid","errorId","ISO_PROBLEM","isoProblemText","problem"],"sources":["../../src/components/date-picker/iso-field.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { InputGroup } from \"../input/input-group.js\";\nimport { formatISODate, parseISODate } from \"../../format/index.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport type IsoProblem = \"format\" | \"unavailable\" | \"missing\" | null;\n\nexport function IsoField({\n label,\n value,\n onCommit,\n onProblem,\n errorId,\n invalid,\n}: {\n label: string;\n value: Date | undefined;\n onCommit: (d: Date) => boolean | void;\n onProblem: (problem: IsoProblem) => void;\n errorId: string;\n invalid: boolean;\n}) {\n const t = useUiText();\n const [text, setText] = useState(value ? formatISODate(value) : \"\");\n const [shown, setShown] = useState(value);\n if (value !== shown) {\n setShown(value);\n setText(value ? formatISODate(value) : \"\");\n }\n const commit = () => {\n const typed = text.trim();\n if (!typed) {\n setText(value ? formatISODate(value) : \"\");\n onProblem(null);\n return;\n }\n const d = parseISODate(typed);\n if (!d) return onProblem(\"format\");\n if (value && formatISODate(d) === formatISODate(value)) {\n setText(formatISODate(value));\n return onProblem(null);\n }\n if (onCommit(d) === false) return onProblem(\"unavailable\");\n onProblem(null);\n };\n return (\n <InputGroup size=\"sm\" className=\"flex-1\" invalid={invalid}>\n <InputGroup.Input\n aria-label={label}\n placeholder={t(\"datePicker.isoPlaceholder\", \"YYYY-MM-DD\")}\n value={text}\n inputMode=\"numeric\"\n className=\"mono text-small\"\n {...(invalid ? { \"aria-invalid\": true, \"aria-describedby\": errorId } : {})}\n onChange={(e) => setText(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key !== \"Enter\") return;\n e.preventDefault();\n commit();\n }}\n />\n </InputGroup>\n );\n}\n\nexport const ISO_PROBLEM = \"mt-6 text-small text-pretty text-danger-text empty:mt-0\";\n\nexport function isoProblemText(t: UiText, problem: IsoProblem): string {\n if (problem === \"format\") return t(\"datePicker.typeIso\", \"Enter the date as YYYY-MM-DD.\");\n if (problem === \"unavailable\") return t(\"datePicker.unavailableDate\", \"This date can't be chosen. Choose another date.\");\n if (problem === \"missing\") return t(\"datePicker.startFirst\", \"Choose a start date first.\");\n return \"\";\n}\n"],"mappings":";;;;;;;AAOA,SAAgBE,EAAS,EACvB,UACA,UACA,aACA,cACA,YACA,cAQC;CACD,IAAMC,IAAIH,EAAU,GACd,CAACI,GAAMC,KAAWC,EAASC,IAAQC,EAAcD,CAAK,IAAI,EAAE,GAC5D,CAACE,GAAOC,KAAYJ,EAASC,CAAK;CACxC,AAAIA,MAAUE,MACZC,EAASH,CAAK,GACdF,EAAQE,IAAQC,EAAcD,CAAK,IAAI,EAAE;CAE3C,IAAMI,UAAe;EACnB,IAAMC,IAAQR,EAAK,KAAK;EACxB,IAAI,CAACQ,GAAO;GAEV,AADAP,EAAQE,IAAQC,EAAcD,CAAK,IAAI,EAAE,GACzCM,EAAU,IAAI;GACd;EACF;EACA,IAAMC,IAAIC,EAAaH,CAAK;EAC5B,IAAI,CAACE,GAAG,OAAOD,EAAU,QAAQ;EACjC,IAAIN,KAASC,EAAcM,CAAC,MAAMN,EAAcD,CAAK,GAEnD,OADAF,EAAQG,EAAcD,CAAK,CAAC,GACrBM,EAAU,IAAI;EAEvB,IAAIG,EAASF,CAAC,MAAM,IAAO,OAAOD,EAAU,aAAa;EACzD,EAAU,IAAI;CAChB;CACA,OACE,kBAACZ,GAAD;EAAY,MAAK;EAAK,WAAU;EAAkB;EAChD,UAAA,kBAACA,EAAW,OAAZ;GACE,cAAYgB;GACZ,aAAad,EAAE,6BAA6B,YAAY;GACxD,OAAOC;GACP,WAAU;GACV,WAAU;GACV,GAAKc,IAAU;IAAE,gBAAgB;IAAM,oBAAoBC;GAAQ,IAAI,CAAC;GACxE,WAAW,MAAMd,EAAQ,EAAE,OAAO,KAAK;GACvC,QAAQM;GACR,YAAY,MAAM;IAChB,AAAI,EAAE,QAAQ,YACd,EAAE,eAAe,GACjBA,EAAO;GACT;EACD,CAAA;CACS,CAAA;AAEhB;AAEA,IAAaS,IAAc;AAE3B,SAAgBC,EAAe,GAAW,GAA6B;CAIrE,OAHIC,MAAY,WAAiBnB,EAAE,sBAAsB,+BAA+B,IACpFmB,MAAY,gBAAsBnB,EAAE,8BAA8B,iDAAiD,IACnHmB,MAAY,YAAkBnB,EAAE,yBAAyB,4BAA4B,IAClF;AACT"}
1
+ {"version":3,"file":"iso-field-BVOKAY4H.js","names":["useUiText","InputGroup","IsoField","t","text","setText","useState","value","formatISODate","shown","setShown","commit","typed","onProblem","d","parseISODate","onCommit","label","invalid","errorId","ISO_PROBLEM","isoProblemText","problem"],"sources":["../../src/components/date-picker/iso-field.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { InputGroup } from \"../input/input-group.js\";\nimport { formatISODate, parseISODate } from \"../../format/index.js\";\nimport { useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport type IsoProblem = \"format\" | \"unavailable\" | \"missing\" | null;\n\nexport function IsoField({\n label,\n value,\n onCommit,\n onProblem,\n errorId,\n invalid,\n}: {\n label: string;\n value: Date | undefined;\n onCommit: (d: Date) => boolean | void;\n onProblem: (problem: IsoProblem) => void;\n errorId: string;\n invalid: boolean;\n}) {\n const t = useUiText();\n const [text, setText] = useState(value ? formatISODate(value) : \"\");\n const [shown, setShown] = useState(value);\n if (value !== shown) {\n setShown(value);\n setText(value ? formatISODate(value) : \"\");\n }\n const commit = () => {\n const typed = text.trim();\n if (!typed) {\n setText(value ? formatISODate(value) : \"\");\n onProblem(null);\n return;\n }\n const d = parseISODate(typed);\n if (!d) return onProblem(\"format\");\n if (value && formatISODate(d) === formatISODate(value)) {\n setText(formatISODate(value));\n return onProblem(null);\n }\n if (onCommit(d) === false) return onProblem(\"unavailable\");\n onProblem(null);\n };\n return (\n <InputGroup size=\"sm\" className=\"flex-1\" invalid={invalid}>\n <InputGroup.Input\n aria-label={label}\n placeholder={t(\"datePicker.isoPlaceholder\", \"YYYY-MM-DD\")}\n value={text}\n inputMode=\"numeric\"\n className=\"mono text-small\"\n {...(invalid ? { \"aria-invalid\": true, \"aria-describedby\": errorId } : {})}\n onChange={(e) => setText(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key !== \"Enter\") return;\n e.preventDefault();\n commit();\n }}\n />\n </InputGroup>\n );\n}\n\nexport const ISO_PROBLEM = \"mt-6 text-small text-pretty text-danger-text empty:mt-0\";\n\nexport function isoProblemText(t: UiText, problem: IsoProblem): string {\n if (problem === \"format\") return t(\"datePicker.typeIso\", \"Enter the date as YYYY-MM-DD.\");\n if (problem === \"unavailable\") return t(\"datePicker.unavailableDate\", \"This date can't be chosen. Choose another date.\");\n if (problem === \"missing\") return t(\"datePicker.startFirst\", \"Choose a start date first.\");\n return \"\";\n}\n"],"mappings":";;;;;;;AAOA,SAAgBE,EAAS,EACvB,UACA,UACA,aACA,cACA,YACA,cAQC;CACD,IAAMC,IAAIH,EAAU,GACd,CAACI,GAAMC,KAAWC,EAASC,IAAQC,EAAcD,CAAK,IAAI,EAAE,GAC5D,CAACE,GAAOC,KAAYJ,EAASC,CAAK;CACxC,AAAIA,MAAUE,MACZC,EAASH,CAAK,GACdF,EAAQE,IAAQC,EAAcD,CAAK,IAAI,EAAE;CAE3C,IAAMI,UAAe;EACnB,IAAMC,IAAQR,EAAK,KAAK;EACxB,IAAI,CAACQ,GAAO;GAEV,AADAP,EAAQE,IAAQC,EAAcD,CAAK,IAAI,EAAE,GACzCM,EAAU,IAAI;GACd;EACF;EACA,IAAMC,IAAIC,EAAaH,CAAK;EAC5B,IAAI,CAACE,GAAG,OAAOD,EAAU,QAAQ;EACjC,IAAIN,KAASC,EAAcM,CAAC,MAAMN,EAAcD,CAAK,GAEnD,OADAF,EAAQG,EAAcD,CAAK,CAAC,GACrBM,EAAU,IAAI;EAEvB,IAAIG,EAASF,CAAC,MAAM,IAAO,OAAOD,EAAU,aAAa;EACzD,EAAU,IAAI;CAChB;CACA,OACE,kBAACZ,GAAD;EAAY,MAAK;EAAK,WAAU;EAAkB;EAChD,UAAA,kBAACA,EAAW,OAAZ;GACE,cAAYgB;GACZ,aAAad,EAAE,6BAA6B,YAAY;GACxD,OAAOC;GACP,WAAU;GACV,WAAU;GACV,GAAKc,IAAU;IAAE,gBAAgB;IAAM,oBAAoBC;GAAQ,IAAI,CAAC;GACxE,WAAW,MAAMd,EAAQ,EAAE,OAAO,KAAK;GACvC,QAAQM;GACR,YAAY,MAAM;IAChB,AAAI,EAAE,QAAQ,YACd,EAAE,eAAe,GACjBA,EAAO;GACT;EACD,CAAA;CACS,CAAA;AAEhB;AAEA,IAAaS,IAAc;AAE3B,SAAgBC,EAAe,GAAW,GAA6B;CAIrE,OAHIC,MAAY,WAAiBnB,EAAE,sBAAsB,+BAA+B,IACpFmB,MAAY,gBAAsBnB,EAAE,8BAA8B,iDAAiD,IACnHmB,MAAY,YAAkBnB,EAAE,yBAAyB,4BAA4B,IAClF;AACT"}
@@ -6,7 +6,7 @@ import { i } from "./context-BELWW79w.js";
6
6
  import { t as a } from "./icon-CBzOwqrX.js";
7
7
  import { s as o, u as s } from "./tooltip-Tkm-urbi.js";
8
8
  import { r as c } from "./text-DkKdTVUf.js";
9
- import { t as l } from "./icon-button-Dfwpvmav.js";
9
+ import { t as l } from "./icon-button-6kOn2zrP.js";
10
10
  import { n as u } from "./use-layout-width-CbSDbRb0.js";
11
11
  import { r as d } from "./skeleton-D-qk3mes.js";
12
12
  import { t as f } from "./truncated-d1afmUJT.js";
@@ -16,7 +16,7 @@ import { jsx as S, jsxs as C } from "react/jsx-runtime";
16
16
  import { Add01Icon as w, Cancel01Icon as T } from "@hugeicons/core-free-icons";
17
17
  import { createPortal as E } from "react-dom";
18
18
  //#region src/components/list/row-checkbox.tsx
19
- var D = /* @__PURE__ */ o(() => import("./checkbox-9tbimmF3.js").then((e) => e.c), { base: () => import.meta.url });
19
+ var D = /* @__PURE__ */ o(() => import("./checkbox-ahl1SOqU.js").then((e) => e.c), { base: () => import.meta.url });
20
20
  function ee({ checked: t, onToggle: n, "aria-label": r }) {
21
21
  let [i, a] = s(D, !0), [o, c] = x(!1), [l, u] = x(!1);
22
22
  return _(() => {
@@ -560,4 +560,4 @@ process.env.NODE_ENV !== "production" && (z.displayName = "SelectionAction");
560
560
  //#endregion
561
561
  export { I as a, P as i, A as n, z as o, k as r, R as s, L as t };
562
562
 
563
- //# sourceMappingURL=list-CU_AoVY3.js.map
563
+ //# sourceMappingURL=list-o8wcuBOz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-CU_AoVY3.js","names":["__icon_Add01Icon","__icon_Cancel01Icon","cn","usePortalContainer","useInset","useGutterPadded","Icon","lazyModule","useLazyModuleRetried","Text","IconButton","useLayoutWidth","Skeleton","TruncatedText","scrollParent","useCoarsePointer","checkbox","n","RowCheckbox","ariaLabel","mod","retry","over","setOver","useState","pressed","setPressed","useEffect","timer","release","onToggle","checked","virtualRows","KAESO_LIST_VARIANTS","KAESO_LIST_DEFAULT_VARIANTS","ID_W","NARROW","FOCUSABLE","TEXT_ENTRY","removeWidgetsFromTabOrder","line","root","primary","widget","List","selectedProp","forceRow","inset","selectedInner","setSelectedInner","selected","setSelected","useCallback","s","onSelectedChange","collapsed","setCollapsed","groups","g","active","setActive","anchor","setAnchor","useRef","bar","width","narrow","flat","useMemo","rows","list","item","c","i","a","items","firstRow","f","none","virtual","virtualizeAbove","coarse","estimateSize","density","rowsModule","retryRows","VirtualRows","scrollTo","tabStop","focusLine","reach","el","clearOfBar","now","lastFocus","last","index","layer","until","wait","hadVirtualRows","useLayoutEffect","observer","toggle","id","enabledIds","lines","onKeyDown","target","onPrimary","row","selectable","moveTo","from","next","widgets","w","at","onOpen","selecting","focused","render","GroupHeader","ListRow","ref","loading","className","LoadingRows","empty","FirstRows","selectionBar","SelectionBar","selectionActions","rowTone","card","selectsText","selection","top","covered","view","total","extra","count","j","padded","grouped","force","t","useUiText","stacked","wraps","wrapSubtitle","off","trailing","onSelect","depth","lastChild","idWidth","first","indent","glyph","title","onAdd","Add01Icon","addLabel","container","createPortal","children","onClear","Cancel01Icon","SelectionAction","danger","icon"],"sources":["../../src/components/list/row-checkbox.tsx","../../src/components/list/list.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\n\nconst checkbox = /* @__PURE__ */ lazyModule(() => import(\"../checkbox/checkbox.js\"), { base: () => import.meta.url });\n\nexport function RowCheckbox({ checked, onToggle, \"aria-label\": ariaLabel }: { checked: boolean; onToggle: () => void; \"aria-label\": string }) {\n const [mod, retry] = useLazyModuleRetried(checkbox, true);\n const [over, setOver] = useState(false);\n const [pressed, setPressed] = useState(false);\n useEffect(() => {\n if (!pressed) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const release = () => {\n timer = setTimeout(() => setPressed(false));\n };\n window.addEventListener(\"pointerup\", release, true);\n window.addEventListener(\"pointercancel\", release, true);\n return () => {\n clearTimeout(timer);\n window.removeEventListener(\"pointerup\", release, true);\n window.removeEventListener(\"pointercancel\", release, true);\n };\n }, [pressed]);\n if (mod && !over && !pressed) return <mod.CheckboxBox checked={checked} onCheckedChange={onToggle} aria-label={ariaLabel} />;\n return (\n <span\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n onPointerEnter={() => {\n setOver(true);\n retry();\n }}\n onPointerLeave={() => setOver(false)}\n onPointerDown={() => setPressed(true)}\n onClick={() => {\n onToggle();\n setOver(false);\n setPressed(false);\n }}\n className=\"relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox\"\n >\n <span aria-hidden className={cn(\"flex size-18 items-center justify-center rounded-checkbox\", checked ? \"bg-ink\" : \"bg-raised shadow-selector\")} />\n </span>\n );\n}\n","import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { Add01Icon as __icon_Add01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Text } from \"../text/text.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { useCoarsePointer } from \"../../hooks/use-coarse-pointer.js\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\nimport { RowCheckbox } from \"./row-checkbox.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst virtualRows = /* @__PURE__ */ lazyModule(() => import(\"./virtual-rows.js\"), { base: () => import.meta.url });\n\nexport const KAESO_LIST_VARIANTS = {\n density: {\n default: { classes: \"h-44\" },\n compact: { classes: \"h-36 coarse:h-44\" },\n },\n} as const;\nexport const KAESO_LIST_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport interface ListItemData {\n id: string;\n title: ReactNode;\n textValue?: string | undefined;\n subtitle?: ReactNode | undefined;\n glyph?: ReactNode | undefined;\n leading?: ReactNode | undefined;\n displayId?: string | undefined;\n meta?: ReactNode | undefined;\n date?: ReactNode | undefined;\n avatar?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children?: ListItemData[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ListGroup {\n id: string;\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n items: ListItemData[];\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n defaultCollapsed?: boolean | undefined;\n}\n\ntype Flat = { kind: \"header\"; group: ListGroup; key: string } | { kind: \"row\"; item: ListItemData; depth: 0 | 1; lastChild: boolean; key: string };\n\nexport interface ListProps {\n items?: ListItemData[] | undefined;\n groups?: ListGroup[] | undefined;\n onOpen?: ((item: ListItemData) => void) | undefined;\n selectable?: boolean | undefined;\n selected?: Set<string> | undefined;\n onSelectedChange?: ((selected: Set<string>) => void) | undefined;\n idWidth?: 48 | 64 | 80 | 96 | 120 | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n selectionActions?: ReactNode | undefined;\n selectionBar?: boolean | undefined;\n loading?: boolean | undefined;\n empty?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n \"data-force-row\"?: string | undefined;\n}\n\nconst ID_W = { 48: \"w-48\", 64: \"w-64\", 80: \"w-80\", 96: \"w-96\", 120: \"w-120\" } as const;\n\nconst NARROW = 520;\nconst FOCUSABLE = \"a[href], button, input, select, textarea, [tabindex], [contenteditable=true]\";\nconst TEXT_ENTRY = \"input:not([type=checkbox]):not([type=radio]), textarea, select, [contenteditable=true]\";\n\nfunction removeWidgetsFromTabOrder(root: HTMLElement) {\n for (const line of root.querySelectorAll<HTMLElement>(\"[role=row]\")) {\n const primary = line.querySelector(\"[data-index]\");\n if (!primary) continue;\n for (const widget of line.querySelectorAll<HTMLElement>(FOCUSABLE)) {\n if (widget !== primary && widget.getAttribute(\"tabindex\") !== \"-1\") widget.setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n\nexport const List = /* @__PURE__ */ forwardRef<HTMLDivElement, ListProps>(function List(\n {\n items,\n groups,\n onOpen,\n selectable,\n selected: selectedProp,\n onSelectedChange,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n virtualizeAbove = 100,\n selectionActions,\n selectionBar = true,\n loading,\n empty,\n className,\n \"aria-label\": ariaLabel,\n \"data-force-row\": forceRow,\n },\n ref,\n) {\n const inset = useInset();\n const [selectedInner, setSelectedInner] = useState<Set<string>>(new Set());\n const selected = selectedProp ?? selectedInner;\n const setSelected = useCallback(\n (s: Set<string>) => {\n if (!selectedProp) setSelectedInner(s);\n onSelectedChange?.(s);\n },\n [selectedProp, onSelectedChange],\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set((groups ?? []).filter((g) => g.defaultCollapsed).map((g) => g.id)));\n const [active, setActive] = useState(-1);\n const [anchor, setAnchor] = useState<number | null>(null);\n const root = useRef<HTMLDivElement | null>(null);\n const bar = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(root);\n const narrow = !!width && width < NARROW;\n\n const flat = useMemo<Flat[]>(() => {\n const rows = (list: ListItemData[]): Flat[] =>\n list.flatMap((item) => [\n { kind: \"row\" as const, item, depth: 0 as const, lastChild: false, key: item.id },\n ...(item.children ?? []).map((c, i, a) => ({ kind: \"row\" as const, item: c, depth: 1 as const, lastChild: i === a.length - 1, key: c.id })),\n ]);\n if (groups) return groups.flatMap((g) => [{ kind: \"header\" as const, group: g, key: `h-${g.id}` }, ...(collapsed.has(g.id) ? [] : rows(g.items))]);\n return rows(items ?? []);\n }, [items, groups, collapsed]);\n const firstRow = flat.findIndex((f) => f.kind === \"row\");\n const none = groups ? groups.every((g) => g.items.length === 0) : (items ?? []).length === 0;\n\n const virtual = flat.length > virtualizeAbove;\n const coarse = useCoarsePointer();\n const estimateSize = (i: number) => (flat[i]?.kind === \"header\" ? (i === 0 ? 36 : 52) : narrow ? 64 : density === \"compact\" && !coarse ? 36 : 44);\n const [rowsModule, retryRows] = useLazyModuleRetried(virtualRows, virtual);\n const VirtualRows = rowsModule?.VirtualRows;\n const scrollTo = useRef<((index: number) => void) | null>(null);\n\n if (active >= flat.length) setActive(-1);\n const tabStop = active >= 0 ? active : flat.length ? 0 : -1;\n const focusLine = (i: number) => {\n setActive(i);\n if (virtual) scrollTo.current?.(i);\n const line = () => root.current?.querySelector<HTMLElement>(`[data-index=\"${i}\"]`);\n const reach = (el: HTMLElement | null | undefined) => {\n if (!el) return;\n el.focus();\n clearOfBar(el, bar.current);\n };\n const now = line();\n if (now) reach(now);\n else requestAnimationFrame(() => reach(line()));\n };\n // The line focus was last in. When an action takes that line out of the list (a key disabled\n // under Active, an item archived), focus would fall to the page, also when the row's menu or its\n // confirmation closes after the line has gone; it moves to the line that took its place instead.\n const lastFocus = useRef<{ key: string; index: number } | null>(null);\n useLayoutEffect(() => {\n const last = lastFocus.current;\n if (!last || flat.some((f) => f.key === last.key)) return;\n lastFocus.current = null;\n if (!flat.length) return;\n const index = Math.min(last.index, flat.length - 1);\n if (document.activeElement === document.body) return focusLine(index);\n // Still in the confirmation, which is closing: it would hand focus back to the row, now gone.\n const layer = document.activeElement?.closest(\"[role=dialog], [role=alertdialog]\");\n if (!layer) return;\n const until = performance.now() + 2000;\n const wait = () => {\n if (document.activeElement === document.body) {\n if (root.current?.isConnected) focusLine(index);\n } else if (layer.contains(document.activeElement) && performance.now() < until) requestAnimationFrame(wait);\n };\n requestAnimationFrame(wait);\n });\n const hadVirtualRows = useRef(!!VirtualRows);\n useLayoutEffect(() => {\n if (VirtualRows && !hadVirtualRows.current && active >= 0 && document.activeElement === document.body) {\n root.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`)?.focus();\n }\n hadVirtualRows.current = !!VirtualRows;\n });\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n removeWidgetsFromTabOrder(el);\n const observer = new MutationObserver(() => removeWidgetsFromTabOrder(el));\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, []);\n const toggle = (id: string) => {\n const s = new Set(selected);\n if (s.has(id)) s.delete(id);\n else s.add(id);\n setSelected(s);\n };\n const enabledIds = (lines: Flat[]) => lines.flatMap((f) => (f.kind === \"row\" && !f.item.disabled ? [f.item.id] : []));\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (!e.currentTarget.contains(target) || target.closest(TEXT_ENTRY)) return;\n const line = target.closest<HTMLElement>(\"[role=row]\");\n const primary = line?.querySelector<HTMLElement>(\"[data-index]\");\n if (!line || !primary) return;\n const onPrimary = target === primary;\n // A tooltip trigger prevents Escape's default even while its tooltip is still closed; only an open popup keeps the key.\n if (e.key === \"Escape\" && !onPrimary && !e.altKey && !e.metaKey && !e.ctrlKey && !target.closest(\"[data-popup-open], [aria-expanded=true]\")) {\n e.preventDefault();\n primary.focus();\n return;\n }\n if (e.defaultPrevented) return;\n const index = Number(primary.dataset.index);\n const f = flat[index];\n const row = f?.kind === \"row\" ? f.item : undefined;\n if (e.altKey) return;\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === \"a\" && selectable && !e.shiftKey) {\n e.preventDefault();\n setSelected(new Set(enabledIds(flat)));\n }\n return;\n }\n const moveTo = (next: number) => {\n e.preventDefault();\n if (e.shiftKey && selectable) {\n const from = anchor ?? index;\n setAnchor(from);\n const s = new Set(selected);\n enabledIds(flat.slice(Math.min(from, next), Math.max(from, next) + 1)).forEach((id) => s.add(id));\n setSelected(s);\n } else setAnchor(null);\n focusLine(next);\n };\n const widgets = () =>\n [...line.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (w) => w !== primary && !w.closest(\"[role=checkbox], [aria-hidden=true], [hidden]\") && !w.matches(\":disabled, input[type=checkbox]\"),\n );\n if (e.key === \"ArrowDown\" || (e.key === \"j\" && !e.shiftKey)) moveTo(Math.min(flat.length - 1, index + 1));\n else if (e.key === \"ArrowUp\" || (e.key === \"k\" && !e.shiftKey)) moveTo(Math.max(0, index - 1));\n else if (e.key === \"Home\") moveTo(0);\n else if (e.key === \"End\") moveTo(flat.length - 1);\n else if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n const list = widgets();\n const at = onPrimary ? -1 : list.indexOf(target);\n const next = e.key === \"ArrowRight\" ? list[at + 1] : at > 0 ? list[at - 1] : at === 0 ? primary : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n } else if (!onPrimary || !row || e.shiftKey) {\n return;\n } else if ((e.key === \" \" || e.key === \"x\") && selectable) {\n e.preventDefault();\n if (!row.disabled) toggle(row.id);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!row.disabled) onOpen?.(row);\n } else if (e.key === \"Escape\" && selectable && selected.size) {\n setSelected(new Set());\n }\n };\n const selecting = selected.size > 0;\n useLayoutEffect(() => {\n const focused = document.activeElement;\n if (selecting && focused instanceof HTMLElement && root.current?.contains(focused)) clearOfBar(focused, bar.current);\n }, [selecting]);\n const render = (f: Flat, i: number) =>\n f.kind === \"header\" ? (\n <GroupHeader\n key={f.key}\n title={f.group.title}\n glyph={f.group.glyph}\n count={f.group.count ?? f.group.items.length}\n collapsed={collapsed.has(f.group.id)}\n onToggle={() => {\n const s = new Set(collapsed);\n if (s.has(f.group.id)) s.delete(f.group.id);\n else s.add(f.group.id);\n setCollapsed(s);\n }}\n onAdd={f.group.onAdd}\n addLabel={f.group.addLabel}\n indent={!!selectable}\n first={i === 0}\n index={i}\n active={i === tabStop}\n onFocus={() => setActive(i)}\n />\n ) : (\n <ListRow\n key={f.key}\n index={i}\n item={f.item}\n depth={f.depth}\n lastChild={f.lastChild}\n idWidth={idWidth}\n density={density}\n wrapSubtitle={wrapSubtitle}\n narrow={narrow}\n active={i === tabStop}\n selected={selected.has(f.item.id)}\n selectable={!!selectable}\n selecting={selecting}\n onSelect={() => toggle(f.item.id)}\n onOpen={() => onOpen?.(f.item)}\n onFocus={() => setActive(i)}\n {...(forceRow && i === firstRow ? { \"data-force\": forceRow } : {})}\n />\n );\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={flat.length || undefined}\n aria-multiselectable={selectable || undefined}\n aria-busy={loading || undefined}\n onKeyDown={(e) => {\n retryRows();\n onKeyDown(e);\n }}\n onPointerEnter={retryRows}\n onPointerDown={retryRows}\n onFocus={(e) => {\n retryRows();\n // A row's menu or dialog is a portal: its focus events reach here through React, not the page.\n if (!e.currentTarget.contains(e.target)) return;\n const index = Number((e.target as HTMLElement).closest(\"[role=row]\")?.querySelector<HTMLElement>(\"[data-index]\")?.dataset.index);\n const f = flat[index];\n lastFocus.current = f ? { key: f.key, index } : null;\n }}\n onBlur={(e) => {\n // Focus that goes to nothing (a click on the page) has left the list. Focus that goes to\n // another element may be in the row's menu or dialog, which hands it back to the row when it closes.\n if (e.currentTarget.contains(e.target) && !e.relatedTarget) lastFocus.current = null;\n }}\n onWheel={retryRows}\n className={cn(\"relative flex flex-col outline-none\", inset && \"overflow-hidden rounded-group bg-raised shadow-xs\", className)}\n >\n {loading && (none || flat.length === 0) ? (\n <LoadingRows density={density} grouped={!!groups} />\n ) : none && empty ? (\n <div role=\"row\">\n <div role=\"gridcell\">{empty}</div>\n </div>\n ) : virtual && VirtualRows ? (\n <VirtualRows\n count={flat.length}\n estimateSize={estimateSize}\n getScrollElement={() => scrollParent(root.current)}\n scrollTo={scrollTo}\n row={(i) => render(flat[i]!, i)}\n measure={narrow}\n />\n ) : virtual ? (\n <FirstRows count={flat.length} estimateSize={estimateSize} row={(i) => render(flat[i]!, i)} />\n ) : (\n flat.map(render)\n )}\n {selectable && selecting && selectionBar && (\n <SelectionBar ref={bar} count={selected.size} onClear={() => setSelected(new Set())}>\n {selectionActions}\n </SelectionBar>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") List.displayName = \"List\";\n\nfunction rowTone(card: boolean, selected: boolean) {\n if (selected)\n return card\n ? \"bg-raised-pressed controls-on-fill hover:raised-selected-hover active:raised-selected-hover\"\n : \"bg-fill-2 controls-on-fill hover:bg-fill-3 active:bg-fill-3\";\n return card ? \"hover:bg-raised-hover hover:controls-on-fill active:bg-raised-pressed\" : \"hover:bg-fill-1 hover:controls-on-fill active:bg-fill-2\";\n}\n\nfunction selectsText(row: HTMLElement) {\n const selection = typeof window === \"undefined\" ? null : window.getSelection();\n return !!selection && !selection.isCollapsed && !!selection.anchorNode && row.contains(selection.anchorNode);\n}\n\nfunction clearOfBar(el: HTMLElement, bar: HTMLElement | null) {\n const top = bar?.firstElementChild?.getBoundingClientRect().top;\n if (top === undefined) return;\n const covered = el.getBoundingClientRect().bottom + 8 - top;\n if (covered > 0) scrollParent(el)?.scrollBy({ top: covered });\n}\n\nfunction FirstRows({ count, estimateSize, row }: { count: number; estimateSize: (index: number) => number; row: (index: number) => ReactNode }) {\n const view = typeof window === \"undefined\" ? 1024 : window.innerHeight;\n const rows: ReactNode[] = [];\n let total = 0;\n let extra = 12;\n for (let i = 0; i < count; i++) {\n if (total >= view && extra-- <= 0) {\n for (let j = i; j < count; j++) total += estimateSize(j);\n break;\n }\n rows.push(\n <div key={i} role=\"presentation\" className=\"absolute top-0 left-0 w-full\" style={{ transform: `translateY(${Math.round(total)}px)` }}>\n {row(i)}\n </div>,\n );\n total += estimateSize(i);\n }\n return (\n <div role=\"presentation\" className=\"relative w-full\" style={{ height: total }}>\n {rows}\n </div>\n );\n}\n\nfunction LoadingRows({ density, grouped }: { density: keyof typeof KAESO_LIST_VARIANTS.density; grouped: boolean }) {\n const padded = useGutterPadded();\n return (\n <div role=\"presentation\">\n {grouped && (\n <div role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className=\"flex h-36 items-center px-12\">\n <Skeleton shape=\"line\" className=\"w-80\" />\n </div>\n </div>\n )}\n {[62, 48, 70, 54, 40, 58].map((w, i) => (\n <div key={i} role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className={cn(\"flex items-center gap-12 px-12\", KAESO_LIST_VARIANTS.density[density].classes)}>\n <Skeleton shape=\"line\" className=\"min-w-0\" style={{ width: `${w}%` }} />\n <span className=\"flex-1\" />\n <Skeleton shape=\"line\" className=\"w-64 shrink-0\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface ListRowProps {\n item: ListItemData;\n index?: number | undefined;\n depth?: 0 | 1 | undefined;\n lastChild?: boolean | undefined;\n idWidth?: keyof typeof ID_W | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n narrow?: boolean | undefined;\n active?: boolean | undefined;\n selected?: boolean | undefined;\n selectable?: boolean | undefined;\n selecting?: boolean | undefined;\n onSelect?: (() => void) | undefined;\n onOpen?: (() => void) | undefined;\n onFocus?: (() => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const ListRow = /* @__PURE__ */ forwardRef<HTMLDivElement, ListRowProps>(function ListRow(\n {\n item,\n index,\n depth = 0,\n lastChild,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n narrow = false,\n active,\n selected,\n selectable,\n selecting,\n onSelect,\n onOpen,\n onFocus,\n \"data-force\": force,\n },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const lines = narrow && !!(item.meta || item.date);\n const stacked = (card || lines) && !!item.subtitle;\n const wraps = stacked && wrapSubtitle;\n const off = !!item.disabled;\n const trailing = item.avatar && <span className={cn(\"flex shrink-0\", off && \"opacity-50\")}>{item.avatar}</span>;\n return (\n <div\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n className={card ? cn(\"px-0\", index !== undefined && index > 0 && \"hairline-t\") : padded ? \"px-0\" : \"px-24\"}\n >\n <div\n ref={ref}\n role=\"gridcell\"\n aria-selected={selectable ? !!selected : undefined}\n aria-disabled={off || undefined}\n data-index={index}\n data-row=\"\"\n tabIndex={active === false ? -1 : 0}\n onFocus={onFocus}\n onClick={(e: MouseEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.target as Node) || (e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n if (selectsText(e.currentTarget)) return;\n if (selecting && selectable) onSelect?.();\n else onOpen?.();\n }}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/row relative flex cursor-pointer items-center gap-12 text-body transition-control focus-ring-inset\",\n card ? \"rounded-none px-20\" : \"rounded-item px-12\",\n stacked || lines || wraps ? \"min-h-56 py-8\" : card && density === \"default\" ? \"h-48\" : KAESO_LIST_VARIANTS.density[density].classes,\n rowTone(card, !!selected),\n off && \"pointer-events-none text-fg-disabled\",\n )}\n >\n {selectable && (\n <span\n className={cn(\n \"flex shrink-0 transition-control select-none\",\n selecting || selected ? \"opacity-100\" : \"opacity-0 group-hover/row:opacity-100 group-focus-visible/row:opacity-100 coarse:opacity-100\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <RowCheckbox\n checked={!!selected}\n onToggle={() => onSelect?.()}\n aria-label={t(\"list.selectItem\", \"Select {name}\", { name: item.textValue ?? (typeof item.title === \"string\" ? item.title : item.id) })}\n />\n </span>\n )}\n {depth === 1 && (\n <span aria-hidden className=\"relative -ml-4 h-full w-16 shrink-0 self-stretch\">\n <span className={cn(\"absolute left-6 w-1 bg-line-strong forced-line\", lastChild ? \"top-0 h-1/2\" : \"inset-y-0\")} />\n <span className=\"absolute top-1/2 left-6 h-1 w-10 bg-line-strong forced-line\" />\n </span>\n )}\n {item.glyph && <span className={cn(\"flex size-16 shrink-0 items-center justify-center\", off && \"opacity-50\")}>{item.glyph}</span>}\n {item.leading && <span className={cn(\"-mr-4 flex shrink-0\", stacked && \"self-start\", off && \"opacity-50\")}>{item.leading}</span>}\n {item.displayId && (\n <TruncatedText\n className={cn(\n \"shrink-0 mono text-small tabular\",\n off ? \"text-fg-disabled\" : selected ? \"text-fg-secondary\" : \"text-fg-tertiary\",\n idWidth && ID_W[idWidth],\n )}\n >\n {item.displayId}\n </TruncatedText>\n )}\n <span className={cn(\"flex min-w-0 flex-1\", lines ? \"flex-col items-stretch gap-4\" : \"contents\")}>\n <span className={cn(\"flex min-w-0\", lines ? \"w-full\" : \"flex-1\", stacked ? \"flex-col items-start gap-2\" : \"items-baseline gap-8\")}>\n {typeof item.title === \"string\" ? (\n <Text truncate weight=\"medium\" tone={off ? \"inherit\" : \"default\"} className={cn(\"min-w-0 shrink\", stacked && \"max-w-full\")}>\n {item.title}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate font-medium\", off ? \"text-inherit\" : \"text-fg\", stacked && \"max-w-full\")}>{item.title}</span>\n )}\n {item.subtitle && (\n <TruncatedText\n wrap={wraps}\n className={cn(\"min-w-0\", off ? \"text-fg-disabled\" : \"text-fg-secondary\", stacked ? \"max-w-full text-small\" : \"flex-1 basis-0\")}\n >\n {item.subtitle}\n </TruncatedText>\n )}\n </span>\n {lines && (\n <span className=\"flex min-h-24 min-w-0 flex-wrap items-center gap-x-8\">\n {item.meta && <span className={cn(\"flex min-w-0 max-w-full items-center gap-6 overflow-hidden\", off && \"opacity-50\")}>{item.meta}</span>}\n {item.date && (\n <span className={cn(\"shrink-0 text-small whitespace-nowrap tabular\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>{item.date}</span>\n )}\n {trailing}\n {item.actions && <span className=\"ml-auto flex shrink-0 items-center gap-2\">{item.actions}</span>}\n </span>\n )}\n </span>\n {!lines && (item.meta || item.actions) && (\n <span className=\"relative flex shrink-0 items-center gap-6\">\n <span\n className={cn(\n \"flex items-center gap-6\",\n item.actions && \"transition-control group-hover/row:opacity-0 group-focus-within/row:opacity-0\",\n off && \"opacity-50\",\n )}\n >\n {item.meta}\n </span>\n {item.actions && (\n <span\n className={cn(\n \"flex items-center gap-2 opacity-0 transition-control group-hover/row:opacity-100 group-focus-within/row:opacity-100 coarse:opacity-100\",\n item.meta && \"absolute inset-y-0 right-0 coarse:static\",\n )}\n >\n {item.actions}\n </span>\n )}\n </span>\n )}\n {!lines && item.date && (\n <span className={cn(\"min-w-80 shrink-0 text-right text-small whitespace-nowrap tabular\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {item.date}\n </span>\n )}\n {!lines && trailing}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ListRow.displayName = \"ListRow\";\n\nexport interface GroupHeaderProps {\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n collapsed?: boolean | undefined;\n onToggle?: (() => void) | undefined;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n indent?: boolean | undefined;\n first?: boolean | undefined;\n index?: number | undefined;\n active?: boolean | undefined;\n onFocus?: (() => void) | undefined;\n}\n\nexport const GroupHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, GroupHeaderProps>(function GroupHeader(\n { title, glyph, count, collapsed, onToggle, onAdd, addLabel, indent, first, index, active, onFocus },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n return (\n <div\n ref={ref}\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n onFocus={onFocus}\n className={card ? cn(\"group/gh bg-fill-1\", !first && \"hairline-t\") : cn(\"group/gh\", !first && \"pt-16\", padded ? \"px-0\" : \"px-24\")}\n >\n <div role=\"gridcell\" className={cn(\"flex h-36 items-center gap-4\", card && \"pr-12 pl-8\")}>\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n data-index={index}\n tabIndex={active === false ? -1 : 0}\n onClick={onToggle}\n className={cn(\n \"relative flex h-28 min-w-0 cursor-pointer items-center gap-8 rounded-pill px-12 text-small transition-control focus-ring tap-target\",\n card ? \"hover:bg-fill-2 active:bg-fill-3\" : \"hover:bg-fill-1 active:bg-fill-2\",\n )}\n >\n {indent && !card && <span aria-hidden className=\"w-22 shrink-0\" />}\n {glyph && <span className=\"flex size-16 items-center justify-center\">{glyph}</span>}\n <span className=\"truncate font-medium text-fg-secondary\">{title}</span>\n {count !== undefined && <span className=\"text-fg-tertiary tabular\">{count}</span>}\n <svg\n viewBox=\"0 0 8 8\"\n aria-hidden\n className={cn(\"size-10 text-fg-tertiary transition-transform duration-200 ease-standard\", !collapsed && \"rotate-90\")}\n >\n <path d=\"M2.5 1.5 5.5 4l-3 2.5z\" fill=\"currentColor\" />\n </svg>\n </button>\n <span className=\"flex-1\" />\n {onAdd && (\n <span className=\"flex opacity-0 transition-control group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 coarse:opacity-100\">\n <IconButton icon={__icon_Add01Icon} aria-label={addLabel ?? t(\"list.add\", \"Add\")} size=\"xs\" onClick={onAdd} />\n </span>\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupHeader.displayName = \"GroupHeader\";\n\nexport interface SelectionBarProps {\n count: number;\n onClear: () => void;\n children?: ReactNode | undefined;\n}\n\nexport const SelectionBar = /* @__PURE__ */ forwardRef<HTMLDivElement, SelectionBarProps>(function SelectionBar({ count, onClear, children }, ref) {\n const container = usePortalContainer();\n const t = useUiText();\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n ref={ref}\n role=\"region\"\n aria-label={t(\"list.selection\", \"Selection\")}\n className=\"pointer-events-none fixed right-0 bottom-24 left-0 z-50 flex justify-center px-16\"\n >\n <div className=\"pointer-events-auto flex min-h-44 items-center gap-4 rounded-pill bg-toast py-6 pr-6 pl-16 text-body font-medium text-toast-fg shadow-toast popup-motion\">\n <span className=\"pr-8 tabular\">{t(\"list.selected\", \"{count} selected\", { count: String(count) })}</span>\n <span className=\"mr-4 h-20 w-1 bg-toast-action\" aria-hidden />\n {children}\n <button\n type=\"button\"\n onClick={onClear}\n aria-label={t(\"list.clearSelection\", \"Clear selection\")}\n className=\"inline-flex size-32 cursor-pointer items-center justify-center rounded-pill text-toast-fg-secondary transition-control hover:bg-toast-action hover:text-toast-fg focus-ring\"\n >\n <Icon icon={__icon_Cancel01Icon} size=\"sm\" />\n </button>\n </div>\n </div>,\n container ?? document.body,\n );\n});\nif (process.env.NODE_ENV !== \"production\") SelectionBar.displayName = \"SelectionBar\";\n\nexport interface SelectionActionProps {\n children: ReactNode;\n onClick?: (() => void) | undefined;\n icon?: IconData | undefined;\n danger?: boolean | undefined;\n}\n\nexport const SelectionAction = /* @__PURE__ */ forwardRef<HTMLButtonElement, SelectionActionProps>(function SelectionAction({ children, onClick, icon, danger }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"inline-flex h-32 cursor-pointer items-center gap-6 rounded-pill px-12 text-body font-medium transition-control hover:bg-toast-action focus-ring\",\n danger ? \"text-toast-danger\" : \"text-toast-fg\",\n icon && \"pl-10\",\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className={danger ? undefined : \"text-toast-fg-secondary\"} />}\n {children}\n </button>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SelectionAction.displayName = \"SelectionAction\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"list-o8wcuBOz.js","names":["__icon_Add01Icon","__icon_Cancel01Icon","cn","usePortalContainer","useInset","useGutterPadded","Icon","lazyModule","useLazyModuleRetried","Text","IconButton","useLayoutWidth","Skeleton","TruncatedText","scrollParent","useCoarsePointer","checkbox","n","RowCheckbox","ariaLabel","mod","retry","over","setOver","useState","pressed","setPressed","useEffect","timer","release","onToggle","checked","virtualRows","KAESO_LIST_VARIANTS","KAESO_LIST_DEFAULT_VARIANTS","ID_W","NARROW","FOCUSABLE","TEXT_ENTRY","removeWidgetsFromTabOrder","line","root","primary","widget","List","selectedProp","forceRow","inset","selectedInner","setSelectedInner","selected","setSelected","useCallback","s","onSelectedChange","collapsed","setCollapsed","groups","g","active","setActive","anchor","setAnchor","useRef","bar","width","narrow","flat","useMemo","rows","list","item","c","i","a","items","firstRow","f","none","virtual","virtualizeAbove","coarse","estimateSize","density","rowsModule","retryRows","VirtualRows","scrollTo","tabStop","focusLine","reach","el","clearOfBar","now","lastFocus","last","index","layer","until","wait","hadVirtualRows","useLayoutEffect","observer","toggle","id","enabledIds","lines","onKeyDown","target","onPrimary","row","selectable","moveTo","from","next","widgets","w","at","onOpen","selecting","focused","render","GroupHeader","ListRow","ref","loading","className","LoadingRows","empty","FirstRows","selectionBar","SelectionBar","selectionActions","rowTone","card","selectsText","selection","top","covered","view","total","extra","count","j","padded","grouped","force","t","useUiText","stacked","wraps","wrapSubtitle","off","trailing","onSelect","depth","lastChild","idWidth","first","indent","glyph","title","onAdd","Add01Icon","addLabel","container","createPortal","children","onClear","Cancel01Icon","SelectionAction","danger","icon"],"sources":["../../src/components/list/row-checkbox.tsx","../../src/components/list/list.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\n\nconst checkbox = /* @__PURE__ */ lazyModule(() => import(\"../checkbox/checkbox.js\"), { base: () => import.meta.url });\n\nexport function RowCheckbox({ checked, onToggle, \"aria-label\": ariaLabel }: { checked: boolean; onToggle: () => void; \"aria-label\": string }) {\n const [mod, retry] = useLazyModuleRetried(checkbox, true);\n const [over, setOver] = useState(false);\n const [pressed, setPressed] = useState(false);\n useEffect(() => {\n if (!pressed) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n const release = () => {\n timer = setTimeout(() => setPressed(false));\n };\n window.addEventListener(\"pointerup\", release, true);\n window.addEventListener(\"pointercancel\", release, true);\n return () => {\n clearTimeout(timer);\n window.removeEventListener(\"pointerup\", release, true);\n window.removeEventListener(\"pointercancel\", release, true);\n };\n }, [pressed]);\n if (mod && !over && !pressed) return <mod.CheckboxBox checked={checked} onCheckedChange={onToggle} aria-label={ariaLabel} />;\n return (\n <span\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n onPointerEnter={() => {\n setOver(true);\n retry();\n }}\n onPointerLeave={() => setOver(false)}\n onPointerDown={() => setPressed(true)}\n onClick={() => {\n onToggle();\n setOver(false);\n setPressed(false);\n }}\n className=\"relative -m-3 inline-flex size-24 shrink-0 cursor-pointer items-center justify-center rounded-checkbox\"\n >\n <span aria-hidden className={cn(\"flex size-18 items-center justify-center rounded-checkbox\", checked ? \"bg-ink\" : \"bg-raised shadow-selector\")} />\n </span>\n );\n}\n","import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type MouseEvent, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { useGutterPadded, useInset } from \"../../utils/inset.js\";\nimport { Add01Icon as __icon_Add01Icon, Cancel01Icon as __icon_Cancel01Icon } from \"@hugeicons/core-free-icons\";\nimport { Icon, type IconData } from \"../icon/icon.js\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { Text } from \"../text/text.js\";\nimport { TruncatedText } from \"../text/truncated.js\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { scrollParent } from \"../../hooks/scroll-parent.js\";\nimport { useLayoutWidth } from \"../../hooks/use-layout-width.js\";\nimport { useCoarsePointer } from \"../../hooks/use-coarse-pointer.js\";\nimport { createPortal } from \"react-dom\";\nimport { usePortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModuleRetried } from \"../../utils/lazy-module.js\";\nimport { RowCheckbox } from \"./row-checkbox.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nconst virtualRows = /* @__PURE__ */ lazyModule(() => import(\"./virtual-rows.js\"), { base: () => import.meta.url });\n\nexport const KAESO_LIST_VARIANTS = {\n density: {\n default: { classes: \"h-44\" },\n compact: { classes: \"h-36 coarse:h-44\" },\n },\n} as const;\nexport const KAESO_LIST_DEFAULT_VARIANTS = { density: \"default\" } as const;\n\nexport interface ListItemData {\n id: string;\n title: ReactNode;\n textValue?: string | undefined;\n subtitle?: ReactNode | undefined;\n glyph?: ReactNode | undefined;\n leading?: ReactNode | undefined;\n displayId?: string | undefined;\n meta?: ReactNode | undefined;\n date?: ReactNode | undefined;\n avatar?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children?: ListItemData[] | undefined;\n disabled?: boolean | undefined;\n}\n\nexport interface ListGroup {\n id: string;\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n items: ListItemData[];\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n defaultCollapsed?: boolean | undefined;\n}\n\ntype Flat = { kind: \"header\"; group: ListGroup; key: string } | { kind: \"row\"; item: ListItemData; depth: 0 | 1; lastChild: boolean; key: string };\n\nexport interface ListProps {\n items?: ListItemData[] | undefined;\n groups?: ListGroup[] | undefined;\n onOpen?: ((item: ListItemData) => void) | undefined;\n selectable?: boolean | undefined;\n selected?: Set<string> | undefined;\n onSelectedChange?: ((selected: Set<string>) => void) | undefined;\n idWidth?: 48 | 64 | 80 | 96 | 120 | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n virtualizeAbove?: number | undefined;\n selectionActions?: ReactNode | undefined;\n selectionBar?: boolean | undefined;\n loading?: boolean | undefined;\n empty?: ReactNode | undefined;\n \"aria-label\": string;\n className?: string | undefined;\n \"data-force-row\"?: string | undefined;\n}\n\nconst ID_W = { 48: \"w-48\", 64: \"w-64\", 80: \"w-80\", 96: \"w-96\", 120: \"w-120\" } as const;\n\nconst NARROW = 520;\nconst FOCUSABLE = \"a[href], button, input, select, textarea, [tabindex], [contenteditable=true]\";\nconst TEXT_ENTRY = \"input:not([type=checkbox]):not([type=radio]), textarea, select, [contenteditable=true]\";\n\nfunction removeWidgetsFromTabOrder(root: HTMLElement) {\n for (const line of root.querySelectorAll<HTMLElement>(\"[role=row]\")) {\n const primary = line.querySelector(\"[data-index]\");\n if (!primary) continue;\n for (const widget of line.querySelectorAll<HTMLElement>(FOCUSABLE)) {\n if (widget !== primary && widget.getAttribute(\"tabindex\") !== \"-1\") widget.setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n\nexport const List = /* @__PURE__ */ forwardRef<HTMLDivElement, ListProps>(function List(\n {\n items,\n groups,\n onOpen,\n selectable,\n selected: selectedProp,\n onSelectedChange,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n virtualizeAbove = 100,\n selectionActions,\n selectionBar = true,\n loading,\n empty,\n className,\n \"aria-label\": ariaLabel,\n \"data-force-row\": forceRow,\n },\n ref,\n) {\n const inset = useInset();\n const [selectedInner, setSelectedInner] = useState<Set<string>>(new Set());\n const selected = selectedProp ?? selectedInner;\n const setSelected = useCallback(\n (s: Set<string>) => {\n if (!selectedProp) setSelectedInner(s);\n onSelectedChange?.(s);\n },\n [selectedProp, onSelectedChange],\n );\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set((groups ?? []).filter((g) => g.defaultCollapsed).map((g) => g.id)));\n const [active, setActive] = useState(-1);\n const [anchor, setAnchor] = useState<number | null>(null);\n const root = useRef<HTMLDivElement | null>(null);\n const bar = useRef<HTMLDivElement | null>(null);\n const width = useLayoutWidth(root);\n const narrow = !!width && width < NARROW;\n\n const flat = useMemo<Flat[]>(() => {\n const rows = (list: ListItemData[]): Flat[] =>\n list.flatMap((item) => [\n { kind: \"row\" as const, item, depth: 0 as const, lastChild: false, key: item.id },\n ...(item.children ?? []).map((c, i, a) => ({ kind: \"row\" as const, item: c, depth: 1 as const, lastChild: i === a.length - 1, key: c.id })),\n ]);\n if (groups) return groups.flatMap((g) => [{ kind: \"header\" as const, group: g, key: `h-${g.id}` }, ...(collapsed.has(g.id) ? [] : rows(g.items))]);\n return rows(items ?? []);\n }, [items, groups, collapsed]);\n const firstRow = flat.findIndex((f) => f.kind === \"row\");\n const none = groups ? groups.every((g) => g.items.length === 0) : (items ?? []).length === 0;\n\n const virtual = flat.length > virtualizeAbove;\n const coarse = useCoarsePointer();\n const estimateSize = (i: number) => (flat[i]?.kind === \"header\" ? (i === 0 ? 36 : 52) : narrow ? 64 : density === \"compact\" && !coarse ? 36 : 44);\n const [rowsModule, retryRows] = useLazyModuleRetried(virtualRows, virtual);\n const VirtualRows = rowsModule?.VirtualRows;\n const scrollTo = useRef<((index: number) => void) | null>(null);\n\n if (active >= flat.length) setActive(-1);\n const tabStop = active >= 0 ? active : flat.length ? 0 : -1;\n const focusLine = (i: number) => {\n setActive(i);\n if (virtual) scrollTo.current?.(i);\n const line = () => root.current?.querySelector<HTMLElement>(`[data-index=\"${i}\"]`);\n const reach = (el: HTMLElement | null | undefined) => {\n if (!el) return;\n el.focus();\n clearOfBar(el, bar.current);\n };\n const now = line();\n if (now) reach(now);\n else requestAnimationFrame(() => reach(line()));\n };\n // The line focus was last in. When an action takes that line out of the list (a key disabled\n // under Active, an item archived), focus would fall to the page, also when the row's menu or its\n // confirmation closes after the line has gone; it moves to the line that took its place instead.\n const lastFocus = useRef<{ key: string; index: number } | null>(null);\n useLayoutEffect(() => {\n const last = lastFocus.current;\n if (!last || flat.some((f) => f.key === last.key)) return;\n lastFocus.current = null;\n if (!flat.length) return;\n const index = Math.min(last.index, flat.length - 1);\n if (document.activeElement === document.body) return focusLine(index);\n // Still in the confirmation, which is closing: it would hand focus back to the row, now gone.\n const layer = document.activeElement?.closest(\"[role=dialog], [role=alertdialog]\");\n if (!layer) return;\n const until = performance.now() + 2000;\n const wait = () => {\n if (document.activeElement === document.body) {\n if (root.current?.isConnected) focusLine(index);\n } else if (layer.contains(document.activeElement) && performance.now() < until) requestAnimationFrame(wait);\n };\n requestAnimationFrame(wait);\n });\n const hadVirtualRows = useRef(!!VirtualRows);\n useLayoutEffect(() => {\n if (VirtualRows && !hadVirtualRows.current && active >= 0 && document.activeElement === document.body) {\n root.current?.querySelector<HTMLElement>(`[data-index=\"${active}\"]`)?.focus();\n }\n hadVirtualRows.current = !!VirtualRows;\n });\n useLayoutEffect(() => {\n const el = root.current;\n if (!el) return;\n removeWidgetsFromTabOrder(el);\n const observer = new MutationObserver(() => removeWidgetsFromTabOrder(el));\n observer.observe(el, { subtree: true, childList: true, attributes: true, attributeFilter: [\"tabindex\"] });\n return () => observer.disconnect();\n }, []);\n const toggle = (id: string) => {\n const s = new Set(selected);\n if (s.has(id)) s.delete(id);\n else s.add(id);\n setSelected(s);\n };\n const enabledIds = (lines: Flat[]) => lines.flatMap((f) => (f.kind === \"row\" && !f.item.disabled ? [f.item.id] : []));\n const onKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (!e.currentTarget.contains(target) || target.closest(TEXT_ENTRY)) return;\n const line = target.closest<HTMLElement>(\"[role=row]\");\n const primary = line?.querySelector<HTMLElement>(\"[data-index]\");\n if (!line || !primary) return;\n const onPrimary = target === primary;\n // A tooltip trigger prevents Escape's default even while its tooltip is still closed; only an open popup keeps the key.\n if (e.key === \"Escape\" && !onPrimary && !e.altKey && !e.metaKey && !e.ctrlKey && !target.closest(\"[data-popup-open], [aria-expanded=true]\")) {\n e.preventDefault();\n primary.focus();\n return;\n }\n if (e.defaultPrevented) return;\n const index = Number(primary.dataset.index);\n const f = flat[index];\n const row = f?.kind === \"row\" ? f.item : undefined;\n if (e.altKey) return;\n if (e.metaKey || e.ctrlKey) {\n if (e.key.toLowerCase() === \"a\" && selectable && !e.shiftKey) {\n e.preventDefault();\n setSelected(new Set(enabledIds(flat)));\n }\n return;\n }\n const moveTo = (next: number) => {\n e.preventDefault();\n if (e.shiftKey && selectable) {\n const from = anchor ?? index;\n setAnchor(from);\n const s = new Set(selected);\n enabledIds(flat.slice(Math.min(from, next), Math.max(from, next) + 1)).forEach((id) => s.add(id));\n setSelected(s);\n } else setAnchor(null);\n focusLine(next);\n };\n const widgets = () =>\n [...line.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (w) => w !== primary && !w.closest(\"[role=checkbox], [aria-hidden=true], [hidden]\") && !w.matches(\":disabled, input[type=checkbox]\"),\n );\n if (e.key === \"ArrowDown\" || (e.key === \"j\" && !e.shiftKey)) moveTo(Math.min(flat.length - 1, index + 1));\n else if (e.key === \"ArrowUp\" || (e.key === \"k\" && !e.shiftKey)) moveTo(Math.max(0, index - 1));\n else if (e.key === \"Home\") moveTo(0);\n else if (e.key === \"End\") moveTo(flat.length - 1);\n else if (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") {\n const list = widgets();\n const at = onPrimary ? -1 : list.indexOf(target);\n const next = e.key === \"ArrowRight\" ? list[at + 1] : at > 0 ? list[at - 1] : at === 0 ? primary : undefined;\n if (!next) return;\n e.preventDefault();\n next.focus();\n } else if (!onPrimary || !row || e.shiftKey) {\n return;\n } else if ((e.key === \" \" || e.key === \"x\") && selectable) {\n e.preventDefault();\n if (!row.disabled) toggle(row.id);\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (!row.disabled) onOpen?.(row);\n } else if (e.key === \"Escape\" && selectable && selected.size) {\n setSelected(new Set());\n }\n };\n const selecting = selected.size > 0;\n useLayoutEffect(() => {\n const focused = document.activeElement;\n if (selecting && focused instanceof HTMLElement && root.current?.contains(focused)) clearOfBar(focused, bar.current);\n }, [selecting]);\n const render = (f: Flat, i: number) =>\n f.kind === \"header\" ? (\n <GroupHeader\n key={f.key}\n title={f.group.title}\n glyph={f.group.glyph}\n count={f.group.count ?? f.group.items.length}\n collapsed={collapsed.has(f.group.id)}\n onToggle={() => {\n const s = new Set(collapsed);\n if (s.has(f.group.id)) s.delete(f.group.id);\n else s.add(f.group.id);\n setCollapsed(s);\n }}\n onAdd={f.group.onAdd}\n addLabel={f.group.addLabel}\n indent={!!selectable}\n first={i === 0}\n index={i}\n active={i === tabStop}\n onFocus={() => setActive(i)}\n />\n ) : (\n <ListRow\n key={f.key}\n index={i}\n item={f.item}\n depth={f.depth}\n lastChild={f.lastChild}\n idWidth={idWidth}\n density={density}\n wrapSubtitle={wrapSubtitle}\n narrow={narrow}\n active={i === tabStop}\n selected={selected.has(f.item.id)}\n selectable={!!selectable}\n selecting={selecting}\n onSelect={() => toggle(f.item.id)}\n onOpen={() => onOpen?.(f.item)}\n onFocus={() => setActive(i)}\n {...(forceRow && i === firstRow ? { \"data-force\": forceRow } : {})}\n />\n );\n\n return (\n <div\n ref={(e) => {\n root.current = e;\n if (typeof ref === \"function\") ref(e);\n else if (ref) ref.current = e;\n }}\n role=\"grid\"\n aria-label={ariaLabel}\n aria-rowcount={flat.length || undefined}\n aria-multiselectable={selectable || undefined}\n aria-busy={loading || undefined}\n onKeyDown={(e) => {\n retryRows();\n onKeyDown(e);\n }}\n onPointerEnter={retryRows}\n onPointerDown={retryRows}\n onFocus={(e) => {\n retryRows();\n // A row's menu or dialog is a portal: its focus events reach here through React, not the page.\n if (!e.currentTarget.contains(e.target)) return;\n const index = Number((e.target as HTMLElement).closest(\"[role=row]\")?.querySelector<HTMLElement>(\"[data-index]\")?.dataset.index);\n const f = flat[index];\n lastFocus.current = f ? { key: f.key, index } : null;\n }}\n onBlur={(e) => {\n // Focus that goes to nothing (a click on the page) has left the list. Focus that goes to\n // another element may be in the row's menu or dialog, which hands it back to the row when it closes.\n if (e.currentTarget.contains(e.target) && !e.relatedTarget) lastFocus.current = null;\n }}\n onWheel={retryRows}\n className={cn(\"relative flex flex-col outline-none\", inset && \"overflow-hidden rounded-group bg-raised shadow-xs\", className)}\n >\n {loading && (none || flat.length === 0) ? (\n <LoadingRows density={density} grouped={!!groups} />\n ) : none && empty ? (\n <div role=\"row\">\n <div role=\"gridcell\">{empty}</div>\n </div>\n ) : virtual && VirtualRows ? (\n <VirtualRows\n count={flat.length}\n estimateSize={estimateSize}\n getScrollElement={() => scrollParent(root.current)}\n scrollTo={scrollTo}\n row={(i) => render(flat[i]!, i)}\n measure={narrow}\n />\n ) : virtual ? (\n <FirstRows count={flat.length} estimateSize={estimateSize} row={(i) => render(flat[i]!, i)} />\n ) : (\n flat.map(render)\n )}\n {selectable && selecting && selectionBar && (\n <SelectionBar ref={bar} count={selected.size} onClear={() => setSelected(new Set())}>\n {selectionActions}\n </SelectionBar>\n )}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") List.displayName = \"List\";\n\nfunction rowTone(card: boolean, selected: boolean) {\n if (selected)\n return card\n ? \"bg-raised-pressed controls-on-fill hover:raised-selected-hover active:raised-selected-hover\"\n : \"bg-fill-2 controls-on-fill hover:bg-fill-3 active:bg-fill-3\";\n return card ? \"hover:bg-raised-hover hover:controls-on-fill active:bg-raised-pressed\" : \"hover:bg-fill-1 hover:controls-on-fill active:bg-fill-2\";\n}\n\nfunction selectsText(row: HTMLElement) {\n const selection = typeof window === \"undefined\" ? null : window.getSelection();\n return !!selection && !selection.isCollapsed && !!selection.anchorNode && row.contains(selection.anchorNode);\n}\n\nfunction clearOfBar(el: HTMLElement, bar: HTMLElement | null) {\n const top = bar?.firstElementChild?.getBoundingClientRect().top;\n if (top === undefined) return;\n const covered = el.getBoundingClientRect().bottom + 8 - top;\n if (covered > 0) scrollParent(el)?.scrollBy({ top: covered });\n}\n\nfunction FirstRows({ count, estimateSize, row }: { count: number; estimateSize: (index: number) => number; row: (index: number) => ReactNode }) {\n const view = typeof window === \"undefined\" ? 1024 : window.innerHeight;\n const rows: ReactNode[] = [];\n let total = 0;\n let extra = 12;\n for (let i = 0; i < count; i++) {\n if (total >= view && extra-- <= 0) {\n for (let j = i; j < count; j++) total += estimateSize(j);\n break;\n }\n rows.push(\n <div key={i} role=\"presentation\" className=\"absolute top-0 left-0 w-full\" style={{ transform: `translateY(${Math.round(total)}px)` }}>\n {row(i)}\n </div>,\n );\n total += estimateSize(i);\n }\n return (\n <div role=\"presentation\" className=\"relative w-full\" style={{ height: total }}>\n {rows}\n </div>\n );\n}\n\nfunction LoadingRows({ density, grouped }: { density: keyof typeof KAESO_LIST_VARIANTS.density; grouped: boolean }) {\n const padded = useGutterPadded();\n return (\n <div role=\"presentation\">\n {grouped && (\n <div role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className=\"flex h-36 items-center px-12\">\n <Skeleton shape=\"line\" className=\"w-80\" />\n </div>\n </div>\n )}\n {[62, 48, 70, 54, 40, 58].map((w, i) => (\n <div key={i} role=\"presentation\" className={padded ? \"px-0\" : \"px-24\"}>\n <div className={cn(\"flex items-center gap-12 px-12\", KAESO_LIST_VARIANTS.density[density].classes)}>\n <Skeleton shape=\"line\" className=\"min-w-0\" style={{ width: `${w}%` }} />\n <span className=\"flex-1\" />\n <Skeleton shape=\"line\" className=\"w-64 shrink-0\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface ListRowProps {\n item: ListItemData;\n index?: number | undefined;\n depth?: 0 | 1 | undefined;\n lastChild?: boolean | undefined;\n idWidth?: keyof typeof ID_W | undefined;\n density?: keyof typeof KAESO_LIST_VARIANTS.density | undefined;\n wrapSubtitle?: boolean | undefined;\n narrow?: boolean | undefined;\n active?: boolean | undefined;\n selected?: boolean | undefined;\n selectable?: boolean | undefined;\n selecting?: boolean | undefined;\n onSelect?: (() => void) | undefined;\n onOpen?: (() => void) | undefined;\n onFocus?: (() => void) | undefined;\n \"data-force\"?: string | undefined;\n}\n\nexport const ListRow = /* @__PURE__ */ forwardRef<HTMLDivElement, ListRowProps>(function ListRow(\n {\n item,\n index,\n depth = 0,\n lastChild,\n idWidth,\n density = \"default\",\n wrapSubtitle = false,\n narrow = false,\n active,\n selected,\n selectable,\n selecting,\n onSelect,\n onOpen,\n onFocus,\n \"data-force\": force,\n },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n const lines = narrow && !!(item.meta || item.date);\n const stacked = (card || lines) && !!item.subtitle;\n const wraps = stacked && wrapSubtitle;\n const off = !!item.disabled;\n const trailing = item.avatar && <span className={cn(\"flex shrink-0\", off && \"opacity-50\")}>{item.avatar}</span>;\n return (\n <div\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n className={card ? cn(\"px-0\", index !== undefined && index > 0 && \"hairline-t\") : padded ? \"px-0\" : \"px-24\"}\n >\n <div\n ref={ref}\n role=\"gridcell\"\n aria-selected={selectable ? !!selected : undefined}\n aria-disabled={off || undefined}\n data-index={index}\n data-row=\"\"\n tabIndex={active === false ? -1 : 0}\n onFocus={onFocus}\n onClick={(e: MouseEvent<HTMLElement>) => {\n if (!e.currentTarget.contains(e.target as Node) || (e.target as HTMLElement).closest(\"button, a, [role=checkbox]\")) return;\n if (selectsText(e.currentTarget)) return;\n if (selecting && selectable) onSelect?.();\n else onOpen?.();\n }}\n {...(force ? { \"data-force\": force } : {})}\n className={cn(\n \"group/row relative flex cursor-pointer items-center gap-12 text-body transition-control focus-ring-inset\",\n card ? \"rounded-none px-20\" : \"rounded-item px-12\",\n stacked || lines || wraps ? \"min-h-56 py-8\" : card && density === \"default\" ? \"h-48\" : KAESO_LIST_VARIANTS.density[density].classes,\n rowTone(card, !!selected),\n off && \"pointer-events-none text-fg-disabled\",\n )}\n >\n {selectable && (\n <span\n className={cn(\n \"flex shrink-0 transition-control select-none\",\n selecting || selected ? \"opacity-100\" : \"opacity-0 group-hover/row:opacity-100 group-focus-visible/row:opacity-100 coarse:opacity-100\",\n )}\n onClick={(e) => e.stopPropagation()}\n >\n <RowCheckbox\n checked={!!selected}\n onToggle={() => onSelect?.()}\n aria-label={t(\"list.selectItem\", \"Select {name}\", { name: item.textValue ?? (typeof item.title === \"string\" ? item.title : item.id) })}\n />\n </span>\n )}\n {depth === 1 && (\n <span aria-hidden className=\"relative -ml-4 h-full w-16 shrink-0 self-stretch\">\n <span className={cn(\"absolute left-6 w-1 bg-line-strong forced-line\", lastChild ? \"top-0 h-1/2\" : \"inset-y-0\")} />\n <span className=\"absolute top-1/2 left-6 h-1 w-10 bg-line-strong forced-line\" />\n </span>\n )}\n {item.glyph && <span className={cn(\"flex size-16 shrink-0 items-center justify-center\", off && \"opacity-50\")}>{item.glyph}</span>}\n {item.leading && <span className={cn(\"-mr-4 flex shrink-0\", stacked && \"self-start\", off && \"opacity-50\")}>{item.leading}</span>}\n {item.displayId && (\n <TruncatedText\n className={cn(\n \"shrink-0 mono text-small tabular\",\n off ? \"text-fg-disabled\" : selected ? \"text-fg-secondary\" : \"text-fg-tertiary\",\n idWidth && ID_W[idWidth],\n )}\n >\n {item.displayId}\n </TruncatedText>\n )}\n <span className={cn(\"flex min-w-0 flex-1\", lines ? \"flex-col items-stretch gap-4\" : \"contents\")}>\n <span className={cn(\"flex min-w-0\", lines ? \"w-full\" : \"flex-1\", stacked ? \"flex-col items-start gap-2\" : \"items-baseline gap-8\")}>\n {typeof item.title === \"string\" ? (\n <Text truncate weight=\"medium\" tone={off ? \"inherit\" : \"default\"} className={cn(\"min-w-0 shrink\", stacked && \"max-w-full\")}>\n {item.title}\n </Text>\n ) : (\n <span className={cn(\"min-w-0 truncate font-medium\", off ? \"text-inherit\" : \"text-fg\", stacked && \"max-w-full\")}>{item.title}</span>\n )}\n {item.subtitle && (\n <TruncatedText\n wrap={wraps}\n className={cn(\"min-w-0\", off ? \"text-fg-disabled\" : \"text-fg-secondary\", stacked ? \"max-w-full text-small\" : \"flex-1 basis-0\")}\n >\n {item.subtitle}\n </TruncatedText>\n )}\n </span>\n {lines && (\n <span className=\"flex min-h-24 min-w-0 flex-wrap items-center gap-x-8\">\n {item.meta && <span className={cn(\"flex min-w-0 max-w-full items-center gap-6 overflow-hidden\", off && \"opacity-50\")}>{item.meta}</span>}\n {item.date && (\n <span className={cn(\"shrink-0 text-small whitespace-nowrap tabular\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>{item.date}</span>\n )}\n {trailing}\n {item.actions && <span className=\"ml-auto flex shrink-0 items-center gap-2\">{item.actions}</span>}\n </span>\n )}\n </span>\n {!lines && (item.meta || item.actions) && (\n <span className=\"relative flex shrink-0 items-center gap-6\">\n <span\n className={cn(\n \"flex items-center gap-6\",\n item.actions && \"transition-control group-hover/row:opacity-0 group-focus-within/row:opacity-0\",\n off && \"opacity-50\",\n )}\n >\n {item.meta}\n </span>\n {item.actions && (\n <span\n className={cn(\n \"flex items-center gap-2 opacity-0 transition-control group-hover/row:opacity-100 group-focus-within/row:opacity-100 coarse:opacity-100\",\n item.meta && \"absolute inset-y-0 right-0 coarse:static\",\n )}\n >\n {item.actions}\n </span>\n )}\n </span>\n )}\n {!lines && item.date && (\n <span className={cn(\"min-w-80 shrink-0 text-right text-small whitespace-nowrap tabular\", off ? \"text-fg-disabled\" : \"text-fg-secondary\")}>\n {item.date}\n </span>\n )}\n {!lines && trailing}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ListRow.displayName = \"ListRow\";\n\nexport interface GroupHeaderProps {\n title: ReactNode;\n glyph?: ReactNode | undefined;\n count?: number | undefined;\n collapsed?: boolean | undefined;\n onToggle?: (() => void) | undefined;\n onAdd?: (() => void) | undefined;\n addLabel?: string | undefined;\n indent?: boolean | undefined;\n first?: boolean | undefined;\n index?: number | undefined;\n active?: boolean | undefined;\n onFocus?: (() => void) | undefined;\n}\n\nexport const GroupHeader = /* @__PURE__ */ forwardRef<HTMLDivElement, GroupHeaderProps>(function GroupHeader(\n { title, glyph, count, collapsed, onToggle, onAdd, addLabel, indent, first, index, active, onFocus },\n ref,\n) {\n const card = useInset();\n const padded = useGutterPadded();\n const t = useUiText();\n return (\n <div\n ref={ref}\n role=\"row\"\n aria-rowindex={index !== undefined ? index + 1 : undefined}\n onFocus={onFocus}\n className={card ? cn(\"group/gh bg-fill-1\", !first && \"hairline-t\") : cn(\"group/gh\", !first && \"pt-16\", padded ? \"px-0\" : \"px-24\")}\n >\n <div role=\"gridcell\" className={cn(\"flex h-36 items-center gap-4\", card && \"pr-12 pl-8\")}>\n <button\n type=\"button\"\n aria-expanded={!collapsed}\n data-index={index}\n tabIndex={active === false ? -1 : 0}\n onClick={onToggle}\n className={cn(\n \"relative flex h-28 min-w-0 cursor-pointer items-center gap-8 rounded-pill px-12 text-small transition-control focus-ring tap-target\",\n card ? \"hover:bg-fill-2 active:bg-fill-3\" : \"hover:bg-fill-1 active:bg-fill-2\",\n )}\n >\n {indent && !card && <span aria-hidden className=\"w-22 shrink-0\" />}\n {glyph && <span className=\"flex size-16 items-center justify-center\">{glyph}</span>}\n <span className=\"truncate font-medium text-fg-secondary\">{title}</span>\n {count !== undefined && <span className=\"text-fg-tertiary tabular\">{count}</span>}\n <svg\n viewBox=\"0 0 8 8\"\n aria-hidden\n className={cn(\"size-10 text-fg-tertiary transition-transform duration-200 ease-standard\", !collapsed && \"rotate-90\")}\n >\n <path d=\"M2.5 1.5 5.5 4l-3 2.5z\" fill=\"currentColor\" />\n </svg>\n </button>\n <span className=\"flex-1\" />\n {onAdd && (\n <span className=\"flex opacity-0 transition-control group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 coarse:opacity-100\">\n <IconButton icon={__icon_Add01Icon} aria-label={addLabel ?? t(\"list.add\", \"Add\")} size=\"xs\" onClick={onAdd} />\n </span>\n )}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") GroupHeader.displayName = \"GroupHeader\";\n\nexport interface SelectionBarProps {\n count: number;\n onClear: () => void;\n children?: ReactNode | undefined;\n}\n\nexport const SelectionBar = /* @__PURE__ */ forwardRef<HTMLDivElement, SelectionBarProps>(function SelectionBar({ count, onClear, children }, ref) {\n const container = usePortalContainer();\n const t = useUiText();\n if (typeof document === \"undefined\") return null;\n return createPortal(\n <div\n ref={ref}\n role=\"region\"\n aria-label={t(\"list.selection\", \"Selection\")}\n className=\"pointer-events-none fixed right-0 bottom-24 left-0 z-50 flex justify-center px-16\"\n >\n <div className=\"pointer-events-auto flex min-h-44 items-center gap-4 rounded-pill bg-toast py-6 pr-6 pl-16 text-body font-medium text-toast-fg shadow-toast popup-motion\">\n <span className=\"pr-8 tabular\">{t(\"list.selected\", \"{count} selected\", { count: String(count) })}</span>\n <span className=\"mr-4 h-20 w-1 bg-toast-action\" aria-hidden />\n {children}\n <button\n type=\"button\"\n onClick={onClear}\n aria-label={t(\"list.clearSelection\", \"Clear selection\")}\n className=\"inline-flex size-32 cursor-pointer items-center justify-center rounded-pill text-toast-fg-secondary transition-control hover:bg-toast-action hover:text-toast-fg focus-ring\"\n >\n <Icon icon={__icon_Cancel01Icon} size=\"sm\" />\n </button>\n </div>\n </div>,\n container ?? document.body,\n );\n});\nif (process.env.NODE_ENV !== \"production\") SelectionBar.displayName = \"SelectionBar\";\n\nexport interface SelectionActionProps {\n children: ReactNode;\n onClick?: (() => void) | undefined;\n icon?: IconData | undefined;\n danger?: boolean | undefined;\n}\n\nexport const SelectionAction = /* @__PURE__ */ forwardRef<HTMLButtonElement, SelectionActionProps>(function SelectionAction({ children, onClick, icon, danger }, ref) {\n return (\n <button\n ref={ref}\n type=\"button\"\n onClick={onClick}\n className={cn(\n \"inline-flex h-32 cursor-pointer items-center gap-6 rounded-pill px-12 text-body font-medium transition-control hover:bg-toast-action focus-ring\",\n danger ? \"text-toast-danger\" : \"text-toast-fg\",\n icon && \"pl-10\",\n )}\n >\n {icon && <Icon icon={icon} size=\"sm\" className={danger ? undefined : \"text-toast-fg-secondary\"} />}\n {children}\n </button>\n );\n});\nif (process.env.NODE_ENV !== \"production\") SelectionAction.displayName = \"SelectionAction\";\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { l as e } from "./styles-hkFkoBbi.js";
2
+ import { l as e } from "./styles-8fn_bHRP.js";
3
3
  import { t } from "./cn-BjnOAUrA.js";
4
4
  import { i as n } from "./context-BELWW79w.js";
5
5
  import { t as r } from "./icon-CBzOwqrX.js";
@@ -7,8 +7,8 @@ import { r as i } from "./text-DkKdTVUf.js";
7
7
  import { r as a } from "./link-CMjkcLQK.js";
8
8
  import { t as o } from "./code-xqjww4Pv.js";
9
9
  import { r as s } from "./separator-BNWf6BBj.js";
10
- import { n as c } from "./button-IblhXUyZ.js";
11
- import { t as l } from "./code-block-64e-Cy1S.js";
10
+ import { n as c } from "./button-DrmFgdIi.js";
11
+ import { t as l } from "./code-block-O_EPmMIQ.js";
12
12
  import { r as u } from "./table-CTK5E0J7.js";
13
13
  import { t as d } from "./safe-href-G5DBNVwm.js";
14
14
  import { forwardRef as f, memo as p, useMemo as m, useState as h } from "react";
@@ -335,4 +335,4 @@ process.env.NODE_ENV !== "production" && (B.displayName = "Markdown");
335
335
  //#endregion
336
336
  export { k as a, D as i, C as n, S as o, B as r, O as s, w as t };
337
337
 
338
- //# sourceMappingURL=markdown-C565aBR7.js.map
338
+ //# sourceMappingURL=markdown-BZKZi9d8.js.map