@mieweb/ui 0.7.3-dev.14 → 0.7.3-dev.16

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 (50) hide show
  1. package/dist/brands/index.cjs +12 -12
  2. package/dist/brands/index.js +3 -3
  3. package/dist/{chunk-ZIE52CWX.js → chunk-2DP6BZ7A.js} +46 -6
  4. package/dist/chunk-2DP6BZ7A.js.map +1 -0
  5. package/dist/{chunk-33TQ25IK.js → chunk-2WLP2ERQ.js} +4 -4
  6. package/dist/{chunk-33TQ25IK.js.map → chunk-2WLP2ERQ.js.map} +1 -1
  7. package/dist/{chunk-I2AHT7JM.js → chunk-CKZX6IQN.js} +27 -2
  8. package/dist/chunk-CKZX6IQN.js.map +1 -0
  9. package/dist/{chunk-MO65V64I.js → chunk-DSSMQH74.js} +2 -2
  10. package/dist/{chunk-MO65V64I.js.map → chunk-DSSMQH74.js.map} +1 -1
  11. package/dist/{chunk-JU62BLDY.cjs → chunk-GJD4OW7P.cjs} +27 -2
  12. package/dist/chunk-GJD4OW7P.cjs.map +1 -0
  13. package/dist/chunk-K6CSD3S7.js +498 -0
  14. package/dist/chunk-K6CSD3S7.js.map +1 -0
  15. package/dist/{chunk-HUDYTCTT.cjs → chunk-LRFH6KM3.cjs} +45 -5
  16. package/dist/chunk-LRFH6KM3.cjs.map +1 -0
  17. package/dist/chunk-PIQBB2JY.cjs +525 -0
  18. package/dist/chunk-PIQBB2JY.cjs.map +1 -0
  19. package/dist/{chunk-JDHIBJ5K.cjs → chunk-RBEQQ4GG.cjs} +2 -2
  20. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-RBEQQ4GG.cjs.map} +1 -1
  21. package/dist/{chunk-35HHCXWC.cjs → chunk-SETNPK4P.cjs} +4 -4
  22. package/dist/{chunk-35HHCXWC.cjs.map → chunk-SETNPK4P.cjs.map} +1 -1
  23. package/dist/components/Autocomplete/index.cjs +2 -2
  24. package/dist/components/Autocomplete/index.d.cts +20 -3
  25. package/dist/components/Autocomplete/index.d.ts +20 -3
  26. package/dist/components/Autocomplete/index.js +1 -1
  27. package/dist/components/CustomizableDashboard/index.cjs +33 -0
  28. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  29. package/dist/components/CustomizableDashboard/index.d.cts +121 -0
  30. package/dist/components/CustomizableDashboard/index.d.ts +121 -0
  31. package/dist/components/CustomizableDashboard/index.js +4 -0
  32. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  33. package/dist/esheet.cjs +6 -6
  34. package/dist/esheet.js +3 -3
  35. package/dist/index.cjs +148 -123
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +1 -0
  38. package/dist/index.d.ts +1 -0
  39. package/dist/index.js +18 -17
  40. package/dist/index.js.map +1 -1
  41. package/dist/styles.css +1 -1
  42. package/dist/tailwind-preset.cjs +4 -4
  43. package/dist/tailwind-preset.js +1 -1
  44. package/dist/utils/index.cjs +9 -9
  45. package/dist/utils/index.js +1 -1
  46. package/package.json +4 -1
  47. package/dist/chunk-HUDYTCTT.cjs.map +0 -1
  48. package/dist/chunk-I2AHT7JM.js.map +0 -1
  49. package/dist/chunk-JU62BLDY.cjs.map +0 -1
  50. package/dist/chunk-ZIE52CWX.js.map +0 -1
@@ -1,21 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var chunkJDHIBJ5K_cjs = require('../chunk-JDHIBJ5K.cjs');
3
+ var chunkRBEQQ4GG_cjs = require('../chunk-RBEQQ4GG.cjs');
4
+ var chunkX7S76WB7_cjs = require('../chunk-X7S76WB7.cjs');
4
5
  var chunkP52GA3GJ_cjs = require('../chunk-P52GA3GJ.cjs');
5
6
  var chunkLCQGAOAZ_cjs = require('../chunk-LCQGAOAZ.cjs');
6
7
  var chunkZ5J4NTPL_cjs = require('../chunk-Z5J4NTPL.cjs');
7
8
  var chunkU7VQUOLS_cjs = require('../chunk-U7VQUOLS.cjs');
9
+ var chunkUCGUA3QV_cjs = require('../chunk-UCGUA3QV.cjs');
8
10
  var chunkRR2MJBGV_cjs = require('../chunk-RR2MJBGV.cjs');
9
- var chunkX7S76WB7_cjs = require('../chunk-X7S76WB7.cjs');
10
11
  var chunkJ644FU54_cjs = require('../chunk-J644FU54.cjs');
11
12
  var chunkWNJRS7Y7_cjs = require('../chunk-WNJRS7Y7.cjs');
12
- var chunkUCGUA3QV_cjs = require('../chunk-UCGUA3QV.cjs');
13
13
 
14
14
 
15
15
 
16
16
  Object.defineProperty(exports, "brands", {
17
17
  enumerable: true,
18
- get: function () { return chunkJDHIBJ5K_cjs.brands; }
18
+ get: function () { return chunkRBEQQ4GG_cjs.brands; }
19
+ });
20
+ Object.defineProperty(exports, "defaultBrand", {
21
+ enumerable: true,
22
+ get: function () { return chunkX7S76WB7_cjs.defaultBrand; }
19
23
  });
20
24
  Object.defineProperty(exports, "enterpriseHealthBrand", {
21
25
  enumerable: true,
@@ -33,13 +37,13 @@ Object.defineProperty(exports, "webchartBrand", {
33
37
  enumerable: true,
34
38
  get: function () { return chunkU7VQUOLS_cjs.webchartBrand; }
35
39
  });
36
- Object.defineProperty(exports, "ozwellBrand", {
40
+ Object.defineProperty(exports, "ccmeBrand", {
37
41
  enumerable: true,
38
- get: function () { return chunkRR2MJBGV_cjs.ozwellBrand; }
42
+ get: function () { return chunkUCGUA3QV_cjs.ccmeBrand; }
39
43
  });
40
- Object.defineProperty(exports, "defaultBrand", {
44
+ Object.defineProperty(exports, "ozwellBrand", {
41
45
  enumerable: true,
42
- get: function () { return chunkX7S76WB7_cjs.defaultBrand; }
46
+ get: function () { return chunkRR2MJBGV_cjs.ozwellBrand; }
43
47
  });
44
48
  Object.defineProperty(exports, "createBrandPreset", {
45
49
  enumerable: true,
@@ -57,9 +61,5 @@ Object.defineProperty(exports, "bluehiveBrand", {
57
61
  enumerable: true,
58
62
  get: function () { return chunkWNJRS7Y7_cjs.bluehiveBrand; }
59
63
  });
60
- Object.defineProperty(exports, "ccmeBrand", {
61
- enumerable: true,
62
- get: function () { return chunkUCGUA3QV_cjs.ccmeBrand; }
63
- });
64
64
  //# sourceMappingURL=index.cjs.map
65
65
  //# sourceMappingURL=index.cjs.map
@@ -1,12 +1,12 @@
1
- export { brands } from '../chunk-MO65V64I.js';
1
+ export { brands } from '../chunk-DSSMQH74.js';
2
+ export { defaultBrand } from '../chunk-PSTGFXQG.js';
2
3
  export { enterpriseHealthBrand } from '../chunk-MTZPVOP6.js';
3
4
  export { miewebBrand } from '../chunk-NERS5ZT6.js';
4
5
  export { wagglelineBrand } from '../chunk-2NTYAALC.js';
5
6
  export { webchartBrand } from '../chunk-CW66SO5O.js';
7
+ export { ccmeBrand } from '../chunk-SCQRJPSV.js';
6
8
  export { ozwellBrand } from '../chunk-5YUBQIC7.js';
7
- export { defaultBrand } from '../chunk-PSTGFXQG.js';
8
9
  export { createBrandPreset, generateBrandCSS, generateTailwindTheme } from '../chunk-WOYUQ4AT.js';
9
10
  export { bluehiveBrand } from '../chunk-3T7QGLNB.js';
10
- export { ccmeBrand } from '../chunk-SCQRJPSV.js';
11
11
  //# sourceMappingURL=index.js.map
12
12
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { inputVariants } from './chunk-3IMM2PM4.js';
1
+ import { inputVariants, floatingLabelVariants, RequiredMark } from './chunk-3IMM2PM4.js';
2
2
  import { useClickOutside } from './chunk-62ZOA6PX.js';
3
3
  import { useAnchoredPosition } from './chunk-BOOJDRJO.js';
4
4
  import { cn } from './chunk-TQONQSJO.js';
@@ -22,6 +22,10 @@ function Autocomplete({
22
22
  minQueryLength = 1,
23
23
  clearOnSelect = true,
24
24
  disabled,
25
+ label,
26
+ labelVariant = "stacked",
27
+ required = false,
28
+ requiredVariant,
25
29
  size,
26
30
  className,
27
31
  inputClassName,
@@ -36,6 +40,10 @@ function Autocomplete({
36
40
  const [activeIndex, setActiveIndex] = React.useState(-1);
37
41
  const containerRef = React.useRef(null);
38
42
  const listId = React.useId();
43
+ const generatedInputId = React.useId();
44
+ const inputId = inputProps?.id ?? generatedInputId;
45
+ const isFloating = labelVariant === "floating" && !!label;
46
+ const requiredMark = required && /* @__PURE__ */ jsx(RequiredMark, { variant: requiredVariant });
39
47
  const meetsMinLength = query.length >= minQueryLength;
40
48
  const filteredItems = React.useMemo(() => {
41
49
  if (!filter) return items;
@@ -121,10 +129,23 @@ function Autocomplete({
121
129
  "data-slot": "autocomplete",
122
130
  className: cn("relative", className),
123
131
  children: [
132
+ label && !isFloating && /* @__PURE__ */ jsxs(
133
+ "label",
134
+ {
135
+ "data-slot": "autocomplete-label",
136
+ htmlFor: inputId,
137
+ className: "text-foreground mb-1.5 block text-sm font-medium",
138
+ children: [
139
+ label,
140
+ requiredMark
141
+ ]
142
+ }
143
+ ),
124
144
  /* @__PURE__ */ jsx(
125
145
  "input",
126
146
  {
127
147
  ref: inputRef,
148
+ id: inputId,
128
149
  type: "text",
129
150
  role: "combobox",
130
151
  "aria-expanded": isOpen,
@@ -135,15 +156,34 @@ function Autocomplete({
135
156
  autoComplete: "off",
136
157
  "data-slot": "autocomplete-input",
137
158
  value: query,
138
- placeholder,
159
+ placeholder: isFloating ? " " : placeholder,
139
160
  disabled,
140
161
  onChange: handleChange,
141
162
  onKeyDown: handleKeyDown,
142
163
  onFocus: () => {
143
164
  if (meetsMinLength) setOpen(true);
144
165
  },
145
- className: cn(inputVariants({ size }), inputClassName),
146
- ...inputProps
166
+ className: cn(
167
+ inputVariants({
168
+ size,
169
+ labelVariant: isFloating ? "floating" : "stacked"
170
+ }),
171
+ inputClassName
172
+ ),
173
+ ...inputProps,
174
+ required
175
+ }
176
+ ),
177
+ isFloating && /* @__PURE__ */ jsxs(
178
+ "label",
179
+ {
180
+ "data-slot": "autocomplete-label",
181
+ htmlFor: inputId,
182
+ className: floatingLabelVariants({ size }),
183
+ children: [
184
+ label,
185
+ requiredMark
186
+ ]
147
187
  }
148
188
  ),
149
189
  isOpen && createPortal(
@@ -203,5 +243,5 @@ function Autocomplete({
203
243
  Autocomplete.displayName = "Autocomplete";
204
244
 
205
245
  export { Autocomplete };
206
- //# sourceMappingURL=chunk-ZIE52CWX.js.map
207
- //# sourceMappingURL=chunk-ZIE52CWX.js.map
246
+ //# sourceMappingURL=chunk-2DP6BZ7A.js.map
247
+ //# sourceMappingURL=chunk-2DP6BZ7A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"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","file":"chunk-2DP6BZ7A.js","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport {\n inputVariants,\n floatingLabelVariants,\n RequiredMark,\n type RequiredMarkVariant,\n} from '../Input';\n\nexport interface AutocompleteProps<T> extends Pick<\n VariantProps<typeof inputVariants>,\n 'size'\n> {\n /** Candidate items to search through. */\n items: T[];\n /** Called when the user picks an item. */\n onSelect: (item: T) => void;\n /** Returns a stable key for an item (used for React keys & option ids). */\n getItemKey: (item: T) => string;\n /** Renders the visible content of a result row. */\n renderItem: (item: T) => React.ReactNode;\n /**\n * Predicate used to filter `items` by the current query. When omitted, all\n * `items` are shown as-is (the caller is responsible for filtering).\n */\n filter?: (item: T, query: string) => boolean;\n /** Controlled query value. */\n value?: string;\n /** Default query value (uncontrolled). */\n defaultValue?: string;\n /** Called whenever the query changes. */\n onValueChange?: (query: string) => void;\n /** Placeholder text for the search input. */\n placeholder?: string;\n /** Content shown when there are no matching items. */\n emptyMessage?: React.ReactNode;\n /**\n * Renders the label of a \"create new\" action appended to the results. When\n * provided together with `onCreate`, the action row is shown.\n */\n createLabel?: (query: string) => React.ReactNode;\n /** Called when the \"create new\" action is chosen. Receives the query. */\n onCreate?: (query: string) => void;\n /** Minimum query length before results open. Defaults to 1. */\n minQueryLength?: number;\n /** Clear the query after a selection. Defaults to true. */\n clearOnSelect?: boolean;\n /** Disable the input. */\n disabled?: boolean;\n /** Label for the input. */\n label?: string;\n /**\n * How the label is rendered.\n * - `stacked` (default): label above the input.\n * - `floating`: label rests inside the input like a placeholder and floats\n * to the top of the field when focused or filled. Ignores `placeholder`.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Whether the input is required. */\n required?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n /** Accessible label for the combobox input. */\n 'aria-label'?: string;\n /** Class applied to the outer wrapper. */\n className?: string;\n /** Class applied to the input element. */\n inputClassName?: string;\n /** Forwarded ref to the underlying input. */\n inputRef?: React.Ref<HTMLInputElement>;\n /** Additional props forwarded to the input element. */\n inputProps?: Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'size'\n | 'placeholder'\n | 'disabled'\n | 'required'\n | 'aria-label'\n >;\n}\n\ntype Row<T> =\n | { kind: 'item'; item: T; key: string }\n | { kind: 'create'; key: string };\n\n/**\n * A data-agnostic, presentational combobox. It renders a search input with a\n * filterable results popover and an optional \"create new\" action. All data and\n * side effects are supplied via props/callbacks so it can be wired to any store.\n *\n * @example\n * ```tsx\n * <Autocomplete\n * items={employees}\n * getItemKey={(e) => e.id}\n * filter={(e, q) => e.name.toLowerCase().includes(q.toLowerCase())}\n * renderItem={(e) => <span>{e.name}</span>}\n * onSelect={handleSelect}\n * placeholder=\"Search employees…\"\n * />\n * ```\n */\nfunction Autocomplete<T>({\n items,\n onSelect,\n getItemKey,\n renderItem,\n filter,\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n placeholder,\n emptyMessage,\n createLabel,\n onCreate,\n minQueryLength = 1,\n clearOnSelect = true,\n disabled,\n label,\n labelVariant = 'stacked',\n required = false,\n requiredVariant,\n size,\n className,\n inputClassName,\n inputRef,\n inputProps,\n 'aria-label': ariaLabel,\n}: AutocompleteProps<T>) {\n const [uncontrolledValue, setUncontrolledValue] =\n React.useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const query = isControlled ? controlledValue : uncontrolledValue;\n\n const [open, setOpen] = React.useState(false);\n const [activeIndex, setActiveIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const listId = React.useId();\n const generatedInputId = React.useId();\n const inputId = inputProps?.id ?? generatedInputId;\n\n const isFloating = labelVariant === 'floating' && !!label;\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n const meetsMinLength = query.length >= minQueryLength;\n\n const filteredItems = React.useMemo(() => {\n if (!filter) return items;\n return items.filter((item) => filter(item, query));\n }, [items, filter, query]);\n\n const showCreate = Boolean(onCreate && createLabel && query.length > 0);\n\n const rows = React.useMemo<Row<T>[]>(() => {\n const itemRows: Row<T>[] = filteredItems.map((item) => ({\n kind: 'item',\n item,\n key: getItemKey(item),\n }));\n if (showCreate) {\n itemRows.push({ kind: 'create', key: '__create__' });\n }\n return itemRows;\n }, [filteredItems, showCreate, getItemKey]);\n\n const hasContent =\n rows.length > 0 || (meetsMinLength && emptyMessage != null);\n const isOpen = open && meetsMinLength && hasContent;\n\n // Portal + fixed positioning so the listbox escapes overflow-hidden\n // ancestors (cards, dialogs, scroll containers, …).\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({ open: isOpen, matchWidth: true, maxHeight: 300 });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef],\n [floatingRef]\n );\n useClickOutside(outsideRefs, () => setOpen(false), open);\n\n const setQuery = React.useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolledValue(next);\n onValueChange?.(next);\n },\n [isControlled, onValueChange]\n );\n\n React.useEffect(() => {\n if (!isOpen) setActiveIndex(-1);\n }, [isOpen]);\n\n const commitRow = (row: Row<T>) => {\n if (row.kind === 'item') {\n onSelect(row.item);\n } else {\n onCreate?.(query);\n }\n setOpen(false);\n setActiveIndex(-1);\n if (clearOnSelect) setQuery('');\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setQuery(e.target.value);\n setOpen(true);\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!isOpen) {\n setOpen(true);\n return;\n }\n setActiveIndex((i) => (rows.length === 0 ? -1 : (i + 1) % rows.length));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n if (!isOpen) return;\n setActiveIndex((i) =>\n rows.length === 0 ? -1 : (i - 1 + rows.length) % rows.length\n );\n } else if (e.key === 'Enter') {\n if (isOpen && activeIndex >= 0 && activeIndex < rows.length) {\n e.preventDefault();\n commitRow(rows[activeIndex]);\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n\n const activeId =\n isOpen && activeIndex >= 0 && activeIndex < rows.length\n ? `${listId}-opt-${rows[activeIndex].key}`\n : undefined;\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n data-slot=\"autocomplete\"\n className={cn('relative', className)}\n >\n {label && !isFloating && (\n <label\n data-slot=\"autocomplete-label\"\n htmlFor={inputId}\n className=\"text-foreground mb-1.5 block text-sm font-medium\"\n >\n {label}\n {requiredMark}\n </label>\n )}\n <input\n ref={inputRef}\n id={inputId}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeId}\n aria-label={ariaLabel}\n autoComplete=\"off\"\n data-slot=\"autocomplete-input\"\n value={query}\n // A single-space placeholder keeps :placeholder-shown reliable so the\n // label can float via CSS alone (mirrors Input).\n placeholder={isFloating ? ' ' : placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n if (meetsMinLength) setOpen(true);\n }}\n className={cn(\n inputVariants({\n size,\n labelVariant: isFloating ? 'floating' : 'stacked',\n }),\n inputClassName\n )}\n {...inputProps}\n required={required}\n />\n {isFloating && (\n <label\n data-slot=\"autocomplete-label\"\n htmlFor={inputId}\n className={floatingLabelVariants({ size })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={listId}\n role=\"listbox\"\n data-slot=\"autocomplete-list\"\n className={cn(\n 'border-border overflow-auto rounded-md border',\n 'bg-card text-card-foreground shadow-lg'\n )}\n >\n {rows.length === 0\n ? emptyMessage != null && (\n <div\n data-slot=\"autocomplete-empty\"\n className=\"text-muted-foreground px-4 py-3 text-sm\"\n >\n {emptyMessage}\n </div>\n )\n : rows.map((row, index) => {\n const isActive = index === activeIndex;\n const optionId = `${listId}-opt-${row.key}`;\n return (\n <button\n key={row.key}\n id={optionId}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n data-slot={\n row.kind === 'create'\n ? 'autocomplete-create'\n : 'autocomplete-option'\n }\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => commitRow(row)}\n className={cn(\n 'w-full px-4 py-3 text-left text-sm transition-colors',\n 'border-border border-b last:border-b-0',\n 'focus:outline-none',\n isActive\n ? 'bg-muted text-foreground'\n : 'hover:bg-muted',\n row.kind === 'create' &&\n 'text-primary-800 flex items-center gap-2 font-medium'\n )}\n >\n {row.kind === 'create'\n ? createLabel!(query)\n : renderItem(row.item)}\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n}\n\nAutocomplete.displayName = 'Autocomplete';\n\nexport { Autocomplete };\n"]}
@@ -1,10 +1,10 @@
1
- import { Textarea } from './chunk-H3YO5GBM.js';
2
1
  import { Tooltip } from './chunk-FJ7YPVKV.js';
2
+ import { Textarea } from './chunk-H3YO5GBM.js';
3
3
  import { RadioGroup, Radio } from './chunk-EPSB4WTL.js';
4
+ import { DateInput } from './chunk-IILJGFI5.js';
4
5
  import { Label } from './chunk-I3WGZPI6.js';
5
6
  import { Select } from './chunk-XBKOZRDO.js';
6
7
  import { Card, CardHeader, CardContent } from './chunk-QYSUYB3S.js';
7
- import { DateInput } from './chunk-IILJGFI5.js';
8
8
  import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-XMCIXHGH.js';
9
9
  import { Input } from './chunk-3IMM2PM4.js';
10
10
  import { AlertCircle, Plus, GripVertical, StickyNote, Ban, Pencil, CalendarCheck, ExternalLink, ThumbsUp, HandMetal, ThumbsDown, HelpCircle, ChevronDown, ChevronUp, RefreshCw } from './chunk-3PXOIAF6.js';
@@ -1565,5 +1565,5 @@ function MedicationReconciliation({
1565
1565
  }
1566
1566
 
1567
1567
  export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig };
1568
- //# sourceMappingURL=chunk-33TQ25IK.js.map
1569
- //# sourceMappingURL=chunk-33TQ25IK.js.map
1568
+ //# sourceMappingURL=chunk-2WLP2ERQ.js.map
1569
+ //# sourceMappingURL=chunk-2WLP2ERQ.js.map